Frage:
GPS PPS Signal entspricht Datenzeit?
bakalolo
2016-08-26 01:28:44 UTC
view on stackexchange narkive permalink

Ich habe derzeit ein Adafruit Ultimate-GPS an ein Arduino angeschlossen, das einmal pro Sekunde GPS-Daten (nmea-Sätze) ausgibt.Es gibt auch einen Pin am GPS, der 1 PPS-Signal ausgibt.

Meine Frage ist, ob der PPS-Puls mit der Zeit übereinstimmt, zu der die GPS-Daten eingehen, d. h., ob sie gleichzeitig eingehen?

Tritt der PPS-Impuls auch zu Beginn einer UTC-Sekunde ein oder ist er zufällig und einfach einmal pro Sekunde?

Ich habe eine davon und ich glaube, dass das PPS-Signal zu Beginn jeder UTC-Sekunde hochgezogen wird.Die maximale Aktualisierungsrate von 10 Hz würde bedeuten, dass nur einige der Sätze gleichzeitig mit dem PPS-Signal auftreten können, aber jeder Satz enthält die UTC-Zeit, sodass Sie dies überprüfen können.Ich werde nach meinem Modul suchen und eine Antwort geben, wenn ich sicher sagen kann.
@Alex Ok, lass mich wissen, was du herausfindest, bitte!
Sie sollten in der Lage sein, Daten mit dem PPS-Impuls zu synchronisieren und dann die Verarbeitungslatenz des UART zu berechnen.Der rohe PPS-Impuls wird aktiviert, wenn ein Fix mit einem Algorithmus gesperrt wird, um die Reichweite (Höhe und Azimut) zu kompensieren, jedoch keine Schwankungen der Verzögerungen in der Ionosphäre.Ich glaube +/- 10us ist möglich.
Dies sollte in der Dokumentation des GPS-Empfängers auch herausgefunden werden, ob es sich um die steigende oder fallende Flanke des Impulses handelt, die Sie für diesen Empfänger interessieren, einige können Sie die Breite des Impulses ändern usw.
Okay, ich sehe, die Dokumentation ist nicht gut, keine Antworten.
Sechs antworten:
Cort Ammon
2016-08-26 04:18:02 UTC
view on stackexchange narkive permalink

Ich habe das Adafruit-GPS nicht verwendet, aber GPS-Geräte geben fast immer die Zeit aus, nachdem das PPS-Signal gesendet wurde. Sie tun dies, weil das PPS-Signal normalerweise an das Timing des vom Satelliten kommenden Datenstroms gebunden ist (oder zumindest die meisten GPS-Geräte einen Modus haben, in dem sie gebunden sind). In diesem Fall wird das PPS genau zu dem Zeitpunkt gesendet, zu dem der GPS-Satellitendatenstrom angibt, dass eine UTC-Sekunde beginnt. Danach verarbeiten sie die Daten, bestimmen, wie spät es tatsächlich war, und leiten diese Daten weiter.

