Pfad: Home => AVR-DE => Anwendungen => DCF77-Empfänger => AM-Gleichrichter   This page in English: Flag DE
DCF77 Empfaenger-Logo Anwendungen von
AVR-Einchip-Controllern AT90S, ATtiny, ATmega und ATxmega
DCF77 AM-Gleichrichter mit ATtiny25
Logo

7 DCF77 AM-Gleichrichter mit ATtiny25

Für das DCF77-Signal von 77,5 kHz von einem Direktempfänger oder für die Zwischenfrequenz eines DCF77-Superhets von 32,768 kHz benötigt man einen Gleichrichter für das amplitudenmodulierte Signal. Dazu verwendet man gemeinhin einen Diodengleichrichter. Aber da Diodengleichrichter immer den Nachteil haben, dass sie 0,2 bis 0,3 V des Nutzsignals wegen ihrer Durchlassspannung verschwenden und daher für ganz schwache Signale taub sind, habe ich diesen Mikrocontroller-Gleichrichter entwickelt. Das Ding wertet auch noch Signale bis herab zu 5 mVpp korrekt aus.

Bitte beachten: aufgrund seiner Konstruktion ist das Ding nur für HF-/ZF-Signale bis 100 kHz geeignet. Zwischenfrequenzen von 455 kHz oder HF wie Lang-, Mittel- oder Kurzwelle kann dieses Ding nicht.

7.1 Wie es funktioniert

AM-Gleichrichter Schaltbild Der Gleichrichter arbeitet mit einem Microcontroller, hier einem ATtiny25, und nimmt die Signale an seinem ADC-Kanal-Eingang 3 entgegen. Der Controller arbeitet mit seinem eingebauten 8-MHz-RC-Oszillator bei seinen vollen 8 MHz (CLKPR wird per Software auf Eins gesetzt und die CLKDIV8-Fuse wird daher überschrieben).

7.1.1 Die Hardware

Der AD-Wandler arbeitet im Freilauf-Modus, das heißt er startet automatisch die nächste Wandlung wenn die aktuelle abgeschlossen ist. Der ADC-Taktvorteiler arbeitet mit 4, so dass der ADC mit 2 MHz getaktet wird. Da jede Wandlung im Freilauf-Modus 13,5 Takte benötigt, hat der ADC eine Wandlerfrequenz von 2 MHz / 13,5 = 148,2 kHz und eine Wandlung dauert 6,75 µs.

Das HF-Signal mit 77,5 kHz oder die ZF mit 32,768 kHz kommt als Sinussignal mit einer Amplitude von 0 bis 5 Vpp an den ADC3-Eingang. Die beiden Widerstände von 100 kΩ teilen die Betriebsspannung durch zwei, der Kondensator von 1 nF prägt dieser den Sinusverlauf auf. Dadurch werden folgende ADC-Werte erzeugt: Alles was der Controller damit tun muss, ist
  1. zwei vom MSB des Resultats subtrahieren,
  2. wenn das das Übertragsflag setzt: das Resultat invertieren.
Das richtet das Signal gleich: negative Amplituden werden positiv, positive bleiben positiv. In beiden Fällen wird die Mittenspannung 512 abgezogen. Das Resultat ist ein 9-Bit-Wert (0 bis 511).

8 Messwerte zum Ermitteln des Maximums bei 77,5 kHz Um die Anzahl der nötigen Messungen zu ermitteln, um das Maximum zu entdecken, habe ich in Lazarus eine Software dazu gebracht, mir die verschiedenen Varianten durchzurechnen. Es zeigt sich, dass mit nur 8 Messungen bei 77,5 kHz nicht das Maximum getroffen wird und dass der ermittelte Mittelwert auch deutlich zu niedrig liegt.

8 Messwerte zum Ermitteln des Maximums bei 32,768 kHz Das ist bei gemütlicheren 32 kHz schon deutlich besser.

32 Messwerte zum Ermitteln des Maximums bei 32,768 kHz Mit 32 solcher Messungen geht es alles viel besser. Dafür habe ich die Anzahl Maxima für die Ermittlung des Mittelwerts auf 8 reduziert.

Das wird immerzu wiederholt (mit dem ADC im Freilauf-Modus) und aus 32 solcher Messungen wird jeweils das Maximum festgestellt. Das dauert 32 * 6,75 = 216 µs. Das Maximum aus 8 Messungen tastet das Eingangssignal bei 32,768 kHz bei 56 Wellenzügen bzw. bei 77,5 kHz bei 134 Wellenzügen ab, jede Halbwelle wird 7 bzw. 17 mal abgetastet. So ist sichergestellt, dass das Maximum gefunden wird.

Die gefundenen Maxima werden zu je acht aufaddiert und das Resultat durch 16 geteilt, woraus ein 8-Bit-Wert für den Vergleichswert für den Ausgangs-PWM resultiert. Mit den Mittelungen aus acht Werten werden 8 * 216 µs = 1,73 ms Signaldauer überstrichen.


7.1.2 Die Duo-LED

Duo-LED Signalstärke Das Gerät kann mit einer rot/grünen oder rot/gelben Duo-LED bestückt werden, um die Signalstärke anzuzeigen. Die funktioniert folgendermaßen. Bei kleinen Amplituden dominiert rot, je höher die Amplitude desto grüner wird sie.

OCR0A und OCR0B sind gleich Das wird erreicht, indem beide Vergleichswerte von TC0 auf den gleichen Wert gesetzt werden, den Vergleichswert der auch in OCR1B steht. Das OC0A-Bit in TC0 wird auf Löschen (positive Polarität), das OC0B-Bit in TC0 wird auf Setzen gestellt (invertierte Polarität). Zu Beginn des PWM-Zyklus wird der Ausgang OC0A (grüne Anode) auf High, der Ausgang OC0B auf Low gesetzt, so dass die grüne LED angeht. Beim Compare-Match kehren sich beide Ausgänge um und die rote LED geht an. Je größer die Vergleichswerte, desto länger ist grün und desto kürzer ist rot. Beide Phasen zusammen sind immer 100% der PWM-Dauer.

