Wie synchronisiere ich zwei Mikrocontroller auf Mikrosekundengenauigkeit?


37

Ich muss zwei Mikrocontroller synchronisieren, damit sie die Geschwindigkeit der sich ausbreitenden Wellen messen können. Die Zeitverzögerungsmessungen müssen eine Genauigkeit von Mikrosekunden aufweisen (Fehler von weniger als einer halben Mikrosekunde).

Ich habe zwei Mikrocontroller ( ATmega328 ), die einen 12-MHz-Quarz verwenden.

Sie sind beide mit Bluetooth-Transceivern ausgestattet. Die Bluetooth-Transceiver senden und empfangen Pakete mit einem Jitter von ~ 15 Millisekunden.

Ich hoffe, die Mikrocontroller mithilfe der Bluetooth-Transceiver oder einer anderen kreativen Methode zu synchronisieren.

Ich habe versucht, sie zu synchronisieren, indem ich sie zusammen berührte, aber ich brauche sie, um ungefähr 10 Minuten synchron zu bleiben, und ihre Uhren gingen zu schnell. Wenn es möglich wäre, die Zeitverschiebung genau vorherzusagen, würde diese Methode möglicherweise funktionieren.

Wie soll ich vorgehen, um diese Synchronisierung zu erreichen?


2
Können Sie uns sagen, was Sie versuchen und warum die Einheiten synchronisiert werden müssen? Möglicherweise können die Besonderheiten Ihrer Anwendung eine Lösung aufzeigen. Dies ist im Allgemeinen kein einfaches Problem, insbesondere für kleine drahtlose Geräte.
Nick Alexeev

2
Es ist unmöglich, mithilfe von Bluetooth eine Synchronisierung zu erreichen. 15 ms Jitter sind einfach zu viel, um eine Synchronisation von 0,5 us zu erreichen. Sie benötigen etwas mit sehr geringem Jitter und fester Latenz, das korrigiert werden kann. Es wäre einfacher, wenn Sie eine einzelne Uhr an beide senden und die Uhr puffern könnten, um die Verzögerungen auszugleichen.
Travisbartley

Entschuldigung für die Verspätung. Ziel des Projekts ist es, Drähte aus einem bestehenden Design von digitalen Handmessgeräten zu entfernen. Der Benutzer wünschte sich ein drahtloses Design, da die Stromkabel beschädigt wurden. Die Geräte messen die Ausbreitung von Wellen in stehenden Bäumen, die schnell genug sind, um eine 0,5-prozentige Synchronisation zwischen beiden Sensoren zu benötigen.
Kevin

Cheap-o wireless: Infrarot. Ein IR-Impuls könnte ausreichen, um die Uhren neu zu synchronisieren, wenn sie ein wenig auseinandergedriftet sind.
JimmyB

1
In diesem Artikel wird ein Bluetooth 4.0-System mit ~ 10uS-Synchronisation mit experimentellem Test vorgeschlagen.
user2943160

Antworten:


23

Ich will nicht auf Ihrer drahtlosen Parade regnen. Sie sind auf eine harte, aber unerwartete Anforderung gestoßen. So etwas erfordert eine Neubewertung des gesamten Systemdesigns.

Das erste, was mir einfällt, ist, beide Einheiten von einem Oszillator zu takten. Sie haben eine Bluetooth-Verbindung, was darauf hindeutet, dass die Reichweite in der Größenordnung von 10 m liegt. Sie könnten Ihre Geräte mit einem RG174-Koaxialkabel oder einem Lichtwellenleiter verbinden, der die Uhr tragen würde.

Zweitens gibt es Präzisionsoszillatoren. In der Reihenfolge steigender Präzision und Kosten.

  • TCXO (temperaturkompensierter Quarzoszillator). Typischerweise 1 bis 3 ppm Drift.
  • OCXO (ofengesteuerter Kristalloszillator). Drift in der Größenordnung von 0,02 ppm. Einige OCXO sind auf 0,0001 ppm gefallen.
  • Atomuhr ( zB Rubidium-Standard ). Ich erwähne die Atomuhr hauptsächlich, um einen Bezugsrahmen zu geben. Mehr dazu hier .

