Precisión de interrupción de nanosegundos en un microprocesador de 64 MHz

Actualmente estoy diseñando una PCB con una MCU bluetooth nRF52832 de 64MHz. Tengo una interrupción conectada a esta MCU que debe detectarse con una precisión de 1 a 3 nanosegundos.

Desafortunadamente, la MCU de 64 MHz tiene un ciclo de reloj de 15,625 ns, lo que significa que la interrupción podría reconocerse hasta 15,625 ns de retraso (suponiendo que la latencia de interrupción sea cero por ahora). Tenga en cuenta que no es necesario actuar sobre la interrupción de inmediato, solo necesito saber a qué hora llegó.

¿Hay alguna forma de que use un circuito externo para mejorar mi precisión? Consideré usar un temporizador de nanosegundos externo para medir el desplazamiento y enviarlo a la MCU cada vez que se activa la interrupción. Desafortunadamente, estoy teniendo dificultades para encontrar temporizadores que puedan funcionar a esta velocidad.

Soy capaz de cambiar la MCU a un procesador más rápido, sin embargo, nada superior a ~ 180 MHz, que aún serían 5,56 ns por ciclo de reloj. Por esta razón, una solución externa creativa sería ideal.

Probablemente debería considerar usar un FPGA con un reloj rápido.
Gracias, pero desafortunadamente estoy limitado en tamaño y presupuesto. Espero que haya una solución alternativa antes de decidir usar un FPGA.
¿Precisión de 1 ns en comparación con qué referencia? ¿Es esta una situación para un convertidor de tiempo a digital? ¿Cuál es la fuente de la señal y su tiempo de subida?
+1 para el convertidor de tiempo a digital, pero no será barato. Saber más sobre el problema real a resolver ayudaría.
Mis disculpas, por 'precisión' arriba, creo que quise decir precisión. Siempre que la medición de ns sea consistente, no tiene que sincronizarse con ninguna referencia específica. Esta interrupción proviene de un módulo DWM1000, un módulo de banda ultraancha que se utiliza para la localización en interiores. Este módulo está controlado por nuestra MCU nRF52. El flujo es el siguiente: 1) DWM1000 envía una interrupción 2) MCU ordena a DWM1000 que responda con retraso = [ns offset + clock_cycles*15.625ns later] 3) El valor de retraso calculado anteriormente se usa en cálculos posteriores. Este valor de retraso debe ser preciso para nuestros cálculos.
FPGA definitivamente. Pero no solo fpga, requeriría algo más. No estoy seguro de cómo lo hacen realmente, mediría la fase de la señal contra el reloj FPGA.
Aquí hay un tdc con resolución de 250 ps, ​​parece económico.
@tomnexus Solo como una nota para usted y el OP: resolución exactitud.
Mmm. Nunca he trabajado a estas velocidades. Pero, ¿ha considerado una fuente de corriente que alimenta un capacitor, reiniciando el capacitor en cada flanco de reloj de 64 MHz y usando una muestra para el voltaje analógico en el capacitor cuando llega el evento para congelar el valor para una lectura posterior con un ADC? ¿Algo así como unas pocas decenas de mA en un límite de 220nF? Sin embargo, tal vez todo lo que estoy haciendo es barrer los problemas.
@jonk, por supuesto, pero hojee la hoja de datos, no está mal, y hay otros con una resolución de 40 ps. Para una sincronización precisa, OP necesitará un reloj de referencia de baja fluctuación, definitivamente no el reloj incorporado del microprocesador.
@tomnexus Me había perdido algunos de los comentarios debido a la forma en que este sitio "recorta" los comentarios a menos que los fuerce. El OP había escrito que no había necesidad de precisión. Solo bajo costo. Por cierto, la hoja de datos vinculada a la página que mencionas me da un ERROR en lugar de la hoja de datos.
TDC-GP1 - no recomendado para nuevo diseño
No puedo dejar de pensar que los errores e imprecisiones acumulados en otras partes de su sistema, como el seguimiento de PCB y la capacitancia del conector, por nombrar solo dos, superarán los beneficios de la parte de 1..3 ns.
e incluso si encontró un mcu mucho más rápido, no hay razón para suponer que los periféricos funcionan tan rápido, no necesitan igualar la velocidad de la CPU, por lo que algunos tienen una velocidad limitada a una fracción de la velocidad del sistema/CPU. Lea las hojas de datos para obtener más información (suponiendo que pueda cambiar piezas).
Algunos PIC proporcionan periféricos de medición de tiempo-voltaje.