OCR0A und OCR0B unterschiedlich Wenn OCR0A kleiner als OCR0B wäre, dann ist das Verhalten anders. Die grüne LED ist wieder von Beginn des Zyklus an eingeschaltet. Wenn der Vergleichswert OCR0A erreicht wird, wird die grüne LED ausgeschaltet und keine der beiden LED ist an, weil beide Ausgänge Low sind. Mit dem Eintreten von OCR0B wird dann die rote LED angeschaltet, die dann bis zum Ende des Zyklus an bleibt. Die Differenz zwischen OCR0A und OCR0B verringert daher die Leuchtdauer beider LEDs.

Das gleiche passiert, wenn OCR0B größer ist als OCR0A: nur dass dann beide Ausgänge in der Zwischenzeit High sind. Mit dieser Möglichkeit kann sowohl der Farbanteil rot/grün als auch die Intensität der LED variiert werden. Das wird in dieser Schaltung aber nicht ausgenutzt.

7.1.3 Der Gleichspannungs-Ausgang

PWM-RC-Filter-Antwort Der Timer/Counter TC1 produziert an seinem Ausgang OC1B ein gepulstes Gleichspannungssignal mit 31,25 kHz, jeder PWM-Zyklus dauert 32 µs. Die Mittelung der acht Maxima schlägt alle 13,82 ms / 32 µs = 423 PWM-Zyklen zu und setzt einen anderen (oder den gleichen) PWM-Vergleichswert.

Jeder PWM-Zyklus beginnt mit dem Setzen des Ausgabe-Pins OC1B, wird der Vergleichswert in OCR1B erreicht, wird der Ausgang Low (positives Ausgangssignal).

Das OC1B-Ausgangssignal wird mit den drei R=6k8 und C=150nF gefiltert. Die Zeitkonstante dieses RC-Netzwerks ist t = 0.69 * R * C = 0.7 ms. Das Diagramm zeigt das Filter zu Beginn mit einem 80%-Signal und nach 35 ms mit einem auf 20% PWM verringerten Ausgangssignal. Die ca. 15 bis 20 ms dauernde Anpassung an das geänderte PWM-Signal ist hinreichend, um das 100 ms dauernde DCF77-Signal einer übertragenen Null bzw. das 200 ms dauernde Eins-Signal zu erkennen.

Der PWM-Restbrumm des RC-Netzwerks beläuft sich auf:
  1. Stufe 1 (VC1, rot): 0,29 Vpp,
  2. Stufe 2 (VC2, gelb): 17 mVpp,
  3. Stufe 3 (VC3, grün): 5 mVpp.
Der Brumm der dritten Stufe macht folglich etwa ein Bit eines 10-Bit-ADC aus, das Netzwerk hat daher hinreichend Filterwirkung.

Die Mittelung über 8 Messungen des Maximums und das RC-Filter gleichen auch bei schwankenden Signalamplituden durch Störungen diese aus und liefern ein gemächliches Eingangssignal für die nächste Stufe.

7.1.4 Verfügbare Unterlagen

Alle Schaltbilder und Zeichnungen sind in der LibreOffice-Draw-Datei hier (siehe die untersten Zeichnungen für den Gleichrichter).

Die LibreOffice-Calc-Datei dcf77_am_gleichrichter_tn25.ods stellt alle Rechengrundlagen für den Gleichrichter zur Verfügung. Darin kann nach Herzenslust umdesignt werden (ADC-Sampling, Taktung, RC-Filter und Filterantwort, Duo-LED-Konfiguration, etc.). Wenn Du mit den Werten spielst, bitte beachten: Bei einem ADC-Prescaler von nur zwei statt vier überholt der AD-Wandler die Interrupt-Service- Routine und blockiert jede weitere Programmausführung außerhalb der Service-Routine!

An den Seitenanfang

7.2 Testen

Gleichrichter Testsignal Generator Ich habe den Gleichrichter mit dem Generator im rechten Schaltbild getestet. Er erzeugt ein (unsauberes) Sinussignal mit entweder 77,5 kHz (kein Kondensator parallel zur Spule) oder 32,8 kHz (1,5 nF parallel zur Spule).

Der Trimmer in der Source-Leitung des FET ermöglicht es, diverse Signalamplituden einzustellen.

Gleichrichter und Testgenerator auf dem Breadboard Das ist der Gleichrichter auf dem Teststand. Unglücklicherweise liefert der FET-Generator keine vollen 5 Vpp, so dass die Duo-LED nie ganz grün wird.

7.3 Software für den Gleichrichter

Die Software für den ATtiny25 ist in Assembler geschrieben. Der Quellcode ist hier in Assembler-Quellcode-Format und hier im Browserformat verfügbar. Keine Fuses müssen geändert werden: die Erhöhung der Taktfrequenz von 1 auf 8 MHz erfolgt mittels Software und die Fuse CKDIV8 wird überschrieben.

Das Programm ist interrupt-gesteuert. Es wird kein Sleep-Modus verwendet, weil das schnelle ADC-Sampling kaum Zeit dafür übriglässt.

Beim Assemblieren muss sichergestellt sein, dass die zwei Einstellkonstanten "DuoLed" und "LedOnly" korrekt gesetzt sind:

Das Programm ist getestet und arbeitet korrekt.

An den Seitenanfang

©2020 by http://www.avr-asm-tutorial.net