Pfad:
Home =>
AVR-Übersicht =>
Anwendungen =>
DCF77-Empfänger =>
Superhet mit 32 kHz-Quarzfilter => Quarzoszillator mit tn25
This page in english:
 |
Anwendungen von
AVR-Einchip-Prozessoren AT90S, ATtiny, ATmega und ATxmega
Quarzoszillator für DCF77-Superhet-Empfänger mit ATtiny25
|
 |
4 DCF77-Superhet-Empfänger mit Quarzfilter
4.1 Die Schaltung des Superhets
4.1.2 Die Schaltung des Superhets mit Quarzoszillator
Hinweis: In der Vorversion dieser Seite waren Fehler. Ein neu
aufgebauter ATtiny25-Oszillator funktioniert korrekt.
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 und der Takt
wird per Fuse auf einen externen Quarzoszillator mit hoher Frequenz
eingestellt. Handelsübliche Quarzoszillatoren sind im Rechenblatt
"Quarzoszillator" aufgelistet. Man beachte, dass diese mit 5 V
betrieben werden müssen, um genügend Amplitude zu erhalten.
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 kHz | 77,5 – 32,768 = 44,732 kHz |
Teiler | Ist-Freq (kHz) | Delta % | Abweichung (Hz) | Teiler | Ist-Freq (kHz) | Delta % | Abweichung (Hz) |
1,843200 | 8 | 115,200 | 4,47 | 4932,0 | 21 | 43,886 | 1,89 | -846,3 |
2,000000 | 9 | 111,111 | 0,76 | 843,1 | 22 | 45,455 | 1,62 | 722,5 |
2,097152 | 10 | 104,858 | 4,91 | -5410,4 | 23 | 45,590 | 1,92 | 858,3 |
2,457600 | 11 | 111,709 | 1,31 | 1441,1 | 27 | 45,511 | 1,74 | 779,1 |
2,500000 | 11 | 113,636 | 3,05 | 3368,4 | 28 | 44,643 | 0,20 | -89,1 |
3,000000 | 14 | 107,143 | 2,83 | -3125,1 | 34 | 44,118 | 1,37 | -614,4 |
3,072000 | 14 | 109,714 | 0,50 | -553,7 | 34 | 45,176 | 0,99 | 444,5 |
3,276800 | 15 | 109,227 | 0,94 | -1041,3 | 37 | 44,281 | 1,01 | -450,9 |
3,579545 | 16 | 111,861 | 1,44 | 1592,8 | 40 | 44,744 | 0,03 | 12,3 |
3,686400 | 17 | 108,424 | 1,67 | -1844,5 | 41 | 44,956 | 0,50 | 224,1 |
3,686411 | 17 | 108,424 | 1,67 | -1844,1 | 41 | 44,956 | 0,50 | 224,2 |
3,932160 | 18 | 109,227 | 0,94 | -1041,3 | 44 | 44,684 | 0,11 | -48,4 |
4,000000 | 18 | 111,111 | 0,76 | 843,1 | 45 | 44,444 | 0,64 | -287,6 |
4,096000 | 19 | 107,789 | 2,25 | -2478,5 | 46 | 44,522 | 0,47 | -210,3 |
4,194304 | 19 | 110,376 | 0,10 | 108,4 | 47 | 44,620 | 0,25 | -111,7 |
4,433619 | 20 | 110,840 | 0,52 | 572,5 | 50 | 44,336 | 0,88 | -395,8 |
4,915200 | 22 | 111,709 | 1,31 | 1441,1 | 55 | 44,684 | 0,11 | -48,4 |
5,000000 | 23 | 108,696 | 1,43 | -1572,3 | 56 | 44,643 | 0,20 | -89,1 |
5,068800 | 23 | 110,191 | 0,07 | -76,7 | 57 | 44,463 | 0,60 | -268,8 |
5,120000 | 23 | 111,304 | 0,94 | 1036,3 | 57 | 44,912 | 0,40 | 180,3 |
5,200000 | 24 | 108,333 | 1,75 | -1934,7 | 58 | 44,828 | 0,21 | 95,6 |
6,000000 | 27 | 111,111 | 0,76 | 843,1 | 67 | 44,776 | 0,10 | 44,1 |
6,000000 | 27 | 111,111 | 0,76 | 843,1 | 67 | 44,776 | 0,10 | 44,1 |
6,144000 | 28 | 109,714 | 0,50 | -553,7 | 69 | 44,522 | 0,47 | -210,3 |
6,400000 | 29 | 110,345 | 0,07 | 76,8 | 72 | 44,444 | 0,64 | -287,6 |
6,553600 | 30 | 109,227 | 0,94 | -1041,3 | 73 | 44,888 | 0,35 | 155,7 |
7,372800 | 33 | 111,709 | 1,31 | 1441,1 | 82 | 44,956 | 0,50 | 224,1 |
8,000000 | 36 | 111,111 | 0,76 | 843,1 | 89 | 44,944 | 0,47 | 211,8 |
8,000000 | 36 | 111,111 | 0,76 | 843,1 | 89 | 44,944 | 0,47 | 211,8 |
8,867238 | 40 | 110,840 | 0,52 | 572,5 | 99 | 44,784 | 0,12 | 52,0 |
9,216000 | 42 | 109,714 | 0,50 | -553,7 | 103 | 44,738 | 0,01 | 5,9 |
9,830400 | 45 | 109,227 | 0,94 | -1041,3 | 110 | 44,684 | 0,11 | -48,4 |
10,000000 | 45 | 111,111 | 0,76 | 843,1 | 112 | 44,643 | 0,20 | -89,1 |
10,000000 | 45 | 111,111 | 0,76 | 843,1 | 112 | 44,643 | 0,20 | -89,1 |
10,240000 | 46 | 111,304 | 0,94 | 1036,3 | 114 | 44,912 | 0,40 | 180,3 |
10,700000 | 49 | 109,184 | 0,98 | -1084,3 | 120 | 44,583 | 0,33 | -148,7 |
11,000000 | 50 | 110,000 | 0,24 | -268,0 | 123 | 44,715 | 0,04 | -16,6 |
11,059200 | 50 | 110,592 | 0,29 | 324,0 | 124 | 44,594 | 0,31 | -138,5 |
12,000000 | 54 | 111,111 | 0,76 | 843,1 | 134 | 44,776 | 0,10 | 44,1 |
12,000000 | 54 | 111,111 | 0,76 | 843,1 | 134 | 44,776 | 0,10 | 44,1 |
12,288000 | 56 | 109,714 | 0,50 | -553,7 | 137 | 44,847 | 0,26 | 114,7 |
12,750000 | 58 | 109,914 | 0,32 | -354,2 | 143 | 44,580 | 0,34 | -151,6 |
14,000000 | 63 | 111,111 | 0,76 | 843,1 | 156 | 44,872 | 0,31 | 139,8 |
14,318000 | 65 | 110,138 | 0,12 | -129,5 | 160 | 44,744 | 0,03 | 11,7 |
14,745600 | 67 | 110,042 | 0,21 | -226,2 | 165 | 44,684 | 0,11 | -48,4 |
15,000000 | 68 | 110,294 | 0,02 | 26,1 | 168 | 44,643 | 0,20 | -89,1 |
16,000000 | 73 | 109,589 | 0,62 | -679,0 | 179 | 44,693 | 0,09 | -39,3 |
18,000000 | 82 | 109,756 | 0,46 | -511,9 | 201 | 44,776 | 0,10 | 44,1 |
18,432000 | 84 | 109,714 | 0,50 | -553,7 | 206 | 44,738 | 0,01 | 5,9 |
20,000000 | 91 | 109,890 | 0,34 | -377,9 | 224 | 44,643 | 0,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 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 "RechteckInSinus" 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 1,73 Vpp genügend
Aussteuerung liefert und die Harmonischen schon gut unterdrückt.
Hier ist der Filtereffekt mit einer Tabellenkalkuation simuliert.
Die erste Stufe V(C1) (blaue Kurve) ist noch voll ausgesteuert und
erreicht nahezu 1 bzw. 4 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 oben nur die eine Signalseite, die zweite verläuft
genau gegenphasig, wie dieses Diagramm zeigt.
Dazu sind noch die Ausgangsströme an den beiden Pins eingezeichnet.
Im Schnitt beträgt der Ausgangsstrom 3,2 mA, aber in den
kurzzeitigen Spitzen fließen bis zu 9 mA.
Damit kann es quarzgetaktet getrost ans Mischen gehen.
4.1.2.4 Eingesetzte Schaltung mit einem Einzelquarz
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.
4.1.2.5 Eingesetzte Schaltung mit einem Quarzoszillator
Dies ist die Schaltung mit einem Quarzoszillator am ATtiny25. Sie
funktioniert bei 5 V Betriebsspannung einwandfrei. Obwohl
solche Quarzoszillatoren ein ganz mieses Rechtecksignal liefern
(sieht wie bei einer Transistorschaltung aus), arbeitet der ATtiny25
damit absolut korrekt.
Das ist das Oszillogramm der beiden erzeugten Sinusse. Sieht sauber
aus.
4.1.2.6 Software für den ATtiny25
Die Software für den ATtiny25 besteht aus wenigen Zeilen Assembler:
- Die beiden OC0A- und OC0B-Ausgänge werden als Ausgang konfiguriert.
- Das Portregister von OC0A wird auf Null, dasjenige von OC0B auf Eins
gesetzt (gegenphasige Ansteuerung).
- Die beiden Vergleicher werden auf den Teilerfaktor (68 - 1) eingestellt.
- 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.
- Im Kontrollregister TCCR0B wird der Timer mit einem Vorteiler von 1
gestartet.
- 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.7 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:
- CLKDIV8 ist auszuschalten (sonst wird die Quarzfrequenz durch 8
geteilt).
- Die Taktfrequenz ist auf einen externen Quarzoszillator mit 8 MHz
und mehr einzustellen.
4.1.2.8 Aufbau des quarzgenauen Sinusgenerators
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.
Dies ist die Variante mit dem Quarzoszillator auf dem Breadboard.
©2019-2020 by http://www.avr-asm-tutorial.net