Odmierzanie czasu do rozdzielczości 100ns wymaga timera działającego z częstotliwością 10 MHz. Wiele mikrokontrolerów powinno być w stanie tak szybko uruchomić stoper.
Problem pojawia się, gdy próbujesz zmierzyć czas nadejścia 6 sygnałów. Czy wszystkie te sygnały są na tym samym przewodzie, czy każdy na innym przewodzie?
Jeśli wszystkie są na tym samym przewodzie, może to być możliwe, aby zrobić to dokładnie na dowolnym MCU z pojedynczym zegarem 10 MHz. Naiwnie kod do wykonania tego wyglądałby mniej więcej tak:
wait for trigger signal
reset timer
wait for first signal
save timer value
reset timer
....
wait for sixth signal
save timer value
reset timer
Problem polega na tym, że resetowanie timera zajmuje skończoną ilość czasu. Powoduje to dwa problemy:
Zmierzone czasy byłyby błędne o kilka 100ns, w zależności od implementacji. Powinny być jednak konsekwentnie błędne. IE źle za każdym razem dokładnie taką samą kwotę. Oznacza to, że możesz łatwo to zrekompensować, dodając niewielką ilość do każdego pomiaru.
Byłby minimalny czas, który możesz zmierzyć. Jeśli jakikolwiek puls dotrze 100ns po poprzednim, prawdopodobnie go przegapisz. Nie wiem, czy można coś z tym zrobić w oprogramowaniu. Musisz znaleźć mikrokontroler, który może obsługiwać wiele impulsów w sprzęcie.
Który mikrokontroler może obsługiwać wiele impulsów w sprzęcie? Cypress PSoC ! Jest to mikrokontroler, który zawiera również konfigurowalne bloki cyfrowe, co oznacza, że możesz z łatwością uruchomić 6 oddzielnych timerów, każdy przy częstotliwości 60 MHz, co daje rozdzielczość lepszą niż 20ns.
Oto przykład, który szybko podrzuciłem, aby pokazać ci, co możesz z tym zrobić. Mam 6 oddzielnych timerów, z których wszystkie biegną od zegara magistrali, które mogą wzrosnąć do 67 MHz. Istnieje pin wyzwalający, który uruchamia wszystkie uruchomione timery, oraz 6 innych pinów, z których każdy powoduje zdarzenie przechwytywania w timerze. Rejestr stanu pozwala Twojemu kodowi monitorować, które zegary przechwytują impuls. Kod może odczytać wartości z timerów.