Forum: Mikrocontroller und Digitale Elektronik Die "genaue" Sekunde - Tool für Oszillator Kalibrierung


von Tarek T. (tarek_t)



Lesenswert?

Einen schönen guten Abend,

ich habe in den letzten drei Wochen 25 Datalogger gebaut, die für 
Langzeitmessungen konzipiert sind. Ein wichtiger Punkt war für mich, 
dass die Zeit möglichst genau abgebildet wird.
Peter Dannegger hat einen schönen Artikel dazu verfasst. Ausgehend davon 
habe ich mit C# ein Tool gebaut, dass das Zeitstoppen und rumrechnen für 
mich erledigt. Nichts besonderes, einfach nur für "bequeme" Leute ;)

Wollte es dem einen oder anderen aber dennoch nicht vorenthalten. 
Vielleicht wird es ja genutzt oder es findet sich ein Fehler in der 
Firmware/PC-Anwendung. Bin für jede Kritik/Fehlermeldung dankbar.

Das Programm stellt über eine serielle Schnittstelle eine Verbindung zu 
einem Mikrocontroller her, der über eine bestimmte Firmware verfügen 
muss. Diese Firmware wird nur für die Oszillatorkalibrierung benötigt. 
Das Programm kann eine neue Kalibrierung starten und die aktuell 
laufende Kalibrierung auswerten. Für eine genaue Messung ist es 
sinnvoll, nach Start einer neuen Kalibrierung diese für mindestens 24 
Stunden laufen zu lassen. Je länger die Dauer, desto genauer ist 
hinterher das Ergebnis. Für den Start wird die interne Uhr des 
Mikrocontrollers mit dem PC synchronisiert. Wir gehen davon aus, dass 
die Uhr auf dem PC “genau” ist. Zu einem beliebigen Zeitpunkt kann eine 
Auswertung gestartet werden. Der PC holt sich die Informationen über die 
interne Uhr des Mikrocontrollers und berechnet eine Abweichung. Anhand 
der Abweichung und der Dauer der Messung wird eine Oszillatorfrequenz 
vorgeschlagen, die von nun an in der Software des Mikrocontrollers 
benutzt werden kann. Für eine genaue Messung, kann dieser Vorgang nach 
Einprogrammierung der neuen Frequenz mehrmals wiederholt werden. Ganz 
einfach und ohne Rechenaufwand und Zeitstoppen. Für eine genaue Messung 
sollten die Randbedingungen des Mikrocontrollers möglichst nicht 
verändert werden, sprich: Nach Start der Messung ist es nicht sinnvoll 
den Mikrocontroller in den Kühlschrank zu legen und/oder diesen am 
Nachmittag bei sonnigem Wetter mit in den Park zu nehmen, die Frequenz 
des Taktgenerators ist nämlich temperaturabhängig.

Aktuelle Version: 1.01

Anmerkung: In der Datei OszillatorKalibrierung.h sind bei weitem nicht 
alle Mikrocontroller aufgelistet. Nach dem in der Datei ersichtlichen 
Schema können weitere hinzugefügt werden. Ich wäre jedem sehr dankbar, 
wenn er mir seine modifizierte Header Datei mit neuen Controllern 
zuschickt. Ich werde die dann nach und nach hinzufügen.

von Wieland (Gast)


Lesenswert?

Das klappt aber nur, wenn du die PC-Uhr mittels NTP ziehen lässt. Sonst 
hast du Abweichungen im Bereich >>>0.1 % drin.

von ah. (Gast)


Lesenswert?

Der PC hat sowas von einer billigen Uhr. Ohne taegliche Synchronisation 
mit einem server ist da leider gar nichts. Irgend ein RTC zB DS1307 mit 
einem 32kHz 10ppm Quartz bringt das auch. Ich wuerd mir diese muehe 
nicht machen mit einem PC zu synchronisieren.

Die interne Uhr des AVR ? Soll das der RC Oszillator sein ? Falls ja... 
gut gemeint, aber leider nicht so toll. Ich hab da mal die Spannungs- 
und Temperaturabhaengigkeit gemessen... aeh. ja.
Wenn man eine Zeit haben moechte, die man Zeit nennen darf, sollte man 
entweder einen 32kHz Quarz anhaengen, oder eine RTC verwenden.
Was man machen kann, ist den internen RC Oszillator auf den 32kHz zu 
synchronisieren.

von tt4u (Gast)


Lesenswert?

Ich nehme sehr gerne die RTC-Chips von Micro Crystal (z.B. bei Reichelt) 
oder den DS3231 von Maxim. Das spart jede Menge umständliche Software 
und ist sehr viel genauer als jede Software-RTC.

von Sesk K. (zeborok)


Lesenswert?

