3 Kanal DDS auf AVR

Gast #4565610
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!
Gast
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.