Cuenta los ciclos del reloj del oscilador para obtener la hora

3

primera vez en stackexchange, espero que esté en el lugar correcto. Estoy trabajando en un proyecto en el que necesito marcar la hora de un evento (que se detectará a partir de un impulso eléctrico) hasta unas pocas decenas de nanosegundos y sincronizarlo con el GPS (porque habrá un par de módulos que deben sincronizarse juntos) ). Busqué una solución simple de arduino / frambuesa, pero parece que no nos irá mejor que 1-2, lejos de ~ 30 ns.

Estaba pensando en utilizar la salida de 1PPS (1Hz) del GPS para obtener una hora muy precisa y luego encontrar el intervalo de tiempo entre este pulso y el pulso del sensor al contar los ciclos de un reloj externo de alta precisión. He encontrado un reloj que me llevará a una falta de precisión de 30 ns en el PPS 1s (40MHz, 10ppb, 1ps jitter).

Ahora, el problema es ¿cómo hago para contar estos ciclos de reloj? Mi experiencia en el tema es muy cercana a 0 y también lo es la de mi compañero. Cualquier ayuda es muy apreciada.

EDITAR: Parece que esto es muy complicado para alguien que solo tiene experiencia con el microcontrolador está enviando datos a través de la serie. El producto perfecto para mi aplicación sería algo como esto: enlace Simplemente conecte los dos pulsos a los pines START y STOP y devuelve el intervalo de tiempo. La única diferencia es que necesitaría una medida de 1 s (frente a 8 ms) pero con una precisión de 10 a 50 ns (frente a 50 pps). Básicamente una medida 1000x más larga con 1000x menos precisión.

    
pregunta user126881

3 respuestas

1

Los ciclos de conteo entre pulsos PPS no son un buen enfoque. Incluso usando relojes con estabilidad de 10ppb, todavía necesitas evaluar el sesgo entre diferentes unidades.

Un buen enfoque es utilizar un receptor GPS integrado con marca de tiempo. Sin embargo, tenga en cuenta que no será fácil obtener la precisión RMS de 30 ns en condiciones de la vida real. 30ns se traducen en solo 9m de precisión de posición. Mientras que la mayoría de los receptores alcanzan esto fácilmente para la posición filtrada de kalman, verá más alteraciones en sus marcas de tiempo (donde el receptor no puede emplear un modelo de markov oculto ) a menos que también promedies varios eventos.

La recepción de múltiples rutas es su principal adversario (para unidades separadas por decenas de km y eventos en fracciones de segundo). El receptor mitigará de alguna manera las rutas múltiples, pero lo mejor que puede hacer es usar una buena antena (anillo de choque o similar) y elegir un buen lugar. Ponerlo en un trípode también puede ayudar.

Por lo general, la calibración de retardo de grupo no será necesaria para 30 ns si todos sus módulos usan una configuración similar (la longitud del cable de antena es importante, también los amplificadores o similares).

Se puede alcanzar una precisión mucho mejor si puede medir el evento en banda con las señales GPS, lo que significa a través de la interfaz RF del reveiver . Esto relacionará el tiempo directamente con las señales recibidas y ofrece la oportunidad de cancelar varias fuentes de error. Si no necesita el resultado casi en tiempo real, puede grabar las señales de GPS junto con su disparador y postprocesarlas. Esto dará una alta precisión de la posición relativa y el tiempo (GPS diferencial).

    
respondido por el Andreas
0

No estoy familiarizado con el Arduino Uno, pero probablemente tenga un módulo de contador que puede intervalos de tiempo. Pero se limitará a la frecuencia de reloj, que probablemente sea demasiado baja para lo que desea. Será mejor que cambie a un Arduino Due, seguramente tiene esta capacidad y puede funcionar a 96 MHz. Estudiar el contador / temporizador periférico (hoja de datos). Úsalo para capturar

  • el intervalo entre los pulsos 1s
  • el intervalo entre el último pulso 1s y el evento

A partir de estas cifras, puede calcular el intervalo exacto entre el último impulso y el evento.

Tenga en cuenta que la programación del periférico no es fácil. Y si su experiencia en la programación de microcontroladores es cero, primero tendrá que llegar a un nivel razonable. Eso no es algo que se aprende en una semana. Si tienes habilidades básicas de programación y un buen instructor al mes puede ser una buena idea. Y entender el temporizador viene después de eso ...

    
respondido por el Wouter van Ooijen
0

Trabajé con una empresa de I + D + i. que una vez tenía una red con requisitos similares para TDM síncrono en una red compartida. El Multiplexor en sentido ascendente midió el error de fase de un pulso estrecho de cada "remitente" para que los objetivos en sentido descendente no solo puedan engancharse en fase en el flujo de bits compartido en su propio intervalo de tiempo, sino que la fase esté sincronizada debido a la "construcción de línea" o latencia o Cualquier otro error de fase. Luego, el repetidor envió comandos de corrección de fase a cada remitente cuando fue necesario para garantizar que el punto central se recibiera en perfecta sincronización.

Para lograr algo como esto, su detector de error de fase debe tener una resolución mayor que el error requerido y la desviación en el tiempo de cualquier remitente no sincronizado debe traducirse en un intervalo de tiempo que se pueda corregir dentro del intervalo del detector de fase de +/- xx ns. El uso de la detección de fase ULF / VLF, por ejemplo, proporciona un mayor intervalo de fase, pero cuando se multiplica hasta la resolución de la frecuencia que proporciona sincronización de fase en la región 10ns requiere un reloj de ruido de fase baja muy estable o un ancho de banda de canal alto.

WWVB es muy estable < 1e-12 en f pero el ancho de banda es inadecuado para corregir mejor que unos pocos ms debido a una portadora de 60 kHz con unos pocos kHz Bw. Convierta esto a ns y el ancho de banda de su red para corregir los errores de fase debe ser 1e6 mayor en frecuencia.

Comience con las especificaciones precisas de los requisitos para cada ubicación y determine la precisión de fase que puede lograr al detectar el error de fase en ns. Dudo que Arduino pueda resolver esto sin un hardware de interfaz especializado para medir el error de fase en nanosegundos.

He diseñado muchos instrumentos Doppler diferentes desde VLF a UHF, por lo que simplemente estoy tratando en generalidades aquí.

    
respondido por el Tony EE rocketscientist

Lea otras preguntas en las etiquetas