Einige GPS-Geräte verfügen über andere Modi, in denen das PPS nicht genau am Anfang einer UTC-Sekunde auftritt (was hilfreich ist Wenn Sie das PPS-Signal verwenden möchten, bevor Sie einen GPS-Feed haben, aber diejenigen, die ich gesehen habe, verwenden normalerweise standardmäßig das PPS, das oben in der Sekunde auftritt.

Wenn Sie den Zeitpunkt von kennen müssen Beim PPS müssen Sie einen internen Timer zwischenspeichern, wenn das PPS-Signal auftritt, und diesen dann mit den Daten des GPS verknüpfen, wenn es eingeht. Alternativ können Sie die GPS-Daten verfolgen, und wenn das PPS aktiviert ist, können Sie davon ausgehen es ist jetzt most_recent_gps_time_utc + 1 Sekunde .

Edgar Bonet
2018-04-21 18:20:20 UTC
view on stackexchange narkive permalink

Ich habe einen Dragino Lora / GPS Shield, der auf dem MT3339-Chipsatz basiert wird auch im Adafruit Ultimate GPS-Modul verwendet. Ich habe ein paar gemacht Experimente mit diesem Schild, um genau das zu beantworten Fragen. Meine Schlussfolgerungen stimmen mit den vorherigen Antworten überein, nämlich:

  • Die ansteigende Flanke des PPS-Signals ist auf den Start einer UTC ausgerichtet zweitens (das wusste ich schon).
  • Die in einem NMEA-Satz angegebene Zeit gilt für die steigende Flanke von den PPS-Impuls, der sofort preceded diesen Satz.
Obamas, was ich getan habe:
  1. Wie vorgeschlagen habe ich sowohl das PPS- als auch das TX-Signal auf einem Oszilloskop erfasst in der Antwort von old_timer

scope trace

  1. Ich habe den seriellen Stream auf meinem Computer zeitlich festgelegt
  2. ol>

    Das Hardware-Setup war:

      verstärkte Antenne → GPS-Modul → Arduino Uno → Laptop
     
    Toulouse Der Arduino wurde nur als serielles / USB-Gateway (TX von GPS verbunden) verwendet nach TX von Arduino, das ein "nichts tun" -Programm ausführt). Der Laptop war über NTP innerhalb weniger Millisekunden von UTC synchronisiert. Ich habe das benutzt Das folgende Node.js-Programm zum Protokollieren von zeitgestempelten seriellen Daten:
      const SerialPort = demand ("Serialport");
    var port = new SerialPort ("/ dev / ttyACM0", {baudRate: 9600});
    
    // Den ersten Datenblock verwerfen.
    port.once ("Daten", function () {
    
        // Nachfolgende Chunks protokollieren.
        port.on ("Daten", Funktion (Daten) {
            Console.log (neues Datum (). toISOString (). Split (/ [TZ] /) [1],
                  JSON.stringify (String (Daten)));
        });
    });
     
      20: 16: 44.810 "\ n" <-- Ende des Bursts
    20: 16: 45.171 "$ GP" < - Beginn des Bursts, Satz "GPRMC"
    20: 16: 45.175 RMC, <--
    20: 16: 45.179 "2016" < - UTC Zeit: "201645.000",
    20: 16: 45.183 "45.0" <-- bedeutet 20: 16: 45.000 UTC
    20: 16: 45.187 00, A <--
    ...
     
    Quelltext bearbeiten] wobei die erste Spalte die UTC-Zeit mit Millisekunden-Auflösung ist. Dies zeigt, dass das Programm (oder der Treiber für die serielle Schnittstelle) nicht schnell genug ist einzelne Zeichen abfangen und mit einem Zeitstempel versehen, und es gibt eine gewisse Pufferung los.Aber es ist immer noch schnell genug für unsere Zwecke.Es zeigt auch dass der "GPRMC" -Satz, der die Zeit 20: 16: 45.000 UTC ankündigt, war gesendet um 20: 16: 45.18, geben oder nehmen Sie einige zehn Millisekunden. Beachten Sie, dass dieselbe angekündigte Zeit innerhalb derselben zweimal wiederholt wurde burst: zuerst in einem GPGGA-Satz, der um 20: 16: 45.30 Uhr übertragen wurde, dann in ein GPGLL-Satz, der um 20: 16: 45.74 übertragen wurde.
Claudio Avi Chami
2016-08-26 01:57:55 UTC
view on stackexchange narkive permalink

Es gibt keine Möglichkeit, eine Nachricht zu einem bestimmten Zeitpunkt genau auszugeben.Die Genauigkeit wird durch den Impuls angegeben. Die Nachricht vervollständigt alle erforderlichen Daten (Tag, Stunden, Minuten usw.).

Das genaue Zeitsignal ist jedoch das PPS-Signal selbst

Alex
2016-08-26 04:39:24 UTC
view on stackexchange narkive permalink

Soweit ich das beurteilen kann, wird der PPS-Pin zu Beginn jeder UTC-Sekunde 100 Millisekunden lang hochgezogen (unter der Annahme einer GPS-Sperre). Standardmäßig gibt das GPS Positionsinformationen mit 1 Hz aus, und die in den NMEA-Sätzen angegebene Zeit zeigt an, dass sie auch zu Beginn jeder UTC-Sekunde angegeben werden.

Die seriellen Daten werden nicht genau in dem Moment gesendet, in dem der PPS-Pin hoch geht, aber Sie müssen trotzdem einige Millisekunden warten, um den vollständigen Satz von NMEA-Sätzen zu erhalten. Unter Verwendung der Standardsatzeinstellungen und der Baudrate erhielt ich durchschnittlich 348 Bytes / s, was bei einer Baudrate von 9600 (9600 Bit / Sekunde) 290 Millisekunden dauern würde. Wie Cort sagt, tritt jede ansteigende Flanke des PPS-Pins bei "most_recent_gps_time_utc + 1 Sekunde" auf.

Das GPS sammelt Satellitendaten, während es einen PPS-Impuls um UTC Sekunde X sendet. Es führt die erforderlichen Berechnungen durch, gibt dann die NMEA-Sätze für die Position am zweiten X aus, daher werden die GPS-Daten für das zweite X immer einige hundert Millisekunden nach dem PPS-Impuls für das zweite X empfangen

old_timer
2016-08-26 05:22:11 UTC
view on stackexchange narkive permalink

Das Handbuch für den Empfänger auf diesem Adafruit-Board ist ziemlich schlecht. Ich habe zufällig einen Trimble basierend auf Sparkfun ausgewählt und zumindest für dieses Modul war es ein bisschen besser. In erster Linie wählen Sie für die Trimble-Flanke eine positive oder negative Flanke aus. Daher müssen Sie anhand der Flanke, die Sie verwenden, wissen, welche Flanke die richtige Flanke ist (wenn es sich um einen kurzen Impuls handelt, nicht um ein Tastverhältnis von 50%) Es ist hoffentlich offensichtlich, dass die Vorderflanke des kurzen Impulses wahrscheinlich die gewünschte Flanke ist.

