Pfad:
Home =>
AVR-DE =>
Anwendungen =>
AVR-D/A-Wandler =>
DAC-Filter => RC-Filter-4051
This page in english:
 |
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
Flexibles RC-Filter zum R/2R-Netzwerk |
Flexibles RC-Filter mit 4051
Wenn man Sinusse mit sehr unterschiedlichen Frequenzen erzeugt, hat man das Problem,
dass das RC-Filter-Netzwerk für die Oberwellen auch sehr unterschiedliche Werte
annehmen muss. Diese Schaltung hier ermöglicht es, acht verschiedene RC-Filter
digital auszuwählen. Es kann z. B. bei dem Sinusgenerator mit dem ATmega324
hier
ein gesetzt werden. Da bei dieser Schaltung die Portausgänge PA5 bis PA7 noch
frei sind, kann diese Schaltung als RC-Netzwerk auch vom Prozessor angesteuert werden.
Die Schaltung
Das ist die Schaltung. Sie besteht aus zwei Analogschalter-ICs vom Typ 4051. Geschaltet
werden jeweils acht Kondensatoren C1 bis C8, der Widerstand R ist fixiert. Die
Auswahl-Eingänge A, B und C wählen den einzuschaltenden Kondensator aus.
Da bei der gewählten Schaltung die negative Versorgungsspannung VEE auf Null
Volt liegt, muss das Eingangssignal direkt vom Ausgang des Operationsverstärkers
kommen, damit es immer positiv bleibt (der Trennkondensator für die Gleichspannung
kommt an den Ausgang des RC-Netzwerks). Die Gesamtschaltung sieht daher so aus.
Auswahl von R und C1 bis C8
Da die Auswahl von R und C nicht so ganz einfach ist, habe ich in Lazarus ein Programm
geschrieben, das solche Filternetzwerke berechnet. R ist dabei mit 2,2 kΩ
fixiert und die eingestellten C's reichen von 220 pF bis 680 nF. Wie man sieht,
deckt der Faktor 3 bei den Kapazitätswerten den gesamten Frequenzbereich zwischen
10 Hz und 100 kHz gut ab. Wer den abgedeckten Frequenzbereich etwas einengen
möchte, nimmt den Faktor 2 oder 1,5 für den Abstand der Werte.
Die einzelnen Kondensatoren eignen sich für eine maximale Nutzfrequenz, wenn die
Abschwächung der Nutzfrequenz bei 0,5 liegt (Faktor 2). Das Diagramm
vergrößert die obige Kurven ein wenig und hat den Wert 0,5 eingezeichnet.
Diese Grenzfrequenz kann man folgendermaßen aus dem Kondensator berechnen:
f0,5 = e-ln(C)-10
Umgekehrt kann man den Kondensator aus der Frequenz mit der halben Abschwächung
mit der Gleichung
C = e-ln(f)-10
berechnen. In beiden Formeln ist f in Hz und C in Farad einzusetzen.
Die Grenzfrequenzen dieser Achter-Dekade bei R=2k2 sind in der Tabelle angegeben.
Ferner sind in der Tabelle
- die Auflösungen des R/2R-Netzwerks Res in diesem Frequenzbereich,
- die untere fu und obere fo Grenzfrequenz, und
- die Abschwächungsfaktoren Au und Ao
angegeben.
Cn | C | f0,5 (Hz) | Res | fu(Hz) |
fo(Hz) | Au | Ao |
C1 | 680 nF | 66,5 | 256 | 10 | 66,5 | 643 | 17.143 |
C2 | 220 nF | 205,7 | 256 | 66,5 | 205,7 | 2.828 | 17.143 |
C3 | 68 nF | 665,4 | 256 | 205,7 | 665,4 | 2.773 | 18.079 |
C4 | 22 nF | 2.056,8 | 128 | 665,4 | 2.056,8 | 748 | 6.005 |
C5 | 6.8 nF | 6.654,4 | 64 | 2.056,8 | 6.654,4 | 165 | 1.781 |
C6 | 2.2 nF | 20.568,1 | 8 | 6.654,4 | 20.568,1 | 4,7 | 27,9 |
C7 | 680 pF | 66.544,0 | 8 | 20.568,1 | 66.544,0 | 5,0 | 28,7 |
C8 | 220 pF | 205.681,4 | 8 | 66.544,0 | 205.681,4 | 1,8 | - |
Ermittlung von A, B und C
Soll für eine Frequenz f, die in mHz angegeben ist, der korrekte Kondensator
ermittelt werden (A, B und C), braucht man eine Frequenztabelle in mHz. Die folgende
Tabelle gibt jeweils die Grenzfrequenzen in mHz an (als 32-Bit-Zahl).
FTable:
.dw 0x03F0,0x0001 ; C =680 nF, f 1/2= 66.544 Hz
.dw 0x2371,0x0003 ; C =220 nF, f 1/2= 205.681 Hz
.dw 0x2760,0x000A ; C =68 nF, f 1/2= 665.440 Hz
.dw 0x626E,0x001F ; C =22 nF, f 1/2= 2.057 kHz
.dw 0x89BD,0x0065 ; C =6.8 nF, f 1/2= 6.654 kHz
.dw 0xD847,0x0139 ; C =2.2 nF, f 1/2= 20.568 kHz
.dw 0x6163,0x03F7 ; C =680 pF, f 1/2= 66.544 kHz
.dw 0x72CA,0x0C42 ; C =220 pF, f 1/2= 205.681 kHz
Mit einem Zähler, der bei Null beginnt, durchläuft man die Werte der
Tabelle solange, bis beim Vergleich ein Carry eintritt. Bei jedem Durchlauf der
Schleife, bei der kein Carry auftrat, macht man den Zähler mit
SUBI rZaehler,-1 (Zahlenwerte von 0..7) oder, wenn der Zähler in den
obersten drei Bit lokalisiert werden soll, mit SUBI rZaehler,-(1<<5) um
Eins größer.
Lob, Tadel, Fehlermeldungen, Genöle und Geschimpfe oder Spam bitte über
das Kommentarformular an mich.
Zum Anfang dieser Seite
©2020 by http://www.avr-asm-tutorial.net