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
>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).
@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
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
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
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.
Ä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
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 ;)
>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)
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
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.
(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!
@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