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
Danke für eure Beiträge - werde das heute abend erst einmal verarbeiten ;)
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
Korrektur, die Reihe konvergiert nicht. Nennt sich Harmonische Reihe.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.