STM32 Bastelabend und DCF77 Frequenzstandard: Unterschied zwischen den Seiten

Aus Imaginärraum Wiki
(Unterschied zwischen Seiten)
Zur Navigation springen Zur Suche springen
imported>Apo
 
imported>Apo
(Quarzfilter)
 
Zeile 1: Zeile 1:
Ideensammlung für Dinge, die am STM32-Bastelabend programmiert werden können.
Ein 10-MHz Quarz (VCXO) wird durch einen STM32 an die Trägerfrequenz des [https://de.wikipedia.org/wiki/DCF77 DCF77 Zeitzeichensenders] gebunden.
Da diese selber an die Atomuhren in Braunschweig gebunden ist und eine relative Standardabweichung von 10^-12 hat, sollte so (bei vorhandenem Signal)
ein sehr genaues aber gleichzeitig günstiges [https://de.wikipedia.org/wiki/Frequenznormal Frequenznormal] entstehen.


= Basics =
= Überblick =
Als Antenne wird eine herkömmliche Ferritkern-Antenne, wie sie in Funkuhren zu finden ist, verwendet.


* Takt
Das empfangene Signal wird durch einen Bandpass auf den 77.5 kHz-Träger reduziert und durch z.B. einen Komparator
* GPIO
zu einer Rechtecksschwingung umgewandelt. (Alternativ: Analoge Messung durch Microcontroller)
* PWM
 
* I2C/SPI/UART
Ein STM32-Microcontroller, dessen Takt durch den internen PLL basiert auf dem VCXO auf 124 MHz gestellt wird, zählt
* ADC
die Takte zwischen zwei steigenden Flanken des 77.5 kHz Taktes und korrigiert die Kontrollspannung des VCXO so, dass
* DAC
die Abweichung auf 0 gemittelt wird.
* DMA
 
* DMA + PWM
= Signalempfang =
 
Zum Empfang des Signals wird eine Ferritkern-Antenne verwendet, die aus einem alten Funkwecker entfernt werden kann.
Bei Bedarf kann ein größerer Ferritstab gekauft werden (eBay oder Aliexpress haben 200x10 mm Stäbe für etwa 8 Euro
bzw. 7 USD). Solche Antennen sind recht schmalbandig, was hier von Vorteil ist, und haben im Vergleich zur Wellenlänge
des Signals sehr kleine Dimensionen - eine Welle eines 77.5 kHz Signals hat eine Länge von etwa vier Kilometern.
 
= Signalaufbereitung =
 
[[Datei:DCF77-Spektrum-mit-PC.png|320px|thumb|right|Spektrum an einer Ferritkern-Antenne, störender Einfluss durch die Verbindung vom PC an das Oszilloskop durch einen USB-RS232-Adapter]]
[[Datei:DCF77-Spektrum-ohne-PC.png|320px|thumb|right|Spektrum an einer Ferritkern-Antenne, ohne direkte Verbindung mit dem PC]]
 
Im Test ist knapp unterhalb der Trägerwelle ein Störsignal zu sehen, das sich in der Regel zwischen 70 und 75 kHz aufhält, aber teilweise
auch näher an die Trägerwelle herankommt. Dies kommt von dem Rechner, der in der Nähe des Oszilloskops steht. Die Antenne sollte also möglichst weit
von PCs (oder anderen Geräten mit Schaltnetzteilen) aufgebaut und ihr Signal nach Verstärkung über ein abgeschirmtes Kabel zum digitalen Teil
der Schaltung geleitet werden.
 
Als Filter bietet sich ein Quarzfilter an. Quarzfilter haben eine sehr niedrige Bandbreite, was den Empfang von Sekundenpulsen ungenauer macht. Da
für unseren Zweck die Zeit egal und nur die Trägerwelle von Interesse ist, ist dies belanglos.
 
Nach dem Filter sollte eine Verstärkung des Signals erfolgen, die eventuell einen AGC (Automatic gain control) Kreis beinhaltet.
 
* JFET-Buffer (TL084?)
* Quarzfilter als Bandpass um 77.5 kHz
* Verstärkung mit AGC?
* Übersteuerung -> Rechtecksschwingung (optional, falls die Zeit zwischen Flanken verwendet wird.)
 
== Quarzfilter ==
Es wurden 100 77.5 kHz Quarze von [https://www.aliexpress.com/item/77-5KHZ-77-500KHZ-3-8-308-2Pin-DIP-XTAL-Crystal-Oscillator-x-50PCS/1988635809.html AliExpress] bestellt.
In Messungen mit einem [http://sdr-kits.net/VNWA3_Description.html VNWA3] hatten vier davon eine durchschnittliche Serienresonanzfrequenz $f_s = 77495.2$ Hz, eine Parallelresonanzfrequenz $f_p = 77537.5$ Hz, und eine Serienkapazität $C_s = 1.42187$ fF. Mit diesen Werten lässt sich nach [http://www.giangrandi.ch/electronics/crystalfilters/xtalladder.html Iacopo Giangrandis Kristallfilter-Rechner] mit einigen 18 pF (nach Rundung, vorher 16.7 pF und 19.4 pF) Kondensatoren ein Filter bauen, der eine Bandbreite von 8 Hz hat und nach 200 Hz eine Dämpfung von 86 dB erreicht.
 
= Kontrollalgorithmus =
 
Es gibt bis jetzt zwei Möglichkeiten, die in Betracht gezogen werden.
 
== Zeitabstand zwischen Flanken der Trägerwelle ==
Bei 124 MHz sollten zwischen zwei steigenden Flanken des Trägers genau 1600 Takte des ICs stattfinden,
d.h. durch ständige Messung der Anzahl dieser Takte kann über längere Zeiträume die Abweichung der IC-Frequenz
von der Sollfrequenz berechnet werden. Einfach wäre es, direkt die Abweichungen (nach Multiplikation irgendeiner
Konstanten zur Anpassung der Zeitkonstante des entstehenden I-Reglers) zu integrieren und das Ergebnis an die
Kontrollspannung des Ofenquarzes auszugeben.
 
Bei dieser Variante sollte das Eingangssignal eine Rechtecksschwingung sein.
 
== Sampling der Trägerwelle ==
Durch ständiges Messen des Trägers kann die Schwebung zwischen Träger und PLL-Takt bestimmt werden, indem
an die Messpunkte ein Sinus gefittet wird, entweder mit einem nichtlinearen Least-Squares Fit oder einem
Kalman Filter.
 
Bei sekündlicher Messung und einer Ofenquarzfrequenz, die um 1 Hz von 10 MHz abweicht, kann so eine ganze
Schwebungsperiode in etwa zwei Minuten gemessen werden - die gemessene Frequenz beträgt etwa
<math>-f_{DCF} / f_{Ziel} \cdot \Delta f</math>, oder 7.75 mHz/Hz (aus der Reihenentwicklung von
<math>f_{DCF} f_{Ziel} / f_{XO}\; \text{mod } 1</math>).
Die erhaltene Abweichung wird anschließend in einen PI-Regler gesteckt und minimiert.
 
Um zu verhindern, dass nur eine Gleichspannung gemessen wird, sollte das Messintervall kein ganzzahliges
Vielfaches der Periode der Trägerfrequenz sein. Es ist also sinnvoll, statt einer Sekunde zusätzliche
<math>1/4/77500</math> Sekunden zu warten, so dass mit jeder Messung die Trägerwelle um <math>\pi/2</math>
voranschreitet und die Phasenbeziehung weiterhin leicht zu berechnen ist, wärend Amplitude und Offset
schnell beobachtet werden können.
 
Um die Frequenz korrekt messen zu können, darf das Eingangssignal nicht übersteuert sein. Vorteil dieser Methode ist,
dass hier recht schnell die genaue Frequenzabweichung des Quarzes angezeigt werden kann.
 
[[Kategorie:Projekte]]

Version vom 9. Juni 2017, 21:39 Uhr

Ein 10-MHz Quarz (VCXO) wird durch einen STM32 an die Trägerfrequenz des DCF77 Zeitzeichensenders gebunden. Da diese selber an die Atomuhren in Braunschweig gebunden ist und eine relative Standardabweichung von 10^-12 hat, sollte so (bei vorhandenem Signal) ein sehr genaues aber gleichzeitig günstiges Frequenznormal entstehen.

Überblick

Als Antenne wird eine herkömmliche Ferritkern-Antenne, wie sie in Funkuhren zu finden ist, verwendet.

Das empfangene Signal wird durch einen Bandpass auf den 77.5 kHz-Träger reduziert und durch z.B. einen Komparator zu einer Rechtecksschwingung umgewandelt. (Alternativ: Analoge Messung durch Microcontroller)

Ein STM32-Microcontroller, dessen Takt durch den internen PLL basiert auf dem VCXO auf 124 MHz gestellt wird, zählt die Takte zwischen zwei steigenden Flanken des 77.5 kHz Taktes und korrigiert die Kontrollspannung des VCXO so, dass die Abweichung auf 0 gemittelt wird.

Signalempfang

Zum Empfang des Signals wird eine Ferritkern-Antenne verwendet, die aus einem alten Funkwecker entfernt werden kann. Bei Bedarf kann ein größerer Ferritstab gekauft werden (eBay oder Aliexpress haben 200x10 mm Stäbe für etwa 8 Euro bzw. 7 USD). Solche Antennen sind recht schmalbandig, was hier von Vorteil ist, und haben im Vergleich zur Wellenlänge des Signals sehr kleine Dimensionen - eine Welle eines 77.5 kHz Signals hat eine Länge von etwa vier Kilometern.

Signalaufbereitung

Spektrum an einer Ferritkern-Antenne, störender Einfluss durch die Verbindung vom PC an das Oszilloskop durch einen USB-RS232-Adapter
Spektrum an einer Ferritkern-Antenne, ohne direkte Verbindung mit dem PC

Im Test ist knapp unterhalb der Trägerwelle ein Störsignal zu sehen, das sich in der Regel zwischen 70 und 75 kHz aufhält, aber teilweise auch näher an die Trägerwelle herankommt. Dies kommt von dem Rechner, der in der Nähe des Oszilloskops steht. Die Antenne sollte also möglichst weit von PCs (oder anderen Geräten mit Schaltnetzteilen) aufgebaut und ihr Signal nach Verstärkung über ein abgeschirmtes Kabel zum digitalen Teil der Schaltung geleitet werden.

Als Filter bietet sich ein Quarzfilter an. Quarzfilter haben eine sehr niedrige Bandbreite, was den Empfang von Sekundenpulsen ungenauer macht. Da für unseren Zweck die Zeit egal und nur die Trägerwelle von Interesse ist, ist dies belanglos.

Nach dem Filter sollte eine Verstärkung des Signals erfolgen, die eventuell einen AGC (Automatic gain control) Kreis beinhaltet.

  • JFET-Buffer (TL084?)
  • Quarzfilter als Bandpass um 77.5 kHz
  • Verstärkung mit AGC?
  • Übersteuerung -> Rechtecksschwingung (optional, falls die Zeit zwischen Flanken verwendet wird.)

Quarzfilter

Es wurden 100 77.5 kHz Quarze von AliExpress bestellt. In Messungen mit einem VNWA3 hatten vier davon eine durchschnittliche Serienresonanzfrequenz $f_s = 77495.2$ Hz, eine Parallelresonanzfrequenz $f_p = 77537.5$ Hz, und eine Serienkapazität $C_s = 1.42187$ fF. Mit diesen Werten lässt sich nach Iacopo Giangrandis Kristallfilter-Rechner mit einigen 18 pF (nach Rundung, vorher 16.7 pF und 19.4 pF) Kondensatoren ein Filter bauen, der eine Bandbreite von 8 Hz hat und nach 200 Hz eine Dämpfung von 86 dB erreicht.

Kontrollalgorithmus

Es gibt bis jetzt zwei Möglichkeiten, die in Betracht gezogen werden.

Zeitabstand zwischen Flanken der Trägerwelle

Bei 124 MHz sollten zwischen zwei steigenden Flanken des Trägers genau 1600 Takte des ICs stattfinden, d.h. durch ständige Messung der Anzahl dieser Takte kann über längere Zeiträume die Abweichung der IC-Frequenz von der Sollfrequenz berechnet werden. Einfach wäre es, direkt die Abweichungen (nach Multiplikation irgendeiner Konstanten zur Anpassung der Zeitkonstante des entstehenden I-Reglers) zu integrieren und das Ergebnis an die Kontrollspannung des Ofenquarzes auszugeben.

Bei dieser Variante sollte das Eingangssignal eine Rechtecksschwingung sein.

Sampling der Trägerwelle

Durch ständiges Messen des Trägers kann die Schwebung zwischen Träger und PLL-Takt bestimmt werden, indem an die Messpunkte ein Sinus gefittet wird, entweder mit einem nichtlinearen Least-Squares Fit oder einem Kalman Filter.

Bei sekündlicher Messung und einer Ofenquarzfrequenz, die um 1 Hz von 10 MHz abweicht, kann so eine ganze Schwebungsperiode in etwa zwei Minuten gemessen werden - die gemessene Frequenz beträgt etwa <math>-f_{DCF} / f_{Ziel} \cdot \Delta f</math>, oder 7.75 mHz/Hz (aus der Reihenentwicklung von <math>f_{DCF} f_{Ziel} / f_{XO}\; \text{mod } 1</math>). Die erhaltene Abweichung wird anschließend in einen PI-Regler gesteckt und minimiert.

Um zu verhindern, dass nur eine Gleichspannung gemessen wird, sollte das Messintervall kein ganzzahliges Vielfaches der Periode der Trägerfrequenz sein. Es ist also sinnvoll, statt einer Sekunde zusätzliche <math>1/4/77500</math> Sekunden zu warten, so dass mit jeder Messung die Trägerwelle um <math>\pi/2</math> voranschreitet und die Phasenbeziehung weiterhin leicht zu berechnen ist, wärend Amplitude und Offset schnell beobachtet werden können.

Um die Frequenz korrekt messen zu können, darf das Eingangssignal nicht übersteuert sein. Vorteil dieser Methode ist, dass hier recht schnell die genaue Frequenzabweichung des Quarzes angezeigt werden kann.