Pfad: Home => AVR-Übersicht => Anwendungen => DCF77-Empfänger => Superhet mit Quarzfilter
DCF77-Empfang Anwendungen von
AVR-Einchip-Prozessoren AT90S, ATtiny, ATmega und ATxmega
DCF77-Superhet-Empfänger mit Quarzfilter
Logo

4 DCF77-Superhet-Empfänger mit Quarzfilter

Wer was Ordentliches bauen will, baut einen Superhet: Das DCF77-Eingangssignal auf 77,5 kHz, z. B. von der Kreuzantenne hier, wird da mit einem Oszillatorsignal gemischt, aus den Mischprodukten wird die gewünschte Mischfrequenz ausgefiltert (mit einem LC-Schwingkreis und/oder einem Quarz) und im Zwischenfrequenzverstärker ganz hoch verstärkt. Die Zwischenfrequenz (ZF) wird dann gleichgerichtet und stellt die Amplitudeninformation als Input für die DCF77-Signalauswertung zur Verfügung.

Superhets haben gegenüber Geradeaus-Empfängern den immensen Vorteil, dass die ZF sehr eng gefiltert werden kann. Störsignale unmittelbar neben der Empfangsfrequenz, z. B. meine Schreibtisch-Energiesparlampe auf 80 kHz, haben da keine Chance mehr gegen die Nutzfrequenz anzukommen. Und Rückwärtseinstrahlungen von der verstärkten ZF auf den Eingangskreis mit den 77,5 kHz sind auch kaum mehr möglich, wenn man die ZF geschickt auswählt. Dadurch kann die Verstärkung viel höher (und der Eingangskreis räumlich viel näher) sein, ohne dass es zum Eigenschwingen kommt. Ideal für kleine Gehäuse mit wenig Platz.

4.1 Die Schaltung des Superhets

Schaltbild des TCA440-Superhets Das ist das Schaltbild des Superhets.

Das symmetrische Eingangssignal von der Kreuzantenne mit FET-Pufferstufe hier wird dem internen Vorverstärker an den Pins 1 und 2 zugeführt. Die Abschwächung des Vorverstärkers ist abgeschaltet, wird im unmittelbaren Nahfeld von DCF77 gearbeitet, kann hier eine Spannung zwischen 1 oder 2 V zugeführt werden.

Den Oszillatorpins 4 und 5 wird das Oszillatorsignal 77,5 + 32,768 = 110,268 kHz zugeführt. Dieses Signal kann entweder mit einem LC-Schwingkreis erzeugt werden (siehe hier) oder mit einem Quarzoszillator (siehe hier).

Aus den Mischprodukten wird mit einem LC-Kreis aus L=15mH und C1=1,5nF das 32,768 kHz-Signal ausgekoppelt. Dazu wird ein 32,768kHz-Quarz verwendet. Anstelle von drei Quarzen kann auch ein einzelner Quarz verwendet werden. Die Eigenschaften solcher Quarzfilter sind hier ausführlicher gezeigt.

Der Ausgang des Quarzfilters wird an den positiven Eingang des ZF-Verstärker an Pin 12 angekoppelt, der negative Eingang liegt über ein C=1µF auf Nullpotenzial. Der Emitterausgang des ZF-Verstärkers koppelt in einen LC-Kreis aus L=100µH und den beiden parallel geschalteten C von 220nF und 15nF aus. Das Signal wird mit zwei Schottky-Dioden und zwei 470nF-Kondensatoren gleichgerichtet. Die Amplitudenabsenkung wird mit einem Widerstand von 33kΩ zur Entladung der Kondensatoren erhöht. Das Signal wird der automatischen Auswertung zugeführt, das hier beschrieben wird.

LC-Oszillator für DCF77-Superhet Wer den Oszillator im TCA440 mit einer Spule zum Schwingen anregen möchte, nimmt diese Kombination. Es handelt sich um einen 18mm-Schalenkern mit einem AL-Wert von 2850 nH pro N2. Er kann mit Hilfe einer Abgleichschraube in seiner Induktivität etwas variiert werden und wird damit (und mit Hilfe eines Frequenzzählers) auf 77,5+32,768=110,268 khz oder auf das Maximum der gleichgerichteten ZF-Spannung abgeglichen.

