primera vez en stackexchange, espero estar 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 pulso eléctrico) hasta unas pocas decenas de nanosegundos y sincronizarlo con GPS (porque habrá un par de esos módulos que deben sincronizarse entre sí ). Busqué una solución simple de arduino/frambuesa, pero parece que no funcionará mejor que 1-2 nosotros, lejos de ~ 30 ns.
Estaba pensando en usar la salida de 1PPS (1Hz) del GPS para obtener un tiempo muy preciso y luego encontrar el intervalo de tiempo entre este pulso y el pulso del sensor contando los ciclos de un reloj externo de alta precisión. He encontrado un reloj que me dará menos de 30 ns de inexactitud sobre 1 s PPS (40 MHz, 10 ppb, jitter de 1 ps).
Ahora, el problema es ¿cómo hago para contar estos ciclos de reloj? Mi experiencia en el tema es muy cercana a 0 y la de mi compañero también. Cualquier ayuda es muy apreciada.
EDITAR: Parece que esto es muy complicado para alguien que solo tiene experiencia con el microcontrolador y envía datos a través de la serie. El producto perfecto para mi aplicación sería algo como esto: http://www.ti.com/product/TDC7201/description Simplemente conecte los dos pulsos a los pines START y STOP y devolverá el intervalo de tiempo. La única diferencia es que necesitaría una medición de 1 s (frente a 8 ms) pero con una precisión de 10-50 ns (frente a 50 ps). Básicamente, una medición 1000 veces más larga con una precisión 1000 veces menor.
Contar ciclos entre pulsos PPS no es un buen enfoque. Incluso usando relojes con una estabilidad de 10 ppb, aún necesita evaluar el sesgo entre diferentes unidades.
El uso de un receptor GPS integrado con marca de tiempo es un buen enfoque. Sin embargo, tenga en cuenta que no será fácil obtener esta precisión RMS de 30 ns en condiciones de la vida real. 30 ns se traducen en una precisión de posición de solo 9 m. Si bien la mayoría de los receptores alcanzan esto fácilmente para la posición filtrada de kalman, verá más perturbaciones en sus marcas de tiempo (donde el receptor no puede emplear un modelo de Markov oculto ) a menos que también promedie varios eventos.
La recepción multitrayecto es su principal adversario (para unidades separadas por decenas de kilómetros y eventos en fracciones de segundo). El multipath será mitigado de alguna manera por el receptor, pero lo mejor que puedes hacer es usar una buena antena (choke ring o similar) y elegir un buen lugar. Ponerlo en un trípode también puede ayudar.
La calibración de retardo de grupo normalmente no será necesaria durante 30 ns si todos sus módulos usan una configuración similar (la longitud del cable de la antena es importante, también los amplificadores o similares).
Se puede lograr una precisión mucho mejor si puede medir el evento en banda con las señales GPS, es decir, a través de la interfaz de RF del receptor . 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 señales de GPS junto con su disparador y procesarlas posteriormente. Esto dará una alta precisión de posición relativa y tiempo (GPS diferencial).
No estoy familiarizado con Arduino Uno, pero probablemente tenga un módulo de contador que puede medir intervalos. Pero estará limitado a la frecuencia del 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. Estudie el periférico contador/temporizador (hoja de datos). Úsalo para capturar
A partir de estas cifras, puede calcular el intervalo exacto entre el último pulso y el evento.
Tenga en cuenta que programar el periférico no es fácil. Y si su experiencia en la programación de microcontroladores es nula, primero tendrá que llevarla a un nivel razonable. Eso no es algo que se aprende en una semana. Si tiene habilidades básicas de programación y un buen instructor, un mes puede ser una buena suposición. Y entender que el temporizador viene después de eso...
Trabajé con una empresa de I+D. que una vez tuvo una red con requisitos similares para TDM síncrono en una red compartida. El multiplexor ascendente midió el error de fase de un pulso angosto de cada "remitente" de modo que no solo los objetivos descendentes pudieran bloquearse en fase con el flujo de bits compartido en su propio intervalo de tiempo, sino sincronizar la fase 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 recibiera todo 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 transmisor no sincronizado debe traducirse en un intervalo de tiempo que pueda corregirse dentro del intervalo del detector de fase de +/- xx ns. El uso de la detección de fase ULF/VLF proporciona una mayor amplitud de fase, pero cuando se multiplica hasta una resolución de frecuencia que proporciona una sincronización de fase en la región de 10 ns, se requiere un reloj de ruido de fase bajo 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 la portadora de 60 kHz con unos pocos kHz Bw. Traduzca esto a ns y el ancho de banda de su red para corregir los errores de fase debe ser 1e6 más alto en frecuencia.
Comience con especificaciones precisas sobre 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 hasta UHF, por lo que aquí solo estoy tratando con generalidades.
jms
keith
usuario126881
Ale..chenski
chris stratton
keith
usuario126881
chris stratton
keith
tomnexus
usuario126881
tomnexus
tomnexus
usuario126881
Andrés