3. Präzisionsoszillator, trainiert mit GPS. Jeder GPS-Satellit hat mehrere Atomuhren an Bord. Normalerweise sind viele GPS-Satelliten im Blick. GPS wird häufig für präzises Timing verwendet (weniger bekannte Verwendung im Vergleich zu Navigationsgeräten). Die meisten GPS-Empfänger haben einen 1PPS-Ausgang (ein Impuls pro Sekunde), der eine Zeitgenauigkeit von 50 ns liefert.
Um eine Drift von 0,5 μs über 600 s (10 min) zu erreichen, sollte Ihre Uhr (die 12-MHz-Uhr in Ihrem derzeitigen Design) eine Drift von weniger als 0,0008 ppm aufweisen. Wenn Sie den Timing-Fehler jedoch von Zeit zu Zeit von einer externen Quelle mit geringer Drift korrigieren können, kann die Anforderung an die Drift in der Uhr gelockerter sein. Wenn Sie jede Sekunde korrigieren können, kann Ihre Uhr eine Abweichung von 0,5 ppm aufweisen.


Ich habe einmal an einem Projekt gearbeitet, bei dem wir diese Genauigkeit auf Servern in Rechenzentren auf der ganzen Welt erreichen mussten. Dort war es am einfachsten, GPS zu verwenden. Es stellte sich heraus, dass nicht alle Maschinen / Rechenzentren Zugriff auf GPS haben konnten, sodass unsere Lösung letztendlich eine ziemliche Herausforderung darstellte. Dies mit Mikrocontrollern zu tun, wird noch schwieriger.
NomadAlien

4
+1 für "Gewährleistet eine Neubewertung des gesamten Systemdesigns".

1
Abhängig von Ihrem Budget können Sie GPS-Geräte kaufen, die eine programmierbare Frequenz (0-10 MHz) ausgeben, die phasenrichtig zum GPS-Signal ist. Schauen Sie sich den uBlox LEA-6T an. Sie behaupten 30 nS RMS-Fehler-Zeitimpulsausgabe, 99% <60 nS.
Connor Wolf

9

GPS-Module mit 1pps-Ausgängen sind leicht verfügbar und kostengünstig.

Es ist nicht wirklich notwendig, den Oszillator der CPU auf das GPS zu disziplinieren (z. B. mit einer PLL). Solange Sie externe Ereignisse in Bezug auf die CPU-Uhr mit einem Zeitstempel versehen können, ist es relativ einfach, die Zeit für das Senden und Empfangen von Wave-Ereignissen zwischen zwei PPS-Ereignissen zu interpolieren.

Sie können häufig die Kombination eines Hardware-Timers auf dem Mikrocontroller zusammen mit einem Software-Zähler für seine Überlaufereignisse verwenden, um einen CPU-Zykluszähler beliebiger Breite zu erstellen. Es kann schwierig sein, mit Rollover-Ereignissen sowohl des Hardware-Zählers als auch des Software-Zählers richtig umzugehen, aber am Ende können Sie beispielsweise einen 32-Bit-Zähler haben, der mit der Taktrate der CPU zählt (was eine hohe Auflösung ergibt) ) und läuft mit einer Zeitspanne weiter, die länger ist als die Intervalle, die Sie messen möchten (z. B. 429 Sekunden bei 10 MHz).

Mit diesem Zähler können Sie verschiedene externe Ereignisse mit einem Zeitstempel versehen. Wenn eines dieser Ereignisse 1-pps-Impulse von einem GPS-Empfänger sind, ist die grundlegende Langzeitgenauigkeit der CPU-Uhr unerheblich. Entscheidend ist nur die kurzfristige Stabilität. Sie können GPS-Zeitstempel in einem FIFO-Puffer speichern und die Zeitstempel anderer Ereignisse mit den Werten in diesem Puffer vergleichen. Da Sie wissen, dass die GPS-Impulse genau eine Sekunde voneinander entfernt sind, können Sie die genaue Uhrzeit jedes anderen Ereignisses durch Interpolation ermitteln.