Die Oszillatorfrequenz kann auch mit dem C-Trimmer verstellt werden, falls die Abgleichschraube nicht in das Loch passt oder das Loch gar kein Gewinde für die Schraube hat.

Exkurs: Quarzoszillator für den TCA440-Mischer

Achtung! Das Folgende beschreibt einen fehlgeschlagenen Versuch, die Oszillatorspule durch eine Quarzoszillator zu ersetzen. Der Versuch schlug aus folgenden Gründen fehl:
  1. Der ATtiny25 kann zwar mit einem externen Quarz getaktet werden. Das funktioniert aber nach meinen Erfahrungen nur mit Quarzen oberhalb von 14 MHz. Mit anderen Quarzen geht gar nichts.
  2. Mit einem 15MHz-Quarz funktioniert der ATtiny25, aber nur bei Betriebsspannungen unterhalb von 4 Volt.
  3. Der Oszillatortakt verseucht die Betriebsspannung mit einem sehr starken HF-Signal, das auch mit 10 oder 100nF Keramikkondensatoren an den Betriebsspannungs-Pins nicht abgeblockt werden kann. Das 15MHz-Signal liegt auch auf den beiden erzeugten Sinussignalen und lässt sich sebst mit den RC-Gliedern dort nicht mehr aussieben.
  4. Das 15MHz-Signal verseucht auch das DCF77-Signal von der Kreuzantenne und lässt sich auch von der HF-Seite her nicht aussieben. Entsprechend gemischt und verstärkt findet es sich als starkes Rauschen am Ausgang der Mischstufe und am Ausgang des ZF-Verstärkers.
Das Folgende gebe ich nur zur Information weiter, es funktioniert nicht und ich warne vor dem Nachbau.

LC-Schwingkreise sind etwas temperaturabhängig und man müsste den LC-Schwingkreis immer wieder auf die korrekte Frequenz justieren. Im Langzeitbetrieb und mit Bauteilalterung macht sich das unangenehm bemerkbar. Eine Alternative ist es, das Oszillatorsignal aus einem Quarz durch Teilung der Quarzfrequenz zu erzeugen. Diese Lösung hier verwendet einen quarzgetakteten AVR als Rechteckgenerator.

Ein AVR, hier ein ATtiny25, wird dazu mit einem externen Quarz getaktet. Sein Timer/Counter 0 wird so eingestellt, dass er diese Taktfrequenz durch einen festen Faktor teilt (CTC-Modus) und die Ausgänge OC0A und OC0B beim Compare Match torkeln lässt. Beide Ausgänge werden zu Beginn auf unterschiedliches Potenzial gebracht, so dass ein gegenphasiges Signal ausgegeben wird. Das Rechtecksignal wird mit einem RC-Netzwerk zu einem Sinus geformt und dem Oszillatoreingang des TCA440 zugeführt.

Auswahl der Quarzfrequenz

Digitale Teiler können nur ganzzahlig sein. Daher muss die Quarzfrequenz, geteilt durch einen Teiler, das zu erzeugende Oszillatorsignal ergeben. Damit das möglichst gut auf die Aufgabe passt, habe ich im Handel verfügbare Quarze auf ihre Eignung hin untersucht.

In der Tabelle ist sowohl für das obere (110,268 - 77,5 = 32,768 kHz) als auch für das untere Mischen (77,5 - 44,732 = 32,768 kHz) angegeben, welche Frequenzen durch Teilung erzeugt werden können und um wieviel Prozent (+/-) und in Hz die Abweichung vom Sollwert beträgt. Die Tabelle ist hier als OpenOffice-Tabelle verfügbar.

Bei der Berechnung ist noch zu beachten, dass wegen des Toggling der OC0-Pins die verdoppelte Teilung erfolgt, da bei jedem Toggle nur eine von beiden Halbwellen geschaltet wird.

