Bardzo dokładny pomiar czasu

13

Zamierzam zmierzyć bardzo krótkie czasy tak dokładnie, jak to możliwe. Urządzenie otrzyma pierwszy impuls, aw ciągu 150 mikrosekund sześć kolejnych, każdy na osobnych przewodach. Czas między pierwszym sygnałem a każdym z sześciu pozostałych sygnałów musi być mierzony tak dokładnie, jak to możliwe. Dokładność powinna wynosić co najmniej 100 nanosekund, ale im więcej, tym lepiej.

Który mikrokontroler byłby do tego najlepszy? Znalazłem to . Wydaje się, że mają zegar z okresem 4 nanosekund. Byłoby dla mnie wystarczająco dokładne.

Czy lepszy byłby jakiś inny mikrokontroler? Czy można to zrobić za pomocą AVR?

Kestis
źródło
2
Myślę, że mówisz o precyzji, a nie o dokładności. Co jeśli masz precyzję nanosekundową, ale zegar bazowy jest wyłączony o 10%? Wówczas pomiary nie są dokładne.
Kaz
Jak daleko od siebie jest sześć impulsów? Czy przybywają na podstawie wspólnego wkładu, czy na sześciu osobnych?
starblue
Mają wszystkie swoje wkłady. Pulsy mogą czasami przychodzić jednocześnie, ale zwykle przychodzą o różnych porach.
Kestis

Odpowiedzi:

8

Szybkość mikrokontrolera nie zawsze jest czynnikiem ograniczającym. MSP430 może być odpowiednim rozwiązaniem, nie dlatego, że działa tylko do 25 MHz, ale dlatego, że kilka urządzeń MSP430 ma urządzenie peryferyjne Timer D, które umożliwia okres do 4ns (256 MHz). Jest to szybsze niż prawie wszystkie mikrokontrolery. Nawet STM32 w najnowszych wersjach (F4) może pracować tylko z częstotliwością 180 MHz.

Timer D jest dostępny na urządzeniach MSP430F51x1 i MSP43051x2, takich jak MSP430F5131.

Jednak to rozwiązuje jedynie możliwość uchwycenia czasu. Najważniejsze pytanie dotyczy tego, co z tym zrobisz, ponieważ samo przetwarzanie będzie wolniejsze. Możesz próbkować czas między dwoma impulsami, ale nie będziesz w stanie wykonać żadnego przetwarzania między nimi, jeśli o to ci chodzi.

Gustavo Litovsky
źródło
Mój zły, nie do końca RTFM MSP430, głównie dlatego, że strona internetowa TI wywołuje konwulsje nienawiści pavlovian.
John U
@JohnU: Nigdy nie miałem takiej reakcji. Prawda jest taka, że ​​OP nie określił wiele informacji o tym, co robi, więc trudno jest podać właściwą sugestię.
Gustavo Litovsky
Przetwarzanie nie stanowi problemu. Obliczenia mają wiele sekund, gdy czasy zostaną zarejestrowane, a algorytmy nie są nawet skomplikowane. Czy jeden MSP430 może obsłużyć wszystkie sześć impulsów, czy może ich być więcej?
Kestis
@Kestis: Timer D zawiera 6 rejestrów porównujących przechwytywanie, a niektóre MSP430 mają więcej niż jeden moduł Timera D, więc powinien pasować do twoich wymagań.
Gustavo Litovsky
4

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:

  1. 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.

  2. 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.

6 timerów PSoC Cypress

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.

Rocketmagnet
źródło
To PSoC wydaje się bardzo interesujące. Wolałbym jednak AVR lub MSP430, ponieważ są one znacznie częstsze.
Kestis
0

Poprawiona odpowiedź : szybki cyfrowy oscyloskop pamięciowy lub ewentualnie licznik częstotliwości.

Stara odpowiedź :

Mówiąc najprościej, „najszybszy mikrokontroler, jaki można znaleźć”, z uwagi na fakt, że im szybszy zegar / próbkowanie, tym dokładniejsza może być. MSP430 nie są szybkimi urządzeniami.

STM32 są 32-bitowe i będą działały szybciej, a ponadto mają podobnie tanie dostępne płyty deweloperskie i narzędzia, ale nawet to jest dość wolne w porównaniu z niektórymi z bardziej wydajnych dostępnych urządzeń (Raspberry Pi @ 800MHz - 1GHz (Overclocked)). Ogólnie jednak, im szybciej jedziesz, tym bardziej skomplikowany jest procesor, więc może wystąpić kompromis w krzywej uczenia się.

Dodano: Benji ma rację, możesz też potrzebować dokładnego oscylatora dla mikro, jeśli chcesz bardzo dokładnych pomiarów (tak naprawdę nie określasz granic błędu w pytaniu).

John U
źródło
Zasadniczo istnieją inne rodzaje timerów, inne niż mikrokontroler próbkujący sygnał w pętli.
Nick Alexeev
Pomogłoby to, gdyby mikrokontroler był wyposażony w bardzo dokładny zewnętrzny oscylator / kryształ.
BenjiWiebe
Oboje macie rację, edytowałem.
John U