Respuestas (2)

Consideraciones teóricas

Para que un sistema de digitalización detecte algo con una resolución temporal de Δ t , debe tener una frecuencia de muestreo de al menos 2 Δ t . Ese es un corolario del teorema de muestreo de Nyquist.

En su caso, esto significa que cualquiera que sea el pin que pueda causar una interrupción que de alguna manera anote la hora en que ocurrió el borde de la señal, necesitaría un reloj de muestreo (o, más precisamente, relacionado con su aplicación: un contador que pueda engancharse en la señal externa ) funcionando al menos a 666,67 MHz.

consideraciones prácticas

Nada menos que eso funcionará, a menos que pueda construir un sistema externo que de alguna manera convierta el evento en algo más lento que luego se pueda observar para calcular la hora en que sucedió.

Entonces, lo que propongo es en realidad el enfoque que le recomendaron en los comentarios, es decir, usar un contador de alta velocidad, por ejemplo, dentro de un FPGA para capturar el tiempo y leerlo cuando esté listo con su MCU.

O bien, utiliza el impulso y la electrónica analógica muy rápida para, por ejemplo, iniciar, por ejemplo, una caída de voltaje exponencial que puede observar periódicamente y extrapolar a partir de la tasa de caída observada el punto en el tiempo en que comenzó. De esa manera, en realidad estaría intercambiando la resolución de ADC (pin de interrupción: "ADC de 1 bit", si lo desea) por resolución de tiempo. Todavía necesitaría un ADC bastante bueno y la velocidad de la CPU que lo acompaña.

Al final, su problema es difícil, ya que detectar pulsos de precisión de nanosegundos es un problema difícil , incluso desde el punto de vista del diseño de PCB (la calidad del borde de su pulso es una función del ancho de banda de la señal que puede transportar en su PCB traza – y para una señal con 1/(1ns) = 1 GHz de frecuencia fundamental, esto ya no es trivial).

Probablemente necesitará un FPGA muy rápido, o un convertidor analógico de tiempo a función mencionado anteriormente, un ADC moderadamente rápido y un FPGA moderadamente rápido para manejar los datos del ADC.

rasca eso.

Acabo de leer sobre convertidores de tiempo a digital. Maxim (p. ej., MAX35102) y TI ofrecen este tipo de ofertas (otra empresa, sin duda, también).

Por lo que leí, hay diferentes enfoques, pero la TI TDC7200, por ejemplo, usa un oscilador de anillo interno (que funciona a velocidades bastante altas, lo que le brinda una alta resolución) para ejecutar un contador.

El oscilador de anillo está disciplinado contra un reloj externo, por lo que deberá asegurarse de que la calidad de ese reloj satisfaga sus necesidades de precisión.

Yo personalmente intentaría abusar de un deserializador FPGA. Es posible obtener FPGA de gama relativamente baja que tengan serializadores capaces de > 1 Gbps, que deberían proporcionar al menos una resolución de 1 ns. Sin embargo, puede ser necesario hacer alguna calibración externa para obtener el retraso absoluto.
¡Gracias a ti ya todos los que recomendaron un TDC! Tomó algo de investigación encontrar uno con un rango de medición lo suficientemente corto, pero afortunadamente TI fabrica el TDC7201 que baja a 0.25ns y es similar a lo que sugirió. ¡Creo que le daré una oportunidad a esto!

Es posible generar tiempos de alta precisión con una variedad de trucos; sin embargo, es poco probable que la acción de una MCU en la interrupción sea de tal precisión.

Una opción es iniciar un oscilador y batirlo contra una medición de tiempo vernier de oscilador de referencia . Esto requiere un oscilador que pueda iniciarse en una fase conocida (por lo general, una línea de retardo y una puerta inversora) y una referencia de tiempo, con un detector de fase. El detector de fase proporciona una corrección de ajuste fino para aplicar a la temporización aproximada que ofrece la temporización de contador convencional.

El temporizador vernier requiere mucho tiempo, por lo que un reloj modesto (20 MHz) puede continuar contando hasta cien mientras se completa la medición de fase. Por lo tanto, puede llevar varios microsegundos completar una determinación de tiempo de 1 ns.