Quarz
(MHz)
77,5 + 32,768 = 110,268 kHz77,5 – 32,768 = 44,732 kHz
TeilerIst-Freq
(kHz)
Delta
%
Abweichung
(Hz)
TeilerIst-Freq
(kHz)
Delta
%
Abweichung
(Hz)
1,8432008115,2004,474932,02143,8861,89-846,3
2,0000009111,1110,76843,12245,4551,62722,5
2,09715210104,8584,91-5410,42345,5901,92858,3
2,45760011111,7091,311441,12745,5111,74779,1
2,50000011113,6363,053368,42844,6430,20-89,1
3,00000014107,1432,83-3125,13444,1181,37-614,4
3,07200014109,7140,50-553,73445,1760,99444,5
3,27680015109,2270,94-1041,33744,2811,01-450,9
3,57954516111,8611,441592,84044,7440,0312,3
3,68640017108,4241,67-1844,54144,9560,50224,1
3,68641117108,4241,67-1844,14144,9560,50224,2
3,93216018109,2270,94-1041,34444,6840,11-48,4
4,00000018111,1110,76843,14544,4440,64-287,6
4,09600019107,7892,25-2478,54644,5220,47-210,3
4,19430419110,3760,10108,44744,6200,25-111,7
4,43361920110,8400,52572,55044,3360,88-395,8
4,91520022111,7091,311441,15544,6840,11-48,4
5,00000023108,6961,43-1572,35644,6430,20-89,1
5,06880023110,1910,07-76,75744,4630,60-268,8
5,12000023111,3040,941036,35744,9120,40180,3
5,20000024108,3331,75-1934,75844,8280,2195,6
6,00000027111,1110,76843,16744,7760,1044,1
6,00000027111,1110,76843,16744,7760,1044,1
6,14400028109,7140,50-553,76944,5220,47-210,3
6,40000029110,3450,0776,87244,4440,64-287,6
6,55360030109,2270,94-1041,37344,8880,35155,7
7,37280033111,7091,311441,18244,9560,50224,1
8,00000036111,1110,76843,18944,9440,47211,8
8,00000036111,1110,76843,18944,9440,47211,8
8,86723840110,8400,52572,59944,7840,1252,0
9,21600042109,7140,50-553,710344,7380,015,9
9,83040045109,2270,94-1041,311044,6840,11-48,4
10,00000045111,1110,76843,111244,6430,20-89,1
10,00000045111,1110,76843,111244,6430,20-89,1
10,24000046111,3040,941036,311444,9120,40180,3
10,70000049109,1840,98-1084,312044,5830,33-148,7
11,00000050110,0000,24-268,012344,7150,04-16,6
11,05920050110,5920,29324,012444,5940,31-138,5
12,00000054111,1110,76843,113444,7760,1044,1
12,00000054111,1110,76843,113444,7760,1044,1
12,28800056109,7140,50-553,713744,8470,26114,7
12,75000058109,9140,32-354,214344,5800,34-151,6
14,00000063111,1110,76843,115644,8720,31139,8
14,31800065110,1380,12-129,516044,7440,0311,7
14,74560067110,0420,21-226,216544,6840,11-48,4
15,00000068110,2940,0226,116844,6430,20-89,1
16,00000073109,5890,62-679,017944,6930,09-39,3
18,00000082109,7560,46-511,920144,7760,1044,1
18,43200084109,7140,50-553,720644,7380,015,9
20,00000091109,8900,34-377,922444,6430,20-89,1


Beim Mischen des Eingangssignals 77,5 kHz mit der höheren Frequenz (+32,768  = 110,268 kHz) weist der 15 MHz-Quarz die geringste Abweichung auf (0,02%, +26,1 Hz), die Quarze 5,0688 und 6,4 MHz weichen um 0,07% oder 77 Hz und der Quarz 4,194304 MHz um 0,1% oder 108 Hz ab. Beim Mischen mit der niedrigeren Frequenz (77,5 - 32,768 = 44,732 kHz) ist der 9,216 MHz-Quarz mit 0,01% oder 5,9 Hz Abweichung am Besten.

