Pfad: Home => AVR-Übersicht => Anwendungen => DCF77-Empfänger => Superhet mit 32 kHz-Quarzfilter => Quarzoszillator mit tn25
DCF77-Empfang Anwendungen von
AVR-Einchip-Prozessoren AT90S, ATtiny, ATmega und ATxmega
Quarzoszillator für DCF77-Superhet-Empfänger mit ATtiny25
Logo

4 DCF77-Superhet-Empfänger mit Quarzfilter

4.1 Die Schaltung des Superhets

4.1.1 Die Schaltung des Superhets mit LC-Oszillatorkreis

4.1.2 Die Schaltung des Superhets mit Quarzoszillator

Das Folgende ist sehr experimentell und nur was für ganz Hartgesottene, die gerne auch mal Ungewöhnliches ausprobieren wollen. Es beschreibt den Versuch, den Oszillatorkreis durch einen Quarzoszillator zu ersetzen. Vorab schon mal ein paar Warnungen, damit keiner sagen kann, er hätte von nix gewusst. Einige Versuche schlugen nämlich aus folgenden Gründen fehl:
  1. Der ATtiny25 kann zwar mit einem externen Quarz getaktet werden, wenn man die CKOUT-Fuse einschaltet und einen High-Speed-Taktmodus einstellt. Das funktioniert aber nach meinen Erfahrungen aber nur mit Quarzen oberhalb von 14 MHz. Mit anderen Quarzen geht rein 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.
Lassen Sie also besser die Finger von Quarzen, und nehmen Sie einen fertig aufgebauten Quarzoszillator.

4.1.2.1 Konzept eines Quarzoszillators

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. Natürlich gibt es keine Quarze für 110.268 oder 44.732 Hz zu kaufen (die passenden beiden Frequenzen für den Mischer). Diese Lösung hier verwendet einen quarzgetakteten AVR als Rechteckgenerator.

Ein AVR, hier ein ATtiny25, wird dazu mit einem externen Quarz oder einem Quarzoszillator 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.

4.1.2.2 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.

Die Tabelle enthält noch eine weitere Variante: der ATtiny25 wird nicht mit einem Einzelquarz getaktet sondern mit einem fertigen Quarzoszillator. Dessen Ausgang kommt an den CLKI/XTAL1-Eingang des ATtiny25, die Fuse CLKOUT wird nicht gesetzt und der Takt wird auf einen externen Quarzoszillator eingestellt. Handelsübliche Quarzoszillatoren sind im Rechenblatt "Quarzoszillator" aufgelistet. Man beachte, dass diese mit 5 V betrieben werden müssen, daher entfällt die Reduzierung der Betriebsspannung auf 3,3 V im Schaltbild unten.

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.

4.1.2.3 Betriebsspannungsabhängigkeit beim Einzelquarz

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.

4.1.2.4 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 Hier ist der Filtereffekt mit einer Tabellenkalkuation simuliert.

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.

4.1.2.5 Eingesetzte Schaltung mit einem Einzelquarz

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 Quarz 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.

4.1.2.6 Eingesetzte Schaltung mit einem Quarzoszillator

Schaltbild 110kHz-Oszillator mit Quarzoszillator am tn24 Dies ist die Schaltung mit einem Quarzoszillator am ATtiny25. Sie funktioniert bei 5 V Betriebsspannung einwandfrei und hat nicht die Macken des Einzelquarzes. Obwohl solche Quarzoszillatoren ein ganz mieses Rechtecksignal liefern (sieht wie bei einer Transistorschaltung aus), arbeitet der ATtiny25 damit absolut korrekt.

Oszillogramm des erzeugten Sinussignals Das ist das Oszillogramm der beiden erzeugten Sinusse. Sieht sauber aus.

4.1.2.7 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

4.1.2.8 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. CKOUT 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.

Bei der Variante mit dem Quarzoszillator entfällt das Setzen der CKOUT-Fuse, CLKDIV8 ist aber unbedingt zu löschen.

4.1.2.9 Aufbau des quarzgenauen Sinusgenerators

Oszillator auf dem Breadboard Das ist die Schaltung des Oszillators auf dem Breadboard, hier die Einzelquarzvariante. Die sechs Kondensatoren rechts neben dem ATtiny25 sind die zweimal drei RC-Netzwerke zur Umwandlung des Rechtecks in einen Sinus.

Oszillator mit Quarzoszillator auf dem Breadboard Dies ist die Variante mit dem Quarzoszillator auf dem Breadboard.


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