Der einzige andere Hinweis, den wir aus dem Trimble-Handbuch erhalten (wieder nicht der, den Sie haben, ist):

Sobald die Zeit erfasst ist, addieren Sie beim nächsten PPS 1 zur gesamten Sekunde zu Lesen Sie die richtige Zeit ab.

Was für diese Einheit die Zeit bedeutet, die Sie von der nmea-Zeichenfolge erhalten, und beim nächsten Impuls fügen Sie eine Sekunde hinzu. Ich würde nicht annehmen, dass dies für alle gilt, aber es macht Sinn. Dies impliziert, dass für diesen Fall der Impuls mit der Saite zusammenhängt, die herauskommt oder kurz davor steht. Bis dahin ist es natürlich zu spät.

BEARBEITEN

Natürlich gibt es keinen Grund, warum Sie diese Informationen nicht selbst gefunden haben könnten. Eine andere Markeneinheit sagt, dass jede Nachricht innerhalb weniger hundert ausgegeben wird ms nach der Ausgabe des 1PPS-Impulses und zeigt die Zeit des gerade aufgetretenen Impulses an. Im Grunde genommen entspricht das Trimble eine Sekunde zu der Zeit, die Sie gerade gelesen haben, wenn Sie einen Puls erhalten. Diese andere Marke ist eine steigende Flanke, die nicht so klingt, als hätten Sie die Kontrolle darüber.

Sie müssen auch verstehen, wie Ihr Signal von Hardware empfangen wird, beispielsweise wenn sie einen Optoisolator oder eine andere Form der Isolation verwenden Es kann das Signal invertieren, so dass es in die eine Richtung aus dem Empfänger austritt, in die andere in Ihren Chip. Mit Ihrem Arduino ist es fest verdrahtet, keine Isolation, die Sie bekommen, was Sie bekommen.

Ein Oszilloskop sollte all dies deutlich machen. Legen Sie sowohl den seriellen TX als auch die 1pps auf das Oszilloskop, idealerweise sehen Sie die 1pps-Vorderkante und dann Danach sehen Sie den Ausbruch der seriellen Nachrichten. Dieses eine Bild sollte die ganze Geschichte erzählen.

Zorglub29
2020-04-08 16:30:59 UTC
view on stackexchange narkive permalink

Mein kleiner Beitrag hier. Um dies zu überprüfen, habe ich ein bisschen Code geschrieben (hier verfügbar: https://github.com/jerabaul29/interrupt_GPS_synchronization/tree/master/PPS_clock_signal), der im Grunde genommen:

  • misst die Zeit ( micros ), in der PPS mit einem Interrupt-Pin
  • ansteigt
  • Alle GPS-NMEA-Sätze werden beim Eintreffen zusammen mit der entsprechenden Empfangszeit ausgegeben ( micros erneut)
  • misst die Zeit ( micro erneut), zu der 'neue zweite' Nachrichten vom Computer eingehen.

Die Ergebnisse sind wie folgt und entsprechen den Beschreibungen der anderen Antworten:

  2020-04-08 11: 46: 39.000017
Interrupt-Pin 2 ausgelöst 2717740 abgelaufen 999792
2020-04-08 11: 46: 39.007220
Interrupt-Pin 3 ausgelöst 2720380 abgelaufen 999796
2020-04-08 11: 46: 39.011312
Verzögerung 2 bis 3 ist 2640
2020-04-08 11: 46: 39.014655
$ GPGGA, 094639.000,5956.4113, N, 01040.6931, E, 2,08,0,88,91,0, M, 40,7, M, 0000,0000 * 5D
2020-04-08 11: 46: 39.477875
micros = 3195544
2020-04-08 11: 46: 39.478235
$ GPRMC, 094639.000, A, 5956.4113, N, 01040.6931, E, 0.12.125.18.080420 ,,, D * 68
2020-04-08 11: 46: 39.555399
micros = 3271192
2020-04-08 11: 46: 39.555585
Neue Sekunde starten
 

Dies ist ein weiterer Hinweis, der ähnlich wie in den anderen Antworten lautet:

  • Zuerst steigt der Pin 2 (in meinem Fall PPS)
  • dann sehr bald nachdem der Pin 3 (der von einer anderen Karte angesteuert wird, die der 'neuen zweiten' Nachricht vom Computer folgt) steigt
  • Dann treffen die NMEA-Sätze ein.

Dies ist ein weiterer Hinweis darauf, dass man für jede gegebene Sekunde zuerst das ansteigende PPS beobachtet und dann nach einer Weile (aufgrund der Verarbeitung / endlichen seriellen Geschwindigkeit) die NMEA-Sätze für diese UTC-Sekunde empfangen werden.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...