¿La señal GPS PPS corresponde al tiempo de datos?

3

Actualmente tengo un Adafruit Ultimate GPS conectado a un Arduino que emite datos de GPS (nmea oraciones) una vez por segundo. También hay un pin en el GPS que emite una señal de 1 PPS.

Mi pregunta es si el pulso del PPS debe coincidir con el momento en que llegan los datos del GPS, es decir, ¿están llegando al mismo tiempo?

¿También aparece el pulso PPS al comienzo de un segundo UTC o es aleatorio y simplemente una vez por segundo?

    
pregunta bakalolo

5 respuestas

2

No he usado el GPS de Adafruit, pero las unidades de GPS casi siempre emiten el tiempo después de que se ha enviado la señal PPS. Lo hacen porque la señal PPS está típicamente vinculada a la sincronización del flujo de datos proveniente del satélite (o al menos la mayoría de los GPS tienen un modo en el que están vinculados). En este caso, el PPS se envía en el momento exacto en que el flujo de datos del satélite GPS indica que comienza un segundo UTC. Después de eso, procesan los datos, determinan qué hora era en realidad y transmiten esos datos.

Algunos GPS tienen otros modos en los que el PPS no se produce exactamente en la parte superior de un segundo UTC (lo cual es útil si desea usar la señal PPS antes de tener una señal de GPS), pero los que he visto normalmente son los predeterminados al PPS que ocurre en la parte superior del segundo.

Si necesita saber la hora del PPS, debe bloquear un temporizador interno cuando se produce la señal PPS, luego asociar eso con los datos del GPS cuando llegue. Alternativamente, realizar un seguimiento de los datos del GPS y , cuando se afirma el PPS, puedes asumir que ahora es most_recent_gps_time_utc + 1 second .

    
respondido por el Cort Ammon
2

No hay forma de emitir un mensaje con precisión en un momento dado. La precisión viene dada por el pulso, el mensaje completa todos los datos necesarios (día, horas, minutos, etc.)

Pero la señal de tiempo precisa es la señal PPS en sí misma

    
respondido por el Claudio Avi Chami
1

Por lo que puedo decir, el pin PPS se coloca alto durante 100 milisegundos al comienzo de cada segundo UTC (suponiendo un bloqueo de GPS). De forma predeterminada, el GPS emite información de posición a 1Hz, y el tiempo dado en las oraciones NMEA indica que también se especifican al comienzo de cada segundo UTC.

Los datos en serie no se envían en el momento exacto en que el pin PPS se pone alto, pero de todos modos debe esperar unos pocos milisegundos para obtener el conjunto completo de oraciones NMEA. Usando la configuración de oraciones predeterminada y la velocidad en baudios, obtuve un promedio de 348 bytes / s, que con una velocidad en baudios de 9600 (9600 bits / segundo) tardaría 290 milisegundos en enviar. Entonces, como dice Cort, cada flanco ascendente del pin PPS se produce en "most_recent_gps_time_utc + 1 segundo".

El GPS recopila datos de satélite mientras envía un pulso PPS a la segunda X UTC. Realiza los cálculos necesarios, luego emite las sentencias NMEA para la posición en la segunda X, por lo tanto, los datos GPS para la segunda X siempre se reciben unos cientos de milisegundos después del pulso PPS para la segunda X.

    
respondido por el Alex
1

Tengo un Dragino Lora / GPS Shield, que se basa en el chipset MT3339 También se utiliza en el Módulo GPS Adafruit Ultimate. Hice un par de Experimenta con este escudo para responder a este mismo preguntas Mis conclusiones están en línea con las respuestas anteriores, a saber:

  • El borde ascendente de la señal PPS está alineado con el inicio de un UTC segundo (esto ya lo sabía).
  • El tiempo indicado en una oración NMEA es válido en el borde ascendente de el pulso PPS que inmediatamente precedió a esa oración.

Esto es lo que hice:

  1. Capturé las señales PPS y TX en un alcance, como se sugiere en la respuesta de old_timer

