O tempo para uma resolução de 100ns requer um temporizador rodando a 10 MHz. Muitos microcontroladores devem ser capazes de executar um timer tão rápido.
O problema surge quando você está tentando cronometrar a chegada de 6 sinais. Esses sinais estão todos no mesmo fio ou em um fio diferente?
Se eles estiverem todos no mesmo fio, é possível fazer isso com precisão em qualquer MCU com um único temporizador de 10 MHz. Ingenuamente, o código para fazer isso seria algo como isto:
wait for trigger signal
reset timer
wait for first signal
save timer value
reset timer
....
wait for sixth signal
save timer value
reset timer
O problema é que leva um tempo finito para redefinir o timer. Isso causa dois problemas:
Os tempos medidos estariam errados em alguns 100ns, dependendo da sua implementação. No entanto, eles devem estar constantemente errados. Ou seja, errado exatamente pela mesma quantidade todas as vezes. Isso significa que você pode compensar facilmente adicionando uma pequena quantidade a cada medição.
Haveria um tempo mínimo que você poderia medir. Se o pulso chegou 100ns após o anterior, você provavelmente sentirá falta. Não sei se há algo que você possa fazer sobre isso no software. Você precisará encontrar um microcontrolador capaz de lidar com vários pulsos no hardware.
Qual microcontrolador pode lidar com múltiplos pulsos no hardware? O Cypress PSoC ! Este é um microcontrolador que também contém blocos digitais configuráveis, o que significa que você pode facilmente ter 6 temporizadores separados em execução, cada um a 60MHz, oferecendo uma resolução melhor que 20ns.
Aqui está um exemplo que eu liguei rapidamente para mostrar o tipo de coisas que você poderia fazer com isso. Eu tenho 6 temporizadores separados, todos funcionando no relógio do barramento, que podem ir até 67MHz. Há um pino de gatilho que inicia todos os cronômetros em execução e outros 6 pinos, cada um dos quais causa um evento de captura no cronômetro. Um registro de status permite que seu código monitore quais cronômetros capturam um pulso. O código pode ler os valores fora dos temporizadores.