Da beim Mischen mit der niedrigeren Frequenz 44,732 kHz die erste Harmonische mit 89,46 kHz schon in der näheren Umgebung der Empfangsfrequenz liegt und Störungen beim Empfang zur Folge haben könnte, wurde entschieden, mit dem 15 MHz-Quarz zu arbeiten. Dieser weicht um 26,1 Hz nach oben ab.

Frequenz des Quarzes bei verschiedenen Betriebsspannungen In der Praxis ergab sich mit zwei 18pF-Kondensatoren und einem handelsüblichen 15MHz-Quarz eine betriebsspannungsabhängige Frequenz wie im Diagramm gezeigt. Im Prinzip müsste der Quarz von 15,000.000 auf 14,996.448 MHz gezogen werden, um noch genauer die Empfangsfrequenz zu treffen. Das ist aber wegen der Bandbreite des Empfangskreises und des Quarzfilters aber eher akademischer Natur.

Rechtecksignale zu Sinus

Da jeder ATtiny mit seinem Timer/Counter 0 einen OC0A- und OC0B-Ausgang hat, kann das Signal symmetrisch ausgegeben werden: OC0B erzeugt das invertierte Signal, indem der Ausgangsport zu Beginn inverse Polarität hat. Damit kann das Oszillatorsignal symmetrisch an die beiden TCA440-Oszillatoranschlüsse geführt werden und steuert die Mischstufe symmetrisch aus.

An den beiden Ausgängen OC0A und OC0B liegen aber Rechtecksignale vor und keine Sinusschwingungen. Das würde beim Mischen nicht so arg gut sein, da die Rechteckspannung aus allen ungeraden Harmonischen der Grundfrequenz besteht, mit abnehmender Amplitude. Es ist daher sauberer, aus der Rechteckschwingung durch Aussieben der Harmonischen einen Sinus zu formen. Das macht man mit RC-Filtern.

Im Rechenblatt "Oszillatoreinkopplung" im OpenOffice-Spreadsheet hier wurde mit verschiedenen RC-Kombinationen gespielt. Damit ein kräftiges Oszillatorsignal verbleibt, musste das Filter die Grundfrequenz nur wenig dämpfen und nur die dritte Harmonische und alles darüber dämpfen.

Damit sich der Aufwand in Grenzen hält wurden drei RC-Filterstufen kombiniert. Es wurde schließlich die Kombination aus R=1k und C=1n ausgewählt, die mit einer Amplitude von 2,66 Vpp genügend Aussteuerung liefert und die Harmonischen schon gut unterdrückt.

Rechteck-zu-Sinus Die erste Stufe V(C1) (blaue Kurve) ist noch voll ausgesteuert und erreicht nahezu 0 bzw. 5 V. In der zweiten Stufe V(C2) (rote Kurve) ist die Amplitude um zwei Volt(pp) geringer, die Signalform nähert sich aber sichtlich bereits einem Sinus an. In der dritten Stufe V(C3) (grüne Kurve) ist der Amplitudenverlust mit weniger als 1 Vpp noch geringer, die Kurve ist erkennbar ein Sinus und die Oberwellen sind fast verschwunden.

Dargestellt ist hier nur die eine Signalseite, die zweite verläuft genau gegenphasig. Damit kann es getrost ans Mischen gehen.

Eingesetzte Schaltung

Schaltbild 110kHz-Oszillator Das Schaltbild ist denkbar einfach. Die beiden Timerausgänge OC0A und OC0B erzeugen eine Gegentakt-Rechteckschwingung von 110,294 kHz, die in die drei RC-Stufen eingespeist werden. Deren Filterergebnis treibt die beiden Oszillatoreingänge des TCA440 gegenphasig an.

Der Reset-Eingang des ATtiny25 liegt über 10kΩ auf High-Potential. Der Quarz mit 15 MHz liegt an den beiden XTAL-Eingängen, jeweils mit einem 18 pF-Kondensator nach Masse.

