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?
microcontroller
time
Kestis
źródło
źródło
Odpowiedzi:
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.
źródło
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:
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.
źródło
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).
źródło