Forum: Mikrocontroller und Digitale Elektronik 2 Uhren synchron halten


von Steffen M. (steffenmdv)


Lesenswert?

Hallo!

Ich habe folgendes vor:
Zwei unabhänige MC (PICs) sollen Ereignisse messen und sich anschließend 
darauf per Funk (RFM12-Module) verständingen wessen Ereignis zuerst 
auftrat.
Die Genauigkeit soll dabei im ms Bereich liegen, d.h. in einer Stunde 
sollte der Fehler maximal 5ms betragen.

Ich habe dazu folgende Idee und bitte um Eure Meinungen:

1. Jeder PIC bekommt einen sehr genaue Zeitgeber (ca. 2ppm) Ich habe bei 
Maxim den DS32KHZ und DS4000 (10MHz) gefunden die das erfüllen würden. 
(btw. Kennt jemand dafür eine Bezugquelle?)
Am Anfang sychroniesiere ich die Module über ein Kabel und lasse einen 
Zähler mitzählen. Tritt ein Ereigniss auf sende ich das dem anderen 
Modul mit dem aktuellen Zählerstand. Falls das 2. Modul auch ein 
Ereigniss registriert hat vergleicht es den empfangenen und eigenen 
Zählerstand und weiß wer zuerst etwas registriert hat.

2. Möglichkeit: Synchronisation über Funk. Ich würde nur recht genaue 
Quarze benutzen (10-20ppm sind wohl verfügbar, ggf. messe ich sie vorher 
durch oder so) und versuche ein Protokoll für die Synchronisation über 
Funk zu implementieren, das etwa jede Minute ausgeführt wird. Dabei muss 
ich nur irgendwie eine mögliche Verzögerungszeit der Funkübertragung 
herausbekommen. Eventuell könnte ich auch eine "Basisstation" nehmen die 
beiden Modulen etwas sendet.

Hat jemand weitere Ideen oder Anregungen?

Gruß, Steffen


von katzeklo (Gast)


Lesenswert?

Was hälst du davon, jedem ein eigenes kleines DCF-Modul zu spendieren?

von katzeklo (Gast)


Lesenswert?

Was hälst du davon, jedem PIC ein eigenes kleines DCF-Modul zu 
spendieren?

von Schlumpf (Gast)


Lesenswert?

Google mal IEEE 1588. Da haben sich schon viele schlaue Leute nen Kopf 
drüber gemacht, wie sowas vom Prinzip funktioniert.

Genaugenommen muss dein Quarz gar nicht so genau sein.
Du kannst ja die "Geschwindigkeit" der Slave Uhr regeln, indem du in 
zyklischen Abständen die Aktuelle Master-Uhrzeit übermittelst und aus 
der Differenz den Gangunterschied deiner Uhren rausrechnest und mit 
diesem Ergebnis die Slave-Uhr langsamer oder schneller laufen lässt.

Ist das System eingeschwungen, so sollte die Abweichung relativ gering 
sein.
Voraussetzung ist, dass die Latenzzeit deiner Übertragungsstrecke 
einigermassen konstant ist, denn sonst bekommst du ständig Sprünge auf 
deinen Regler

von PeterL (Gast)


Lesenswert?

2ppm sind aber schon 5,6msec / Std
und das pro °C ( Quarzofen verwenden !)

wenn es der Empfang zulässt nimm DCF77 Phasensynchron

Peter

von steffenmdv (Gast)


Lesenswert?

Danke für die Hinweise.

DCF77 Empfänger hatte ich vorher schon ausgeschlossen - weil ich nicht 
wusste dass man damit so genaue Zeiten erhalten kann. Werde ich aber 
trotzdem nicht verwenden, weil ein kontinuierlicher Empfang nicht 
sichergestellt ist.

Das in IEEE 1588 beschriebene Protokoll ist im Prinzip genau das was ich 
machen wollte. Da werde ich mich wohl etwas einarbeiten.

Gruß, Steffen

von Christian R. (supachris)


Lesenswert?

Ich hab sowas über IEEE 802.15.4 Funk realisiert. Mit dem CC2420, der 
hat einen Hardware-Ausgang, wann der Start Frame Delimiter empfangen 
bzw. gesendet wurde. Genauigkeit der Synchronisierung ca 5µs direkt 
danach. Sync läuft über die Capture-Funktion des MSP430. Vielleicht 
kannst du ja auf deinem Funkmodul einen ähnlichen Ausgang finden...

von blubb (Gast)


Lesenswert?

Du kannst dir auch mal NTP (Network Time Protocol) anschaun. Ich weiß 
nicht ob das für deine Anwendung genau genug wird, aber ich denke schon. 
Und dieses Protokoll wurde extra auf schwankende Ping-Zeiten optimiert. 
Weitere Vorteil: Du findest fertige Software dazu im Netz. (Sowohl 
Server als auch Client)

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.