In der Praxis hat sich bei mir herausgestellt, dass der Quarzoszillator aus mir nicht erklärlichen Gründen oberhalb von 4 V Betriebsspannung des ATtiny25 nicht mehr funktioniert. Auch brachte keine Linderung dieses Problems. Die Betriebsspannung wurde daher mit einem Widerstand, einer Zenerdiode und einem Elko zur Unterdrückung des Zenerrauschens auf 3,3 V herabgesetzt. Außerdem habe ich festgestellt, dass die Schwingfreudigkeit des Quarzes wesentlich besser wird, wenn man den Standard-CMOS-Versorgungsspannungskondenator ausnahmsweise mal weglässt, mit dem ist nämlich Essig mit Schwingen. Er ist daher im Schaltbild bewusst nicht an die korrekte Stelle platziert. Außerdem half es immens, den Reset durch einen kleinen Elko ein wenig zu verzögern. Seitdem setzt der Quarzoszillator nur noch selten aus, z. B. bei Spikes auf der Versorgungsleitung.

Ich nenne dieses unglaubliche Verhalten "umgekehrten BOD-Level-Effekt". Umgekehrt deswegen, weil der BOD-Level bei Überschreitung von 4 V zum Aussteigen des Chips führt, nicht dessen Unterschreitung wie bei der Original-Brown-Out-Detektion.

Software für den ATtiny25

Die Software für den ATtiny25 besteht aus wenigen Zeilen Assembler:
  1. Die beiden OC0A- und OC0B-Ausgänge werden als Ausgang konfiguriert.
  2. Das Portregister von OC0A wird auf Null, dasjenige von OC0B auf Eins gesetzt (gegenphasige Ansteuerung).
  3. Die beiden Vergleicher werden auf den Teilerfaktor (68 - 1) eingestellt.
  4. Im Kontrollregister TCCR0A des Timers TC0 wird dieser als im CTC-Modus arbeitender Timer eingestellt und die beiden Ausgänge werden auf Toggle on Compare Match A bzw. B gestellt.
  5. Im Kontrollregister TCCR0B wird der Timer mit einem Vorteiler von 1 gestartet.
  6. Der Schlafmodus wird auf den Modus Idle eingestellt und die SLEEP-Instruktion ausgeführt. Der Prozessor wird nicht mehr gebraucht, der Timer arbeitet von alleine.
Der Quellcode ist im Folgenden aufgelistet und kann hier im Assembler-Format herunter geladen werden.

;
; *********************************
; * Xtal oscillator for TCA440    *
; * 15 MHz ==> (77.5+32.768 kHz)  *
; * (C)2019 by DG4FAC             *
; *********************************
;
.nolist
.include "tn25def.inc" ; Define device ATtiny25
.list
;
; **********************************
;     H A R D W A R E
; **********************************
;
; Device: ATtiny25, Package: 8-pin-PDIP_SOIC
;
;            _________
;         1 /         |8
; RESET o--|RESET  VCC|--o +5 V
; XTAL1 o--|PB3    PB2|--o
; XTAL2 o--|PB4    PB1|--o Osc out -
;   0 V o--|GND    PB0|--o Osc out +
;         4|__________|5
;
; **********************************
;   F I X E D   C O N S T A N T S
; **********************************
;
.equ clock = 15000000 ; 15 MHz
.equ fosc = 77500+32768 ; Added
.equ divider = (clock+fosc)/(fosc*2)
.equ cCtc = divider - 1 ; CTC value
;
; **********************************
;        R E G I S T E R S
; **********************************
;
.def rmp = R16 ; Multipurpose register
;
; **********************************
;  M A I N   P R O G R A M   I N I T
; **********************************
;
.cseg
.org 000000
;
Main:
  sbi DDRB,DDB0 ; PB0 direction output
  cbi PORTB,PORTB0 ; Clear OC0A output
  sbi DDRB,DDB1 ; PB1 direction output
  sbi PORTB,PORTB1 ; Set OC0B output 
  ldi rmp,cCtc ; Write CTC value
  out OCR0A,rmp ; to compare register A
  out OCR0B,rmp ; and B
  ldi rmp,(1<<WGM01)|(1<<COM0A0)|(1<<COM0B0) ; CTC mode, toggle OC0A
  out TCCR0A,rmp ; in TC0 control port A
  ldi rmp,(1<<CS00) ; Prescaler = 1
  out TCCR0B,rmp ; in TC0 control port B
  ldi rmp,1<<SE ; Sleep enable, idle mode
  out MCUCR,rmp