Ist theoretisch ne nette Idee bzw. Umsetzung, gefällt mir soweit.

Die Sache ist jedoch: Wenn es schon um die "genaue" Sekunde geht oder 
gehen soll, dann müsstest du auch die PC-seitige Programmverarbeitung 
berücksichtigen sowie die anschließende (serielle) Kommunikation.

Die Dauer der Kommunikation/en selbst liese sich hinsichtlich ihrer 
Laufzeit evtl. ja noch recht eindeutig bestimmen.

Bzgl. deiner PC-seitigen SW (hier wohl Windows, C#-Programm) hat du wohl 
keine garantierten Laufzeiten.

Insofern ist die "genaue" Sekunde schon - wenn auch sicherlich nur um 
wenige ms nachgehend-  nicht mehr SO genau.

von Tarek T. (tarek_t)


Lesenswert?

Wieland schrieb:
> Das klappt aber nur, wenn du die PC-Uhr mittels NTP ziehen lässt. Sonst
> hast du Abweichungen im Bereich >>>0.1 % drin.

Guter Tipp. Daran habe ich auch schon einmal gedacht. Ich habe eben 
einen neuen Testlauf gestartet, in dem ich vorher die Systemuhr manuell 
synchronisiert habe. Bei der Auswertung muss ich das vorher nur noch 
einmal machen. Mal sehen, ob sich da was ändert.

ah. schrieb:
> Die interne Uhr des AVR ? Soll das der RC Oszillator sein ? Falls ja...
> gut gemeint, aber leider nicht so toll. Ich hab da mal die Spannungs-
> und Temperaturabhaengigkeit gemessen... aeh. ja.

Nene, ich meinte damit die interne "Software-Uhr". Genutzt habe ich 
mehrere Quartze und Oszillatoren mit unterschiedlichen Frequenzen.

> Der PC hat sowas von einer billigen Uhr. Ohne taegliche Synchronisation
> mit einem server ist da leider gar nichts. Irgend ein RTC zB DS1307 mit
> einem 32kHz 10ppm Quartz bringt das auch. Ich wuerd mir diese muehe
> nicht machen mit einem PC zu synchronisieren.

Ok, könnte man mit obiger Vorgehensweise eliminieren. Und nocheinmal: Es 
geht nicht darum, eine Uhr auf dem Controller mit dem PC zu 
synchronisieren. Es ging mir dabei zunächst einmal um die Bestimmung der 
Taktfrequenz. Ich weiß nicht, wie gut das mit einem Oszilloskop geht, 
meins ist leider schon länger defekt.

tt4u schrieb:
> Ich nehme sehr gerne die RTC-Chips von Micro Crystal (z.B. bei Reichelt)
> oder den DS3231 von Maxim.

Ich wollte zum einen gerne ohne zusätzliche Bauteile auskommen. Zum 
anderen wollte ich sehen, wie gut das auch mit dem Quartz/Oszillator 
geht.

Sesk K. schrieb:
> Die Sache ist jedoch: Wenn es schon um die "genaue" Sekunde geht oder
> gehen soll, dann müsstest du auch die PC-seitige Programmverarbeitung
> berücksichtigen sowie die anschließende (serielle) Kommunikation.

Damit hast Du wohl recht. Aber wie oben gesagt, ging es mir vielmehr 
darum, einen genauen Sekundentakt hinzubekommen. Ob die Uhr nun eine 
Sekunde vor bzw nach geht ist mir erst einmal egal. Wichtig ist mir nur, 
dass sie nach Möglichkeit auch noch nach einem Monat bloß eine Sekunde 
vor bzw. nach geht. Die Laufzeiten der Verbindung etc. sind ja konstant. 
Vom C# Programm eher nicht, aber da sage ich mal, dass die 
Laufzeitunterschiede einzelner Programmabläufe vernachlässigbar klein 
sind. Da würde vlt eine Temperaturänderung von 1°C mehr bewirken.

von tt4u (Gast)


Lesenswert?

> Wichtig ist mir nur, dass sie nach Möglichkeit auch noch nach einem Monat
> bloß eine Sekunde vor bzw. nach geht.

Das sind unter 0,4ppm, ein Quarz hat 20-50ppm, die o.g. RTC haben 2-5ppm

von Falk B. (falk)


Lesenswert?

@Tarek T. (tarek_t)


>synchronisieren. Es ging mir dabei zunächst einmal um die Bestimmung der
>Taktfrequenz. Ich weiß nicht, wie gut das mit einem Oszilloskop geht,

Nicht gut, denn so ein Oszi hat keine sonderlich genaue Zeitbasis, so um 
die 100ppm, vielleicht etwas weniger. Man braucht einen guten 
Frequenzzähler.


>Sekunde vor bzw nach geht ist mir erst einmal egal. Wichtig ist mir nur,
>dass sie nach Möglichkeit auch noch nach einem Monat bloß eine Sekunde
>vor bzw. nach geht.

Diese 0,4ppm muss man mit der MEthode erstmal erreichen. NACHWEISLICH!

> Die Laufzeiten der Verbindung etc. sind ja konstant.

Gewagte Annahme.

>Vom C# Programm eher nicht, aber da sage ich mal, dass die
>Laufzeitunterschiede einzelner Programmabläufe vernachlässigbar klein
>sind. Da würde vlt eine Temperaturänderung von 1°C mehr bewirken.

Hast du das mal überschlagen? Und auch REAL nachgemessen? Klingt eher 
nach Wunschdenken.

von W.S. (Gast)


Lesenswert?

Tarek T. schrieb:
> ich habe in den letzten drei Wochen 25 Datalogger gebaut, die...

...sich in ihrer Uhrzeit über nen längeren Zeitraum möglichst wenig 
irren sollen.

Dein Anliegen mit irgendwelchen Programmen im PC und sonstwo versteh ich 
nicht. Wozu bloß dieser Zirkus???

Gib jedem deiner 25 Datenlogger nen ordentlichen TCXO, gleiche die 
Dinger mit nem ausreichend genauen Frequenzzähler ab und das Problem ist 
erledigt.

Falls das mit dem TCXO dir zu teuer ist, dann miß halt die Frequenz 
deines Quarzoszllators an dem verbauten uC aus und berücksichtige sie im 
Programm. Das braucht keine Stunden, sondern ist in ein paar Minuten 
gemacht. Aber nen TCXO halte ich in jedm Falle für besser. Gibt's bei 
Ebay für wenig Geld.

W.S.

von EFA (Gast)


Lesenswert?

Der ganze Abgleich beruht auf der Annahme, dass der Quarz/Oszillator 
einen konstanten Fehler hat. Ist das wirklich so? Ich befürchte eher 
nicht.....

Brauchbare TCXO mit 0.5ppm gibts bei Digikey für 5.-, z.B. 
http://www.digikey.de/product-detail/de/KT2520F16369ACW28TAK/478-4825-1-ND/1833888.

von Tarek (Gast)


Lesenswert?

EFA schrieb:
> Der ganze Abgleich beruht auf der Annahme, dass der
> Quarz/Oszillator
> einen konstanten Fehler hat. Ist das wirklich so? Ich befürchte eher
> nicht.....

Ne das stimmt, da hast Du Recht. Alleine schon Temperaturunterschiede 
sorgen dafür, dass die Frequenz abweicht.

Ich denke auch, dass einige meine ursprüngliche Idee (die durch 
Fertigungstoleranzen abweichende Frequenz einschätzen zu können) zu 
kritisch betrachten. Natürlich ist das nicht die perfekte Sekunde! Wie 
eingangs erwähnt beruht diese Idee auch auf den Artikel 
AVR - Die genaue Sekunde / RTC, bei dem es auch nicht um die 
perfekte Sekunde geht.

Finde es auch etwas schade, dass die Bereitstellung meiner Idee/Lösung 
und des Codes/Programms als "Zirkus" bezeichnet wird.

von Falk B. (falk)


Lesenswert?

@Tarek (Gast)

>Ich denke auch, dass einige meine ursprüngliche Idee (die durch
>Fertigungstoleranzen abweichende Frequenz einschätzen zu können) zu
>kritisch betrachten.

Liegt in der Natur der Sache. So ziemlich jede Idee wir hier erst einmal 
zerrissen ;-)

>Finde es auch etwas schade, dass die Bereitstellung meiner Idee/Lösung
>und des Codes/Programms als "Zirkus" bezeichnet wird.

Nimm's nicht persönlich, das ist hier normal. Deine Idee ist an sich 
gut, aber inhaltliche Diskussion und Kritik ist so normal wie notwendig. 
Das Geplapper rundherum muss man ignorieren.

Ich hab mal was ähnlichs gemacht. Automatischer Abgleich des 32k 
Uhrenquarzes mittels DCF77 über 24h. Dort wurde DCF77 mittels 128 Hz 
Timer Takt abgetastet, macht über 24h einen maximalen Abtastfehler von 
7,8ms / 24h = 0,09ppm, WENN der DCF77 Empfänger keinerlei Fehler 
reinbringt. Ich tippe real auf vielleicht 0,5-1ppm Fehler. Für den Zweck 
war es ausreichend.

Als Experiment war das sehr interessant, praktisch würde ich einen 
einfache Frequenzzähler organsisieren und dort einen guten TCXO oder gar 
OCXO als Referenz dranklemmen. Damit kalibriert man die Quarze in 
Sekunden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.