Forum: Mikrocontroller und Digitale Elektronik 3 Kanal DDS auf AVR


von ttt (Gast)


Lesenswert?

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!

von Hp M. (nachtmix)


Lesenswert?

ttt schrieb:
> Habe ich hier irgendwas übersehen?

Die Einstellzeit des Tiefpassfilters wahrscheinlich.

von Lurchi (Gast)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.