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

5

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

Desafortunadamente, la MCU de 64MHz tiene un ciclo de reloj de 15.625ns, lo que significa que la interrupción podría ser reconocida hasta 15.625ns más tarde (asumiendo una latencia de interrupción de cero por ahora). Tenga en cuenta que no es necesario que se actúe sobre la interrupción de inmediato, solo necesito saber a qué hora llegó.

¿Hay alguna forma de que use circuitos externos para mejorar mi precisión? He considerado usar un temporizador externo de nanosegundos para medir el desplazamiento y enviarlo a la MCU cada vez que se desencadena la interrupción. Desafortunadamente, me cuesta mucho encontrar temporizadores que puedan funcionar a esta velocidad.

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

    
pregunta inushii

2 respuestas

2

Consideraciones teóricas

Para que un sistema de digitalización detecte algo con una resolución temporal de \ $ \ Delta t \ $, debe tener una frecuencia de muestreo de al menos \ $ \ frac2 {\ Delta t} \ $. Eso 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 indique de alguna manera la hora en que ocurrió el borde de la señal, necesitará un reloj de muestreo (o, más precisamente, relacionado con su aplicación: un contador que se puede fijar) La señal externa) se ejecuta al menos a 666,67 MHz.

consideraciones prácticas

Nada menos que eso hará, 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 el tiempo que pasó.

Entonces, lo que propondría es en realidad el enfoque recomendado 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, usas el impulso y la electrónica analógica muy rápida, por ejemplo. patada de por ejemplo una caída de voltaje exponencial que puede observar y extrapolar periódicamente a partir de la tasa de caída observada en el momento en que se inició. De esa manera, en realidad estaría cambiando la resolución ADC (pin de interrupción: "1 bit ADC", si así lo desea) para la resolución de tiempos. Aún necesitarías un ADC bastante bueno y una velocidad de CPU que lo acompañe.

Al final, su problema es difícil, ya que detectar los pulsos de precisión de nanosegundos es un problema difícil , incluso desde un punto de vista de diseño de PCB (la calidad de su pulso es una función del ancho de banda de señal que puede transportar en la traza de su PCB, 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 el convertidor analógico de tiempo a función mencionado anteriormente, un ADC moderadamente rápido y un FPGA moderadamente rápido para tratar los datos de ADC.

tachar eso.

Acabo de leer sobre conversores de tiempo a digital. Maxim (por ejemplo, MAX35102) y TI ofrecen tales (otras compañías también).

En cuanto a esto, hay diferentes enfoques, pero el TI TDC7200, por ejemplo, utiliza un oscilador en anillo interno (que se ejecuta a velocidades bastante altas, lo que le proporciona alta resolución) para ejecutar un contador.

El oscilador en 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.

    
respondido por el Marcus Müller
1

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

Una opción es iniciar un oscilador y batirlo contra una referencia oscilador medida del tiempo vernier . Esto requiere un oscilador. que se puede iniciar en una fase conocida (normalmente, una línea de demora y una inversión puerta), 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 sincronización aproximada proporcionada por temporización de contador convencional.

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

    
respondido por el Whit3rd

Lea otras preguntas en las etiquetas