Forum: Mikrocontroller und Digitale Elektronik Impulssignal mit variabler Frequenz


von GaryB (Gast)


Lesenswert?

Hallo zusammen,

meine Herausforderung:
ich benötige eine Impulssignal das zur Ansteuerung einer sog. 
Impulsrichtungsschnittstelle dient. Diese Schnittstelle gibt 
Weginkremente vor, welche der angeschlossene Antriebe (ähnlich einem 
Schrittmotor) mit seiner Lageregelung ab arbeitet.
Das Signal muss dabei in ca. 8ms von 0 auf 430Khz geradelinig hoch...
die 430 kHz könnte ich zwar kleiner halten, aber das bedarf weiterer 
Anpassungen.

So nun habe ich mir die PWM-Funktion beim AVR-Mega8 angesehen und musste 
feststellen das ich mit dem digitalen Zähler keine konstante 
Frequenzverstellung habe, d.h. Zähler +1 ist nicht ein konstanter 
Frequenzhub. Wenn ich nicht irre dann ist besteht zwischen Zählerwert 
und Frequenzausgabe ein Hyperbel-Funktion.
Wie kann ich am einfachsten die variabel Frequenz einstellen bzw. gibt 
es andere Wege der Generierung einer Impulsfolge mit variabler Frequenz?
Zur Zeit gehe ich davon aus das ich die Puls-Breite immer bei 50:50 
halte und die Frequenz über den "Spitzenwert" der Zählrampe 
realisiere...

Vielen Dank schon jetzt,
Gary_B

von Rahul, der Trollige (Gast)


Lesenswert?

>d.h. Zähler +1 ist nicht ein konstanter
>Frequenzhub. Wenn ich nicht irre dann ist besteht zwischen Zählerwert
>und Frequenzausgabe ein Hyperbel-Funktion.

Das hängt vermutlich damit zusammen, dass f=1/T gilt...und eine 
Asymptote darstellt.
http://de.wikipedia.org/wiki/Asymptote


Hyperbel:
http://de.wikipedia.org/wiki/Hyperbel_%28Mathematik%29



>Wie kann ich am einfachsten die variabel Frequenz einstellen bzw. gibt
>es andere Wege der Generierung einer Impulsfolge mit variabler Frequenz?

Entweder lässt du den Controller etwas rechnen (sowas können die 
ziemlich gut) oder du lässt ihn bestimmte Werte aus einer Tabelle 
auslesen (das können sie auch recht gut).


von Falk (Gast)


Lesenswert?

@GaryB

>Das Signal muss dabei in ca. 8ms von 0 auf 430Khz geradelinig hoch...
>die 430 kHz könnte ich zwar kleiner halten, aber das bedarf weiterer
>Anpassungen.

>Wie kann ich am einfachsten die variabel Frequenz einstellen bzw. gibt
>es andere Wege der Generierung einer Impulsfolge mit variabler Frequenz?

Das Zauberwort heisst DDS (Direct Digital Synthesis).

www.analog.com/DDS

Entweder einen fertigen DDS-IC nehmen, oder, wenn nur ein digitaler Takt 
gebraucht wird, einen DDS Akkumulator in ein kleines CPLD brennen.

MfG
Falk

von Oliver (Gast)


Lesenswert?

Mehr oder weniger einfache Geräte, bei denen man "einfach eine Frequenz 
einstellen" kann, gibt es z.B. hier:

http://www.rsonline.de/elektronische-bauelemente-de/309741072-vann-draper-funktionsgeneratoren-funktionsgenerator-fg200.html

Ein Mega8 ist dagegen wie eine Schraube. Um den sinnvoll verwenden zu 
können, bedarf es eines Schraubenziehers (=Compiler), und vor allem 
eines Anwenders, der das Konzept einer Schraube verstanden hat. Sonst 
wird das nichts.

Schreib dir eine Funktion, die deine Frequenz in einen 
PWM-Register-Ladewert umrechnet. Ohne die geht es sowieso nicht. Und 
dann wirst du noch einiges weiteres programmieren und auch in Hardware 
realisieren müssen, denn ein Mega8 hat leider keine Drehknöpfe. Dieses 
"weitere" ist erfahrunsggemäß bei weitem aufwendiger, als die popelige 
Frequenzumrechnung.

Und wenn die Stufung zu grob sein sollte, oder die Frequenzkonstanz 
nicht ausreicht, oder es aus sonstigen Gründen nicht den Anforderungen 
genügt, dann brauchts du eine andere Schraube, sprich, dann geht es mit 
dem Mega8 nicht.

Oliver

von GaryB (Gast)


Lesenswert?

Danke für eure Beiträge - werde das heute abend erst einmal verarbeiten 
;)

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Das müßte sich doch berechnen lassen, wieviele Frequenzstufen in 8 
Millisekunden bei linearer Änderung unterzubringen sind.
8 ms ist die Periodendauer von 125 Hz, also muß die erste Stufe deutlich 
über 125 Hz liegen, und die Schrittweite ist identisch mit der ersten 
Stufe.
430 kHz entspricht einer Periodendauer von 2,3 Mikrosekunden, das passt 
3440 mal in 8 ms

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