GPSnGPSn+1TichmenTichmen+1ExtGPSnGPSn+1

Tichmen+Ext-GPSnGPSn+1-GPSn

Wenn Sie dieses Setup auf zwei separaten Systemen mit jeweils eigenem GPS-Empfänger ausführen, können Sie die für verschiedene Ereignisse auf den beiden Systemen berechneten Zeiten mit hoher Genauigkeit vergleichen (in der Regel in der Größenordnung von ± 100 ns), auch wenn die CPU-Takte der beiden Systeme sind nicht synchronisiert.


Könnten Sie etwas genauer sagen, wie das funktionieren würde? Ich habe Probleme, die aktuelle Erklärung zu verstehen.
NickHalden

@ NickHalden: OK, fertig.
Dave Tweed

Hmmm ok, hängt das nicht davon ab, dass die Frequenz der CPU-Uhr zwischen den beiden 1-Sekunden-Impulsen konstant ist? Nehmen wir zum Beispiel eine besonders schreckliche Quarzoszillatorschaltung, bei der 99% der Impulse zwischen 0,00 und 0,05 Sekunden und die letzten 1% zwischen 0,05 und 1,00 Sekunden auftreten. Würde dieses pathologisch konstruierte Beispiel das nicht vermasseln oder vermisse ich immer noch etwas?
NickHalden

Ja, das bedeutet "kurzfristige Stabilität".
Dave Tweed

Oh, wie war das da drin, als ich es kommentierte? Haha das ist peinlich. Trotzdem danke für die Erklärung +1 von mir.
NickHalden

8

Ich habe zuvor eine drahtlose Uhrensynchronisation für Mikrocontroller implementiert, allerdings nur mit einer Genauigkeit von Millisekunden, die für die Anwendung gut genug war. Nach meiner Lektüre erklärt dieses Papier die Mikrosekunden-Synchronisation recht gut: http://www.math.u-szeged.hu/tagok/mmaroti/okt/2010t/ftsp.pdf

Wenn Sie das Sendeereignis und das Ankunftsereignis eines Funkpakets auf dem Sender bzw. Empfänger kennen, haben Sie im Wesentlichen ein gemeinsames beobachtbares Ereignis (vorausgesetzt, Sie ignorieren die Ausbreitungszeit der Funkwelle) zwischen den beiden möglichen Systemen als Referenz verwendet. Das andere nette Merkmal, das in der Veröffentlichung erwähnt wird, ist die Schätzung des Zeitversatzes unter Verwendung einer linearen Regression.


Die Genauigkeit von 1,5 µs im Single-Hop-Szenario und die durchschnittliche Genauigkeit von 0,5 µs pro Hop im Multi-Hop-Fall wurden durch Bereitstellung experimenteller Ergebnisse gezeigt. Nett.
Li-aung Yip

1
Dies könnte auch von Interesse sein: Timing-Sync-Protokoll für Sensornetzwerke
Nick Alexeev

3

Lesen Sie das Bluetooth Clock Synchronization Protocol (CSP), das ein optionaler Bestandteil des Health Device Profile (HDP) ist. Die für CSP relevanten Abschnitte in diesem Dokument sind 2.1 und 8.

Ich hatte noch keine Gelegenheit, es selbst zu versuchen, aber so weit ich weiß, hat BlueZ (der offizielle Linux Bluetooth-Protokollstack) gerade die Unterstützung für HDP hinzugefügt , einschließlich der Unterstützung für CSP. Obwohl es sich nicht so anhört, als würden Sie auf einer Plattform laufen, die den BlueZ-Stack unterstützt, bietet der Code möglicherweise zumindest eine gute Referenzimplementierung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.