Synchronisieren Sie die Arduino-Zeiten mit einer Differenz von 20 ms

Ich arbeite an einem Schulprojekt, bei dem ich die Uhr auf zwei Arduinos auf nahezu perfektes Timing synchronisieren muss. Mir gefiel die Idee, Bluetooth zu verwenden, aber es hat gewisse Drifts/Verzögerungen im Timing. Ich dachte daran, beim Initiieren eine direkte Verbindung zwischen den beiden Karten zu verwenden und sie dann zu trennen, wenn sie synchron sind. Werden die Arduinos über einen langen Zeitraum das "perfekte" Timing beibehalten? Reicht das oder gibt es bessere Lösungen?

Ich bin nicht auf die Verwendung eines Arduino beschränkt. Ich brauche eine Latenz von weniger als 20 Millisekunden.

Antworten (2)

NTP kann die Zeit über das öffentliche Internet normalerweise innerhalb von zehn Millisekunden halten und kann unter idealen Bedingungen in lokalen Netzwerken eine Genauigkeit von 1 Millisekunde erreichen.“

Zum Beispiel: Arduino UdpNtpClient - obwohl dies kein vollständiger NTP-Client ist und die genaue Zeit nicht kontinuierlich verwaltet (im Gegensatz zu einem normalen NTP-Client)

Netzwerklatenz ist kein Problem, Jitter kann es sein. NTP erfordert, dass die Systeme in regelmäßigen Abständen kommunizieren können, und benötigt Zeit, um sich auf genaue Werte festzulegen.

Um die Frage der Genauigkeit zu beantworten, während ein typischer Kristall getrennt ist, kann er eine Genauigkeit von beispielsweise 50 ppm haben, was etwa 4,3 Sekunden Fehler über einen Tag oder etwa 180 ms pro Stunde entspricht, sodass er Ihre 20-ms-Grenze in weniger als 10 Minuten überschreiten könnte. Ein Großteil des Fehlers hängt von der Temperatur und dem Alter des Kristalls ab, sodass Sie ihn wahrscheinlich kalibrieren könnten, um viel bessere Ergebnisse zu erzielen. Wenn Sie jedoch über längere Zeiträume sprechen und Ihre Temperatur erheblich schwankt, ist dies möglicherweise nicht praktikabel .

Jetzt, da GPS-Module so billig sind, lohnt es sich, sie als genaue Zeitquelle zu betrachten, vorausgesetzt, Ihre Anwendung hat eine relativ klare Sicht auf den Himmel oder Sie können eine Antenne betreiben. Technisch gesehen ist das GPS-System auf etwa 20 ns genau, aber die meisten Empfänger, die ich mit einem externen PPS-Ausgang (Impuls pro Sekunde) gesehen habe, behaupten eine Genauigkeit von 1 ms oder weniger.

Damit dies normal funktioniert, benötigen Sie einen UART-Port, um die NMEA-Ausgabe vom GPS zu lesen, die das UTC-Datum und die Uhrzeit enthält, und die PPS-Ausgabe mit einer Interrupt-Leitung zu verbinden. Sie müssen das Datenblatt für das spezifische GPS-Modul überprüfen, aber die meisten scheinen die PPS-Leitung zu pulsieren, und der folgende NMEA-Satz enthält die Zeit, auf die sich der Puls bezieht, also ist eine Methode, die ich verwendet habe, die, wenn der Interrupt auftritt, zu setzen die Zeit zur vorherigen empfangenen Zeit plus eine Sekunde (da die letzten NMEA-Daten jetzt eine Sekunde alt sind) und verwenden Sie diese, um den freilaufenden Timer zu kalibrieren.

Als billigere Alternative zu einem GPS-Schild / Modul - ziehen Sie eine RTC (Beispiel sparkfun.com/products/99 ) wie die DS1307 in Betracht. Ziemlich genau, Sie können einmal am Tag oder öfter synchronisieren, halten die Zeit auch dann, wenn die MPU-Stromversorgung ausfällt, einfach zu programmieren und zu lesen und wirklich klein, sodass es nicht im Weg sein sollte.
@RonJ. ziemlich vernünftige Idee, obwohl die meisten Uhrkristalle immer noch nur etwa 20 ppm betragen, also wäre es nur 2,5 genauer als die obigen Zahlen, so dass Sie immer noch nur etwa 30 Minuten oder so sehen würden, bevor es außerhalb von 20 ms driften könnte. Sie sind in Armbanduhren tendenziell stabiler, da der menschliche Körper die Temperatur reguliert, während sie getragen werden und wenn nicht, lassen die meisten Menschen sie nicht in extremer Kälte / Hitze.
@PeterJ. Genauer gesagt, mein Ziel ist es, eine mp3-Datei von einem anderen Ort zu genau einer bestimmten Zeit mit einer App abzuspielen. GPS ist zu teuer. Es scheint zu mühsam, die Platinen jedes Mal, wenn die Uhr nicht mehr synchron ist, mit einem direkten Draht neu zu verbinden. Ich denke darüber nach, zu einer direkten Bluetooth-Verbindung zwischen den Boards zurückzukehren, um synchron zu bleiben. Gibt es Hoffnung?
@JJC, wenn Bluetooth in Reichweite ist, könnte es eine gute Lösung sein. Ich habe nie genug mit BT gemacht, um zu wissen, wie die Latenz ist, aber in Anlehnung an RedGrittyBrick schlug vor, dass Sie vielleicht ein NTP-ähnliches Protokoll erstellen können, das ein paar "Pings" ausführt und die Latenz misst, um dies zu kompensieren, aber Jitter könnte ein Problem sein, aber ich würde Denke wäre OK zwischen zwei BT-Geräten.