Tutorial zum Erlernen der AVR Assembler-Sprache von
AVR-Einchip-Prozessoren AT90S, ATtiny, ATmega und ATxmega
von ATMEL anhand praktischer Beispiele.
Einfacher 8-Bit-Digital-zu-Analog-Wandler mit einem R/2R-Netzwerk RC-Filter zum R/2R-Netzwerk
RC-Filter-Eigenschaften
R/2R-Netzwerke erzeugen im dynamischen Betrieb steile Rechteckflanken. Diese
sind bei 4-, 5- oder 6-Bit Auflösung um so steiler, so dass sich damit
kaum ein einigermassen reiner Sinus erzeugen lässt. So sieht ein
4-Bit-DAC-Sinus aus:
Das hat nur von sehr weitem mit einem Sinus zu tun, und enthält eine gelungene
Mischung aus 1.000 Hz, 3.000 Hz, 5.000 Hz, 7.000 Hz und viele,
viele andere mehr. Wer sich davon überzeugen will, dass so ein Rechteck aus allen
ungeradzahligen Oberwellen der Grundschwingung besteht, mit leicht abfallender
Amplitude, wird
hier
fündig.
Nur Anhänger der ganz großen Vielfalt können so was wirklich
gut finden, alle anderen tun was dagegen, nämlich RC-Filtern.
Filter für DACs
Einstufiges RC-Filter
Die hohen Frequenzen oberhalb der zu erzeugenden Sinusfrequenz müssen also
raus aus dem Signal. Das erreicht man am einfachsten mit einem RC-Filter. Es gibt
auch noch andere Methoden, aber nicht zum Preis von 20 Cent und mit zwei
kleinen Bauteilen. So sieht ein RC-Filter aus:
Es wirkt folgendermaßen. Bei der Frequenz f hat der Kondensator einen
Scheinwiderstand von
ZC = 1 / (2 * Π * f * C)
Bei einer Frequenz von 1.000 Hz hat ein Kondensator von 10 nF einen
Scheinwiderstand von
Mit höherer Frequenz und höherer Kapazität des Kondensators hat C
einen immer niedrigeren Scheinwiderstand. Bei 3 kHz sind es schon 5305 Ω,
bei 5 kHz 3183 Ω, usw.
Der Widerstand R bildet nun mit dem Scheinwiderstand von C einen Spannungsteiler.
Am Ausgang ist die Spannung
UAus = UEin * ZC / (R + ZC).
Bei f = 1000 Hz, C = 10 nF und R = 10 kΩ ist der Spannungsteiler
P1kHz = 15916 / (10000 + 15916) = 0,614
Das entspricht einer Abschwächung des Eingangssignals auf das 0,614-fache.
Bei drei kHz sind es schon
P3kHz = 5305 / (10000 + 5305) = 0,347
also etwa doppelt so hohe Abschwächung wie bei 1000 Hz. Bei 5 kHz sind
es 0,241, also die dreifache Abschwächung.
Die Amplitude noch höherer Frequenzen wird also nicht Null, aber sie kann sehr,
sehr klein werden, wenn R, C und f größer werden.
Zweistufiges RC-Filter
Macht man das Ganze zwei Mal, ist die Filterkurve noch steiler. Bei 1 kHz waren
es das 0,614-fache, macht man das zweimal ist es die 0,641 * 0,641 = 0,411-fache
Abschwächung, also nicht so arg viel stärker. Aber bei 3 kHz ist nur
noch das 0,120-fache an Amplitude über geblieben, bei 5 kHz nur noch das
0,058-fache. Noch mehr RC-Stufen verstärken den Effekt nur noch weiter.
Wir werden den Effekt gleich anschaulich sehen.
Das hier ist der Abschwächungseffekt, den die ein-, zwei- und drei-stufigen
Filter haben. Zwischen 10 und 100 Hz ist praktisch kein Filtereffekt zu sehen,
die Frequenzen passieren das Filter nahezu unabgeschwächt. Bei 1.000 Hz
sind beim 1-stufigen Filter schon Einbrüche der Spannung auf die Hälfte,
beim 3-stufigen auf das 0,2-fache zu sehen. Eine weitere Dekade höhere
Frequenzen von 10.000 Hz sind auf ein Zehntel beim 1-stufigen Filter
abgeschwächt, beim 2-stufigen auf ein Tausendstel und beim dreistufigen auf
ein 40.000-stel.
Eine geeignete Methode, um die eckigen Rechtecksignale gehörig abzuschleifen.
Filtereffekt bei DAC-Signalen
Um den Effekt zu demonstrieren, hier eine 100 Hz-Schwingung mit einem 5-Bit-DAC,
gefiltert mit R=10k und C=10n. Die zu sehenden Treppen des DAC sind mit einer Stufe
schon nahezu verschliffen, bei zwei (magenta) und bei drei Stufen (rot) sind die
restlichen Welligkeiten kaum mehr zu erkennen.
Die grüne Kurve eiert noch ein wenig und giert nach dem Rechteck. Bei der
Magenta-Kurve nach zwei Stufen sieht man nur noch beim genauen Hingucken ein
paar Unebenheiten. Diese sind bei der roten Kurve, nach drei RC-Filtern, ganz
verschwunden, und ein fast idealer Sinus ist erreicht.
Mit demselben R und C, aber bei der 10-fachen Frequenz ist das hier zu sehen:
Das ist etwas zu viel des guten RC und auch die Grundschwingung wird auf etwa
die Hälfte abgeschwächt. Dafür ist auch schon nach einer einzigen
Filterstufe ein anständiger Sinus erreicht und die beiden Folgestufen
wären eigentlich mehr als flüssig, nämlich überflüssig.
Den Unterschied zwischen zwei- und dreistufigem RC-Filter zeigt das folgende Bild.
Hier sind nur zwei Stufen aktiv.
Hier ist die Amplitude in allen zwei Stufen deutlich weniger abgeschwächt.
Bei der dreistufigen Variante wirken die RC-Glieder nicht nur als weitere
Spannungsteiler: sie wirken durch die Rückströme von C3
nach C2, und in der Folge auch von C2 nach C1,
zusätzlich absenkend.
Bei acht Bit Auflösung reicht übrigens schon eine einzige Stufe aus,
um die Restwelligkeit zu filtern, weil die störenden Rechtecksignalanteile
eine acht mal höhere Frequenz haben und daher der Filtereffekt entsprechend
besser wirkt.
Wer nun glaubt, mit einem 10-Bit-DAC dagegen angehen zu können, der sollte
sich bewusst sein, dass damit auch die maximal erzeugbare Frequenz um den Faktor
vier niedriger wird. Man müsste einen AVR mit 256 MHz Takt gehörig
übertakten, um mit dem 10-Bit-DAC noch die im Audio-Bereich üblichen
20 kHz-Töne erzeugen zu können. Aber es ist sicher etwas einfacher,
mit zwei Widerständen und zwei Kondensatoren und einem 5-Bit-DAC dagegen
anzugehen als auf eine höher taktende Prozessorfamilie von AMD oder Intel
zu wechseln. Mehr Grips statt mehr Taktfrequenz!
Die Software für die Filteranalyse ist in Lazarus-Pascal geschrieben.
Der Quellcode ist hier, eine für 64-Bit-Win
kompilierte Version davon ist hier.
Das Programm ist so einfach zu bedienen, dass sich eine Bedienungsanleitung
erübrigt.
Einfach die Einstellungen im linken Teil ändern. Editierfelder prüfen
zulässige Wertebereiche und erröten, wenn was falsch ist. Sie akzeptieren
deutsche und ausländische Dezimalzeichen. Bei den Dropdown-Feldern bitte nur
die vorgegebenen Werte wählen und auf die Handeingabe von Werten im Editierfeld
verzichten. Mit dem Button "Speichern" kann das Bild als PNG oder BMP
gespeichert werden.
Andere Software und Anwendungen für RC-Filter
Hier gibt es eine alternatives
Tool zum Spielen mit RC-Filtern, mit dem man mit Frequenzen, Widerständen
und Kondensatoren spielen kann.
Eine etwas breitere Anwendung von Analogschaltern zur Auswahl von Kondensatoren
für RC-Netwerke ist
hier gezeigt.
Eine noch breitere Auswahl an Kondensatoren ermöglicht die Schaltung
hier.
Lob, Tadel, Fehlermeldungen, Genöle und Geschimpfe oder Spam bitte über
das Kommentarformular an mich.