Sincronizar los tiempos de Arduino con una diferencia de 20 ms

3

Estoy trabajando en un proyecto escolar en el que necesito sincronizar el reloj en dos Arduinos para lograr una sincronización casi perfecta. Me gustó la idea de usar Bluetooth, pero tiene ciertas desviaciones / retrasos en el tiempo. Estaba pensando en usar una conexión directa entre las dos placas al iniciar y luego desconectar cuando está sincronizado. ¿Los Arduinos mantendrán el tiempo "perfecto" durante un largo período de tiempo? ¿Esto funcionará o hay mejores soluciones?

No estoy restringido a usar un Arduino. Necesito una latencia de menos de 20 milisegundos.

    
pregunta JJC

2 respuestas

2

" NTP generalmente puede mantener el tiempo dentro de decenas de milisegundos a través de la Internet pública, y puede lograr una precisión de 1 milisegundo en redes de área local en condiciones ideales "

Por ejemplo: Arduino UdpNtpClient - aunque esto no es un cliente NTP completo y no mantiene la hora precisa continuamente (a diferencia de un cliente NTP normal)

La latencia de la red no es un problema, el jitter puede serlo. NTP requiere que los sistemas puedan comunicarse a intervalos regulares y requiere tiempo para establecerse en valores precisos.

    
respondido por el RedGrittyBrick
2

Para responder a la pregunta de precisión mientras está desconectado, un cristal típico puede tener una precisión de, por ejemplo, 50 ppm, lo que equivale a aproximadamente 4,3 segundos de error en un día o aproximadamente 180 ms por hora, por lo que podría superar su límite de 20 ms en menos de 10 minutos. Gran parte del error depende de la temperatura y la antigüedad del cristal, por lo que probablemente pueda calibrarlo para obtener resultados mucho mejores, pero si está hablando de cantidades de tiempo prolongadas y su temperatura variará un poco, puede que no sea práctico. .

Ahora que los módulos GPS son tan baratos, vale la pena considerarlos como una fuente de tiempo precisa, suponiendo que su aplicación tenga una vista relativamente clara del cielo o que pueda ejecutar una antena. Técnicamente, el sistema GPS tiene una precisión de alrededor de 20 ns, pero la mayoría de los receptores que he visto con una salida PPS externa (pulso por segundo) afirman una precisión de 1 ms o menos.

Para que funcione normalmente, querrá que un puerto UART lea la salida NMEA del GPS que incluye la fecha y la hora UTC y conecte la salida PPS a una línea de interrupción. Necesitará consultar la hoja de datos del módulo GPS específico, pero la mayoría parece que pulsa la línea PPS y la oración NMEA que sigue incluye la hora a la que se relaciona el pulso, por lo que un método que he usado es cuando ocurre la interrupción para establecer el tiempo hasta el tiempo anterior recibido más un segundo (porque los últimos datos de NMEA tienen ahora un segundo de antigüedad) y lo utilizan para calibrar el temporizador de funcionamiento libre.

    
respondido por el PeterJ

Lea otras preguntas en las etiquetas