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.
„ 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.
Ron J.
PeterJ
JJC
PeterJ