¿Cómo sincronizar dos microcontroladores con una precisión de micro segundos?

37

Necesito sincronizar dos microcontroladores para que puedan medir la velocidad de las ondas de propagación. Las mediciones de retardo de tiempo deben tener una precisión de microsegundos (error menor que 1/2 de microsegundo).

Tengo dos microcontroladores ( ATmega328 ) que usan un cristal de 12MHz.

Ambos están equipados con transceptores Bluetooth. Los transceptores Bluetooth envían y reciben paquetes con una fluctuación de fase de ~ 15 milisegundos.

Espero sincronizar los microcontroladores utilizando los transceptores Bluetooth, o algún otro método creativo.

He intentado sincronizarlos tocándolos juntos, pero necesito que permanezcan sincronizados durante unos 10 minutos, y sus relojes se movieron demasiado rápido. Quizás si fuera posible predecir con precisión la deriva del reloj, este método funcionaría.

¿Cómo debo lograr esta sincronización?

Kevin
fuente
2
¿Podría decirnos qué está tratando de hacer y por qué las unidades deben sincronizarse? Puede ser, los detalles de su aplicación pueden señalar una solución. Como problema general, este no es muy fácil, especialmente para dispositivos inalámbricos pequeños.
Nick Alexeev
2
Es imposible lograr la sincronización confiando en el Bluetooth. 15 ms jitter es demasiado para obtener una sincronización de 0.5 us. Necesita algo con muy baja inestabilidad y latencia fija que pueda corregirse. Sería más fácil si pudieras obtener un solo reloj para ambos, y amortiguar el reloj para equilibrar los retrasos.
travisbartley
Lo siento por el retraso. El objetivo del proyecto es eliminar los cables de un diseño existente de herramientas de medición digital portátiles. El usuario quería un diseño inalámbrico, ya que estaban dañando los cables actuales. Las unidades miden la propagación de ondas en árboles en pie, que son lo suficientemente rápidas como para necesitar una sincronización de 0.5us entre ambos sensores.
Kevin
Cheap-o inalámbrico: infrarrojo. Un pulso IR podría ser suficiente para volver a sincronizar los relojes cuando se han separado un poco.
JimmyB
1
Este artículo propone un sistema Bluetooth 4.0 con sincronización ~ 10uS, con prueba experimental.
user2943160

Respuestas:

23

No quiero llover en tu desfile inalámbrico. Te has topado con un requisito difícil pero inesperado. Algo así garantiza una reevaluación de todo el diseño del sistema.

Lo primero que viene a la mente es registrar ambas unidades desde un oscilador. Tiene comunicación Bluetooth, lo que sugiere que el alcance es del orden de 10 m. Puede conectar sus unidades con un cable coaxial RG174 o una fibra óptica, que llevaría el reloj.

Segundo , hay osciladores de precisión. En orden de mayor precisión y costo.

  • TCXO (oscilador de cristal compensado por temperatura). Deriva de 1 a 3 ppm, típicamente.
  • OCXO (oscilador de cristal controlado por horno). Deriva del orden de 0.02ppm. Algunos OCXO tienen una deriva de hasta 0,0001 ppm.
  • Reloj atómico ( estándar de rubidio , por ejemplo). Menciono el reloj atómico principalmente para dar un marco de referencia. Más sobre eso aquí .

Tercero , oscilador de precisión entrenado con GPS. Cada satélite GPS tiene varios relojes atómicos a bordo. Por lo general, hay muchos satélites GPS a la vista. El GPS se usa mucho para la sincronización precisa (uso menos conocido en comparación con la navegación por satélite). La mayoría de los receptores GPS tienen una salida de 1PPS (un pulso por segundo), que proporciona una sincronización precisa de 50 ns.
Para tener una deriva de 0.5μs durante 600s (10min), su reloj (el reloj de 12MHz en su diseño actual) debe tener una deriva menor a 0.0008ppm. Pero si puede corregir el error de sincronización de vez en cuando desde una fuente externa de baja deriva, el requisito de la deriva en el reloj puede ser más relajado. Si puede corregir cada segundo, entonces su reloj podría tener una deriva de 0.5ppm.

Nick Alexeev
fuente
Una vez trabajé en un proyecto en el que teníamos que obtener este tipo de precisión en los servidores que se ejecutan en centros de datos en todo el mundo. Allí la forma más fácil era usar el GPS. Resultó que no todas las máquinas / centros de datos podían acceder al GPS, por lo que nuestra solución al final fue todo un desafío. Hacer esto con microcontroladores será aún más difícil.
NomadAlien
44
+1 para "garantiza la reevaluación de todo el diseño del sistema".
1
Dependiendo de su presupuesto, puede comprar unidades GPS que emiten una frecuencia programable (0-10 Mhz) que está alineada en fase con la señal GPS por ~ $ 150 ea. Mira el uBlox LEA-6T. Reclaman 30 nS RMS error de salida de pulso de tiempo, 99% <60 nS.
Connor Wolf
9

