La sincronización a una resolución de 100ns requiere un temporizador que funcione a 10MHz. Muchos microcontroladores deben ser capaces de ejecutar un temporizador tan rápido.
El problema surge cuando intentas cronometrar la llegada de 6 señales. ¿Todas estas señales están en el mismo cable, o cada una en un cable diferente?
Si están todos en el mismo cable, entonces es posible hacerlo con precisión en cualquier MCU con un solo temporizador de 10 MHz. De manera ingenua, el código para hacer esto se vería así:
wait for trigger signal
reset timer
wait for first signal
save timer value
reset timer
....
wait for sixth signal
save timer value
reset timer
El problema es que lleva un tiempo limitado para restablecer el temporizador. Esto causa dos problemas:
-
Los tiempos medidos serían incorrectos por unos pocos 100 ns, dependiendo de su implementación. Sin embargo, deberían estar constantemente equivocados. ES DECIR. mal por exactamente la misma cantidad cada vez. Esto significa que puede compensarlo fácilmente agregando una pequeña cantidad a cada medición.
-
Habría un tiempo mínimo que podrías medir. Si el pulso llegó 100 ns después del anterior, entonces probablemente lo extrañará. No sé si hay algo que puedas hacer al respecto en el software. Tendrá que encontrar un microcontrolador que pueda manejar múltiples pulsos en hardware.
¿Qué microcontrolador puede manejar múltiples pulsos en hardware? El Cypress PSoC ! Este es un microcontrolador que también contiene bloques digitales configurables, lo que significa que puede tener fácilmente 6 temporizadores separados funcionando, cada uno a 60MHz, lo que le brinda una resolución mejor que 20 ns.
Este es un ejemplo que hice rápidamente para mostrarte el tipo de cosas que podrías hacer con él. Tengo 6 temporizadores separados, todos funcionando fuera del reloj del bus, que pueden llegar hasta 67MHz. Hay un pin de activación que inicia la ejecución de todos los temporizadores y otros 6 pines, cada uno de los cuales provoca un evento de captura en el temporizador. Un registro de estado le permite a su código monitorear qué temporizadores capturan el pulso. El código puede leer los valores de los temporizadores.