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.
Para que un sistema de digitalización detecte algo con una resolución temporal de , debe tener una frecuencia de muestreo de al menos . 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.
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.
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.
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.
usuario2233709
Inushii
pjc50
bobflux
Inushii
usuario76844
tomnexus
broma
broma
tomnexus
broma
Rata de acero inoxidable
TonyM
viejo contador de tiempo
analogsystemsrf