Die Sinuserzeugung nach dem DDS prinzip geht etwas anders:
Es wird eine Variable mit z.B. 24 oder 32 Bit für Phase reserviert. Die oberen 8 Bit werden als Zeiger einer Sinustabelle genutzt. Es wird dann fortlaufend, z.B. alle 5 µs der Phasenwert um einen bestimmten Betrag erhöht und dann ein Wert aus der Sinustabelle ausgelesen und über den DA Wandler (z.B. 6 -8 Bits) ausgegeben. Die Frequenz wird verändert über den Betrag um den sich die Phase jeweils erhöht. Die Freuquenz kann so sehr fein (Schritte von rund 0.02 Hz bei 24 Bit Phase) eingestellt werden.
In Grenzen geht auch eine andere Wellenform, wenn man die Tabelle austauscht.
Die R2R schaltung ist eine andere Möglichkeit mit Widerständen einen DA Wandler aufzubauen. Man braucht zwar doppelt so viele Widerstände wie mit den gewichteten Widerständen, aber dafür nur 2 Werte im Verhältnis 1:2. Die Widerstände sollte man auch eher größer wählen, denn die IO-Ports haben einen Ausgangswiderstand von etwa 30-50 Ohm. Die externen Widerstände sollten deutlich größer sein, sonst kommt man nicht mal auf 4 Bit Auflösung. Für die R2R Kette würde ich eher 4,99 K und 10 K vorschlagen.
Um einen Verstärker am Ausgang wird man nicht herumkommen.
Die PWM Freuquenz beim Mega168 ist nicht immer 500 Hz. Die kann man in Grenzen Wählen bis maximal µC-Takt / "Zahl der stufen".
Es gibt schon einiger fertige DDS Projekte mit einem AVR im Netz, da kann man sich schon einiges anschauen.
Lesezeichen