die nächste Stufe dauert halb so lange wie die erste, die dritte ein 
Drittel usw, also eine unendliche Reihe 1+1/2+1/3+.... die hat ein 
endliches Ergebnis.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?


von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Äquidistante Frequnezstufen sind, wie Falk schon schrieb eine Aufgabe 
für einen DDS, der hier ziemlich oft mit neuen Frequenzwerten 
beschrieben werden muß. Einfacher, aber nicht so schöne Impulse, ist ein 
Binärraten-Multiplizierer wie der SN7497. Er macht aus einer 
Taktfrequenz, hier wäre 430 kHz zweckmäßig, 64 Frequenzstufen:
http://semiconductor.alldatasheet.com/semiconductor/electronic_parts/datasheet/27430/TI/SN7497N.html

von Christoph Kessler (db1uq) (Gast)


Angehängte Dateien:

Lesenswert?

Korrektur, die Reihe konvergiert nicht. Nennt sich Harmonische Reihe.

von GaryB (Gast)


Lesenswert?

Also wenn es auf Basis des AVR-Mega laufen soll dann muss es eine
Tabelle sein, die evtl. im Hochlauf berechnet wird oder vorher im 
Speicher hardcoded eingetragen wird. Nur ist diese Tabelle eben abhängig 
von Rampenzeit und Endfrequenz... deswegen ist eine Berechnung der Werte 
im Hochlauf vermutlich das Beste.

Die Frequenz der Anpassung hatte ich mir im Vorfeld auf 10 mal je ms 
vorgenommen - da der Atmel aber nur einen Prescaler für seine Timer 
hat... müsste man das abstimmen.

Alles in allem erscheint mir das Thema mit dem Anspruch einer 
"stoßfreien" Rampe nicht so trivial zu sein wie es mir am Anfang 
erschienen ist und ich muss mich wirklich nochmal hinsetzen.

Die vorgeschlagenen Bausteine muss ich mir nun erst einmal in Ruhe 
ansehen. Evtl. hat ja aber jemand so etwas auch schon mal realisiert??
Mein Boss meinte in Analogtechnik wäre das gar kein Thema - Stromquelle, 
Kondensator, Komperator und fertig ;)

von Rahul, der Trollige (Gast)


Lesenswert?

>Nur ist diese Tabelle eben abhängig von Rampenzeit und Endfrequenz...
DDS arbeitet auch nach dem Prinzip einer Tabelle..

>deswegen ist eine Berechnung der Werte im Hochlauf vermutlich das Beste.
Das ist ein Urteil von jemandem, der nicht weiß, wie man eine 
Frequenzänderung mit einem Timer realisiert... (SCNR)

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Es muß genau eine Lösung für die Aufgabe geben, wieviele Frequenzstufen 
zwishen Null und 430 kHz in 8 ms durchlaufen werden können, wenn jede 
Stufe genau eine Periode dauert. Es sind auf jeden Fall weniger als 
3440. Ein DDS wie der AD9835 muß für jede Stufe mit 32 Bit oder sind es 
noch mehr? seriell angesteuert werden, das wird knapp. Aber eine Tabelle 
ist unnötig, eine einfache Addition reicht.
Berechnung der Stufenzahl geht irgendwie mit der Näherungsformel für die 
Harmonische Reihe:
http://de.wikipedia.org/wiki/Harmonische_Reihe
Summe (n) = ln(n) + 0,5772156649

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Nachdem ich Blödsinn erzählt habe, jetzt hoffentlich der richtige 
Lösungsweg.
Für eine konstant ansteigende Frequenz mit gleichbleibenden Stufen muß 
die Anzahl der Perioden natürlich auch ansteigen.
Hier ein Diagramm, eine Gerade von 0 bis 430 kHz und von 0 bis 8 
Milliskunden. Im gleichen Diagramm die Hyperbel Periodendauer = 1/f
Der Schnittpunkt bei etwa 7,5 kHz ist der gesuchte Frequenzschritt.
Die Stufen lauten also 0 - 7,5kHz - 15 kHz - 22,5 kHz - ... -430 kHz das 
sind ca 57 Stufen.

von GaryB (Gast)


Lesenswert?

(Auf-)Lösung:

Die Aufgabe wurde nun mit Hilfe eines VCO gelöst.
Über die PWM des ATMEL stellt man die Periodendauer ein, damit erhält 
man Frequenzschritte die gemäß 1/T einer Hyperbel folgen. Für kleine 
Perioden extrem große Frequenzschritte hevorbringt.

Die Lösung besteht nun in einem DA-Wandler (R2R) welcher einen 
spannungsgeführten Oszillator bedient. Bis auf Abweichungen des 
Oszillators hat man damit eine konstante Schrittweite für die 
Frequenz-Verstellung.

Gruss!


von Falk (Gast)


Lesenswert?

@GaryB

>Die Aufgabe wurde nun mit Hilfe eines VCO gelöst.
>Über die PWM des ATMEL stellt man die Periodendauer ein, damit erhält
>man Frequenzschritte die gemäß 1/T einer Hyperbel folgen. Für kleine
>Perioden extrem große Frequenzschritte hevorbringt.

???? Also wieder analog? Ohhje. Naja, what works works.

MfG
Falk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.