LatrazaamarillaeslaseñalPPS.Esaltoporunos100ms.cadasegundo.LatrazacianesTX.Estatrazamuestraquelosdatosserialessonenviadasenráfagas,comenzandocadaráfagapocodespuésdelbordedecaídadelaseñalPPS.

  • He cronometrado la secuencia en serie en mi computadora
  • La configuración del hardware fue:

    amplified antenna → GPS module → Arduino Uno → laptop
    

    El Arduino se usó solo como una puerta de enlace serie / USB (TX de GPS conectado a TX de Arduino, que ejecuta un programa de "no hacer nada"). El portatil era sincronizado con unos pocos milisegundos de UTC a través de NTP. Usé el siguiente programa Node.js para registrar datos seriales con marca de tiempo:

    const SerialPort = require("serialport");
    var port = new SerialPort("/dev/ttyACM0", { baudRate: 9600 });
    
    // Discard the first data chunk.
    port.once("data", function() {
    
        // Log subsequent chunks.
        port.on("data", function(data) {
            console.log(new Date().toISOString().split(/[TZ]/)[1],
                  JSON.stringify(String(data)));
        });
    });
    

    La salida del programa tiene este aspecto (comentarios agregados):

    20:16:44.810 "\n"     <-- end of burst
    20:16:45.171 "$GP"    <-- start of burst, "GPRMC" sentence
    20:16:45.175 "RMC,"   <-- 
    20:16:45.179 "2016"   <-- UTC time: "201645.000",
    20:16:45.183 "45.0"   <-- meaning 20:16:45.000 UTC
    20:16:45.187 "00,A"   <-- 
    ...
    

    donde la primera columna es la hora UTC, con resolución de milisegundos. Esto muestra que el programa (o el controlador del puerto serie) no es lo suficientemente rápido como para captura y marca de tiempo de caracteres individuales, y hay algunos búferes continuando Pero todavía es lo suficientemente rápido cuatro nuestros propósitos. También muestra que la oración "GPRMC" que anunciaba la hora 20: 16: 45.000 UTC era transmitido alrededor de 20: 16: 45.18, da o toma unas decenas de milisegundos. Tenga en cuenta que el mismo tiempo anunciado se repitió dos veces dentro del mismo ráfaga: primero en una oración GPGGA transmitida alrededor de 20: 16: 45.30, luego en una sentencia GPGLL transmitida alrededor de las 20: 16: 45.74.

        
    respondido por el Edgar Bonet
    0

    El manual del receptor usado en esa placa Adafruit es bastante malo. Seleccioné al azar un trimble basado en sparkfun y al menos para ese módulo fue un poco mejor. Lo primero y más importante para el trimble es seleccionar borde positivo o borde negativo, por lo que necesita saber del borde que está utilizando. Si es un pulso corto, no un ciclo de trabajo del 50%, desde un alcance es de esperar que sea obvio que el borde anterior del pulso corto es probablemente el borde que usted desea).

    La única otra pista que obtenemos del manual de trimble (de nuevo, no la que tienes) es:

    Una vez que se adquiere el tiempo, en el siguiente PPS, agregue 1 a todo el segundo para leer la hora correcta.

    Lo que para esa unidad significa el tiempo que obtienes de la cadena nmea y luego, en el siguiente pulso, agregas un segundo. No asumo que esto sea cierto para todos, pero tiene sentido. Implica que para este el pulso está relacionado con la cadena que está saliendo o cerca de hacerlo. para entonces ya es demasiado tarde, por supuesto.

    EDIT

    Por supuesto, no hay razón por la que no haya podido encontrar esta información usted mismo, otra unidad de marca dice que cada mensaje se emite dentro de unos pocos cientos de ms después de que se emita el pulso de 1PPS e indica el momento del pulso que acaba de ocurrir. Así que básicamente lo mismo que el trimble agrega un segundo a la hora que acabas de leer cuando recibes el pulso. Esta otra marca es una ventaja creciente, no suena como que tienes control sobre eso.

    También necesita comprender cómo recibe su señal el hardware, por ejemplo, si están usando un optoaislador o alguna otra forma de aislamiento, puede invertir la señal para que salga del receptor de una manera pero ingrese su chip en la otra. . Con tu arduino está cableado, no hay aislamiento, obtienes lo que obtienes.

    Un alcance debería hacer que todo esto sea obvio, coloque tanto el controlador de serie como el de 1pps en el alcance, idealmente verá el borde de ataque de 1pps y luego, después de eso, verá la ráfaga de mensajes en serie. Esa imagen debe contar toda la historia.

        
    respondido por el old_timer

    Lea otras preguntas en las etiquetas