Loop:
  sleep ; Go to sleep
  rjmp loop
;
; End of source code

Fuses des ATtiny25

Vor oder nach dem Programmieren sind noch die Fuses des Atiny25 zu ändern, damit dieser mit dem externen Quarz arbeitet. Die folgenden Fuses sind einzustellen:
  1. CLKOUT ist einzuschalten (sonst läuft der Quarz nicht).
  2. CLKDIV8 ist auszuschalten (sonst wird die Quarzfrequenz durch 8 geteilt).
  3. Die Taktfrequenz ist auf einen externen Quarzoszillator mit 8 MHz und mehr einzustellen.
Die angegebene Reihenfolge ist bei sequentiellem Verstellen unbedingt einzuhalten (Schritt 1 sollte unbedingt zuerst kommen!), sonst wird der Chip über ISP unansprechbar.

4.2 Das Quarzfilter für 32,768 kHz

Messung der Filterdurchlasskurve von 32,768kHz-Quarzen Um die Filtereigenschaften von 32,768kHz-Quarzen zu messen, wurde diese Schaltung hier aufgebaut. Sie erzeugt ein 32kHz-Sinussignal mit einstellbarer Frequenz. Die Frequenzeinstellung erfolgt mit einer MW-Kapazitätsdiode, es kann auch eine BB112 oder ein Drehko verwendet werden.

Der Quarz wird mit dem niederohmigen Signal des Sinusgenerators angesteuert und ist mit 1kΩ abgeschlossen.

Filterdurchlasskurve eines 32,768kHz-Quarzes Das hier ist die aufgenommene Durchlasskurve. Die Durchlasskurve ist weniger als 10 Hz breit, besonders der abfallende Ast bei der hohen Frequenz ist sehr steil.

Bei der Messung kam es knapp über der Quarzresonanz zu einer leichten Rückkopplung auf den Oszillator, daraus erklärt sich der eine Ausreiser in der Messung.

Bemerkenswert ist, dass die Weitab-Selektion, also die Abschwächung weit unter und über der Resonanzfrequenz, recht bescheiden ist. Das liegt an der Streukapazität des Quarzes. Quarzfilter sind daher immer mit einem LC-Filter zu kombinieren, um Frequenzen weit ab von der Quarzresonanz auszufiltern.

4.3 Automatische Auswertung des DCF77-Signals

Die Verstärkungsregelung als auch die Frequenzregelung können beide zum Testen mit Trimmern vorgenommen werden. Das muss kein 10-Gang sein, ein normaler 270°-Trimmer reicht aus.

Komfortabler geht das mit einem Controller. Die automatische Auswertung des Empfangssignals erfolgt in einem Controller mit einem ATtiny45. Dieser ist hier ausführlich beschrieben.

Der Controller stellt folgende Signale zur Verfügung:
  1. AGC: An OC1A wird mit zwei Widerständen und zwei Kondensatoren ein Pulsweitensignal für die automatische Verstärkungsregelung erzeugt. Dieses stellt, nach Auswertung des Amplitudensignals am Gleichrichter, die Verstärkung so ein, dass eine immer gleiche Spannung am Gleichrichter anfällt (natürlich nicht bei der Amplitudenabsenkung). Die Mittelung erfolgt dabei über sehr lange Zeiten (mindestens 2,3 Sekunden) hinweg.
  2. AFC: An OC1B wird das Pulsweitensignal für die automatische Frequenzeinstellung der Kreuzantenne zur Verfügung gestellt. Diese stellt die Frequenz des Eingangskreises auf maximale Amplitudenabsenkung ein. Das schließt auch Ungenauigkeiten des Mischer- und Quarzfilters mit ein.


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