Los módulos GPS con salidas de 1pps están disponibles y son baratos.

No es realmente necesario disciplinar el oscilador de la CPU al GPS (por ejemplo, con un PLL). Siempre y cuando pueda "marcar la hora" de eventos externos en relación con el reloj de la CPU, es relativamente sencillo interpolar el tiempo de su onda de transmisión y recepción de eventos entre dos eventos PPS.

A menudo puede usar la combinación de un temporizador de hardware en el microcontrolador, junto con un contador de software para sus eventos de desbordamiento, para crear un contador de ciclos de CPU de ancho arbitrario. Puede ser complicado lidiar correctamente con los eventos de rollover, tanto del contador de hardware como del contador de software, pero al final, puede tener, por ejemplo, un contador de 32 bits que cuenta a la velocidad del reloj de la CPU (lo que brinda una alta resolución ) y se reinicia con un período más largo que los intervalos que está tratando de medir (por ejemplo, 429 segundos a 10 MHz).

Puede usar este contador para marcar la hora de diferentes eventos externos. Si uno de esos eventos es pulsos de 1 pps desde un receptor GPS, entonces la precisión básica a largo plazo del reloj de la CPU se convierte en una no importa. Lo único que importa es su estabilidad a corto plazo. Puede guardar las marcas de tiempo del GPS en un búfer FIFO y comparar las marcas de tiempo de otros eventos con los valores de ese búfer. Como sabe que los pulsos del GPS están exactamente separados por un segundo, puede encontrar la hora exacta de cualquier otro evento interpolando.

solPAGSSnortesolPAGSSnorte+1TyometrominorteTyometrominorte+1miXtsolPAGSSnortesolPAGSSnorte+1

Tyometrominorte+miXt-solPAGSSnortesolPAGSSnorte+1-solPAGSSnorte

Finalmente, si tiene esta configuración ejecutándose en dos sistemas separados, cada uno con su propio receptor GPS, puede comparar los tiempos calculados para varios eventos en los dos sistemas con alta precisión (generalmente en el orden de ± 100 ns), incluso si el Los relojes de la CPU de los dos sistemas no están sincronizados.

Dave Tweed
fuente
¿Podría ser un poco más explícito sobre cómo funcionaría esto? Tengo problemas para entender la explicación actual.
NickHalden
@ NickHalden: OK, listo.
Dave Tweed
Hmmm ok, ¿no depende esto de que la frecuencia del reloj de la CPU sea constante entre los dos pulsos de 1 segundo? Por ejemplo, tome un circuito oscilador de cristal particularmente horrible donde el 99% de los pulsos suceden entre 0.00 y 0.05 segundos, y luego el 1% final ocurre entre 0.05 y 1.00s. ¿No podría ese ejemplo construido patológicamente arruinar esto o todavía me falta algo?
NickHalden
Sí, eso es lo que significa "estabilidad a corto plazo".
Dave Tweed
Oh, ¿qué fue eso cuando comenté? Jaja eso es vergonzoso. De todos modos, gracias por la explicación +1 de mí.
NickHalden
8

He implementado una sincronización de reloj inalámbrico para microcontroladores antes, pero solo con una precisión de milisegundos, lo cual fue lo suficientemente bueno para la aplicación. Según mi lectura, este artículo explica bastante bien la sincronización en microsegundos: http://www.math.u-szeged.hu/tagok/mmaroti/okt/2010t/ftsp.pdf

Esencialmente, si conoce el evento de transmisión y el evento de llegada de un paquete de radio en el transmisor y el receptor respectivamente, tiene un evento observable común (suponiendo que ignore el tiempo de propagación de la onda de radio) entre los 2 sistemas que pueden ser utilizado como referencia. La otra característica clara mencionada en el documento es la estimación de inclinación de reloj usando regresión lineal.

Keene
fuente
La precisión de 1.5 µs en el escenario de salto único y la precisión promedio de 0.5 µs por salto en el caso de múltiples saltos se mostraron al proporcionar resultados experimentales. Agradable.
Li-aung Yip
1
Esto también puede ser de interés: Protocolo de sincronización de sincronización para redes de sensores
Nick Alexeev
3

Consulte el Protocolo de sincronización de reloj Bluetooth (CSP), que es una parte opcional del Perfil del dispositivo de salud (HDP). Las secciones de ese documento que son relevantes para CSP son 2.1 y 8.

Todavía no he tenido la oportunidad de probarlo yo mismo, pero, por lo que puedo decir, BlueZ (la pila oficial de protocolos Bluetooth de Linux) acaba de agregar soporte para el HDP , incluido el soporte para CSP. Entonces, aunque no parece que se ejecute en una plataforma que admita la pila BlueZ, pero tal vez el código al menos proporcionará una buena implementación de referencia.

nocnokneo
fuente