Hallo, Ich habe mir hier im Forum und extern schon einiges durchgelesen, bin mir allerdings unsicher ob sich ein 3 Kanal Software-DDS mit PWM Ausgang auf einem AVR realisieren lässt. Ich will 3 Frequenzen von ca. 100Hz bis 3kHz erzeugen. Hier gibt es ja einige Versionen welche einen externen R-2R Wandler direkt an einen Port hängen. Ich würde gerne die DA Wandlung per 8 bit Timer als PWM Ausgabe + Filter machen. z.B.: ATMega328 Timer0 und Timer2 mit selbem Prescaler. Macht das Sinn oder übersehe ich einen einfachen Grund wieso ich keine PWM als Ausgang nehmen sollte. So den neuen Ausgabe werte sollte ich jede PWM Periode berechnen. Also sagen wir ein Prescaler von 256 würde bei 16MHz eine Periode von 62.5kHz ergeben. Da sollte genügen Luft sein um 3 Phasenakkumulatoren hochzuzählen und neue Werte in die Compare Match Register zu laden. Mir würden 16bit Akkumulatoren ausreichen (Auflösung ~1Hz ist ausreichend). Und ich denke mit 256 Werten in der Look-Up Table ist es auch getan. Habe ich hier irgendwas übersehen? Danke!
ttt schrieb: > Habe ich hier irgendwas übersehen? Die Einstellzeit des Tiefpassfilters wahrscheinlich.
Für 62 kHz PWM Frequenz und 8 Bit Auflösung hätte man Prescaler 1 - das ist auch gut so. Man will je die maximale Frequenz. Der Filter muss dann halt nicht nur die Aliases vom Sampling sondern auch noch die PWM Frequenz unterdrücken. Bei nur 3 kHz als Nutzfrequenz ist das aber kein großes Problem. Normales Fast PWM gibt eine zusätzliche kleine Verschiebung in der Zeit. Das gibt ein paar kleine zusätzliche Fehler, aber nicht viel bei der eher kleinen Signalfrequenz. Die Zeit (256 Zyklen) für die Berechnung reicht aus, ggf. geht es sogar noch in C. Es wäre von Vorteil wenn die Timer Pufferung beherrschen, so dass man nicht noch den passenden Zeitpunkt fürs update suchen muss. Der Meag328 hat reichlich Platz, da würde auch eine 1024 Einträge große Tabelle gehen.
Ein 3-Kanal DDS auf einem AVR geht: http://www.roboterclub-freiburg.de/atmega_sound/atmegaSID.html Für 32kHz hat es beim Atmega-SID nicht gereicht. Allerdings kostet die Fallunterscheidung für die verschiedenen Wellenformen in der Interruptroutine Zeit. Die PWM läuft hier nur mit 31.25kHz. Der Trick ist das gelbe Kabel im Bild: wenn ich mich recht erinnere, werden die 62.5kHz am Timer Ausgang erzeugt und dann wieder den PWM-Zählern zugeführt.
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.