Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C - Arduino Atmega2560 pomiar czasu między impulsami w C

24 Lip 2013 20:32 3666 3
  • Poziom 9  
    Witam. Buduję układ sterownika tempomatu do samochodu. Wykonałem już wszystko menu z wieloma funkcjami dodatkowymi poza tempomatem (mini komputer pokładowy), zbudowałem układ wykonawczy wraz z zaprogramowaniem sterowania przepustnicą elektroniczną lecz chyba zacząłem od złej strony i utknąłem na pomiarze prędkości z czujnika prędkości samochodu.

    W aucie posiadam czujnik prędkości typu Hall o 8 krokach na obrót z impulsami 5v, wszystko by było w porządku gdyby nie to że kręci się on z dość dużą prędkością.
    Zrobiłem fukncje bez wykorzystania timerów lecz nie nadąża ona z odbieraniem impulsów z czujnika i gubi się przy dość małej prędkości.

    Spędziłem wiele godzin na szukaniu konkretnych informacji w internecie lecz ciężko mi jest załapać te liczniki a szczególnie wejścia zewnętrzne do zliczania impulsów.
    Znalazłem kilka ciekawych projektów lecz w bascomie a nie zamierzam przerzucać teraz wszystkiego na C, które bardzo polubiłem.

    Nie mówcie mi od razu, że już były takie tematy bo całe dnie przeszukiwałem internet i elektrodę i niestety nie znalazłem pomocnych mi informacji żebym mógł sam to ogarnąć.

    Ogólną wiedze o licznikach mam lecz prosiłbym was o objaśnienie mi dokładnie jak to jest z wejściami na liczniki (chodzi mi o to jak zaprogramować wejście zewnętrzne z mojego czujnika żeby to wszystko działało) i przerzucaniem danych z licznika na wyświetlacz.
    Czy do pomiaru czasu między impulsami wystarczy timer 8 bitowy czy lepiej użyc 16 bitowego ?

    Układ buduję na Arduino Mega 2560.
    Z góry serdecznie dziękuję za pomoc i pozdrawiam.
  • Moderator Mikrokontrolery Projektowanie
    Określ częstotliwość tych impulsów, lub ich szerokość. Jeśli trwają milisekundy, to najlepiej wykorzystać timer w trybie przechwytywania impulsów zewnętrznych - piny ICP i rejestr ICR. Jeśli są krótkie (setki ns lub us) to lepiej tymi impulscami taktować wejście licznikowe timera, a drugi timer wykorzystać do odmierzania odcinka czasu wzorcowego. Ze względu na wymaganą rozdzielczość pomiaru zapewne niezbędne jest wyorzystanie timera 16-bitowego.
  • Poziom 9  
    Nie mam jak określić dokladnie częstotliwości, ale mniej więcej z przełożenia czujnika w skrzyni myślę że od 0 do 4000 impulsów na sekundę ( tak orientacyjnie),
    szerokość impulsu to 1/16 obrotu czujnika.

    Znalazlem dziś jedyny projekt, z którego mógłbym wziąć podstawę, ponieważ jest to obrotomierz czyli też zliczanie impulsów i podobno działa na takiej zasadzie jak ja oczekuję, lecz jest jeden mały problem z tym kodem:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Program był pisany pod Atmege8 więc u mnie nie działa kilka poleceń np wywala mi errory na funkcjach TIMSK i TIMSK &= ~( (1<<TICIE1)
    Przeglądałem datasherty swojej atmegi i atmegi8 lecz nie ogarnąłem jak naprawić ten błąd. Proszę o pomoc i o ocene kodu. Dodam że u mnie będzie większa częstotliwośc impulsów niż w obrotomierzu.
  • Moderator Mikrokontrolery Projektowanie
    Kwestia nazewnictwa rejestrów.
    Przykład prostego miernika częstotliwości/okresu masz w darmowych przykładach do mojej książki (w stopce link). Przejrzyj, może ci pomogą.
    Najprościej będzie zapuścić 16-bitowy timer na max częstotliwość, badany sygnał podłączyć pod wejście ICP timera i mierzyć jego okres.