Luego de de una larga compilación de datos hemos podido solucionar este asunto que pueden tener algunos los lectores. Te dejamos la respuesta y deseamos serte de gran ayuda.
Solución:
No he usado el GPS de Adafruit, pero las unidades de GPS casi siempre muestran la hora. después la señal PPS ha sido enviada. Hacen esto porque la señal PPS generalmente está vinculada a la sincronización del flujo de datos que proviene 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 exactamente en el momento en que el flujo de datos del satélite GPS dice que comienza un segundo UTC. Después de eso, procesan los datos, determinan qué hora era realmente 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 utilizar la señal PPS antes de tener una fuente de GPS), pero los que he visto normalmente tienen el PPS predeterminado. que ocurre en la parte superior de la segunda.
Si necesita saber la hora del PPS, debe bloquear un temporizador interno cuando se produce la señal PPS, luego asociarlo con los datos del GPS cuando llegue. Alternativamente, realice un seguimiento de los datos del GPS y, cuando el PPS se afirma, puede suponer que ahora es most_recent_gps_time_utc + 1 second
.
Tengo un Dragino Lora/GPS Shield, que se basa en el conjunto de chips MT3339 que también se usa en el módulo GPS Adafruit Ultimate. Hice un par de experimentos con este escudo para responder a estas mismas preguntas. Mis conclusiones están en línea con las respuestas anteriores, a saber:
- El flanco ascendente de la señal PPS está alineado con el inicio de un segundo UTC (esto ya lo sabía).
- El tiempo indicado en una sentencia NMEA es válido en el flanco ascendente del pulso PPS que inmediatamente precedido esa oración.
Aquí esta lo que hice:
- Capturé las señales PPS y TX en un alcance, como se sugiere en la respuesta de old_timer
El trazo amarillo es la señal PPS. Es alto durante unos 100 ms cada segundo. El trazo cian es TX. Este seguimiento muestra que los datos en serie se envían en ráfagas, y cada ráfaga comienza poco después del flanco descendente de la señal PPS.
- Cronometré la transmisión 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”). La computadora portátil se sincronizó dentro de 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 se ve así (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 para capturar y marcar la hora de caracteres individuales, y hay algo de almacenamiento en búfer. Pero todavía es lo suficientemente rápido para nuestros propósitos. También muestra que la frase "GPRMC" que anuncia la hora 20:16:45.000 UTC se transmitió alrededor de las 20:16:45.18, más o menos unas pocas decenas de milisegundos. Tenga en cuenta que el mismo tiempo anunciado se repitió dos veces dentro de la misma ráfaga: primero en una oración GPGGA transmitida alrededor de las 20:16:45.30, luego en una oración GPGLL transmitida alrededor de las 20:16:45.74.
No hay forma de generar 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 propia señal PPS
Recuerda que tienes permiso de agregar una reseña si te fue útil.