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

Obrotomierz cyfrowy z mikrokontrolerem Atmega8

22 Maj 2009 10:42 4988 8
  • Poziom 18  
    Chcę zbudować obrotomierz cyfrowy na bazie ATmegi8, i mam małą zagwozdkę. Zastanawiam się, w jaki sposób oprogramować zliczanie impulsów. Zakładam, że procesor ma liczyć impulsy przez 0.5s, potem podawać wynik na wyjścia albo obrabiać dalej. Sama struktura programu miałaby się przedstawiac mniej więcej tak:

    superloop:
    wait_ms(500);
    podaj na wyjścia zawartość rejestru z liczba impulsów

    obsługa przerwania:
    zwiększ liczbę impulsów o 1

    wiem, że takie rozwiązanie pewnie będzie działać dla małych częstotliwości. W samochodzie, w którym zamierzam to zamontować, są 4 cylindry, czyli dostaję 4 impulsy na obrót wału, tzn, że przy np 2000 rpm, będę miał impulsy o częstotliwości ok. 130 Hz. Gróna granica, to 460Hz (7k rpm). Czy takie rozwiązanie jakie przedstawiłem zda egzamin?

    P.S.
    Wiem, ze pewnie można ściągnąć taki gotowy program, ale chcę do tego dojść samemu jak takie coś zrobić :)
  • Poziom 33  
    Proponuje skorzystac z licznika, ustawisz odpowiednio rejestry i sam bedzie zliczac wszystko. Czestotliowsc 460Hz dla niego to bedzie tylko rozgrzewka ;)
  • Poziom 33  
    Silnik 4 - suwowy 4 - cylindrowy daje 2 impulsy zapłonowe na obrót wału. Takie częstotliwości możesz obliczać mierząc okres sygnału będzie to lepiej działało niż próbkowanie częstotliwości co 0,5s. Pozdrawiam.
  • Poziom 33  
    Witam
    Tak małe obroty mierzy się mierząc okres obrotu i przeliczając to na obroty, metoda którą proponujesz nie sprawdza się zupełnie bo jest niedokładna.
    Przewrotnie powiem że najlepiej byłoby to mierzyć analogowo jak w starych obrotomierzach, całkować by wyeliminować krótkotrwałe zmiany i wyświetlać przy pomocy ADC z Atmegi.
    Piotr
  • Poziom 27  
    PiotrPitucha napisał:
    Witam
    Tak małe obroty mierzy się mierząc okres obrotu i przeliczając to na obroty, metoda którą proponujesz nie sprawdza się zupełnie bo jest niedokładna.
    Przewrotnie powiem że najlepiej byłoby to mierzyć analogowo jak w starych obrotomierzach, całkować by wyeliminować krótkotrwałe zmiany i wyświetlać przy pomocy ADC z Atmegi.
    Piotr

    Generalnie kolega ma rację, ale ...
    Ale jeśli założyć tę prostą metodę czyli zliczanie impulsów na liczniku wewnętrznym procka i założyć że pomiar będzie dokonywany w "znośnym okresie" to wcale nie jest to złe rozwiązanie bo bardzo upraszcza samo pisanie programu. Znośny okres pojmuję jako zliczanie impulsów np. raz na 0,5 sek. Bardzo dokładne wskazania obrotomierza np. z dokładnością do 1 obrotu będą nie do zniesienia przez ludzką percepcję ponieważ zawsze wahają się one w pewnym zakresie obrotów i na miejscu dziesiątek a nawet setek obr. będzie tam gonitwa cyfr. Zliczanie impulsów na liczniku ma tą cechę że poniekąd uśrednia wynik. Ale może to co najważniejsze to kolega autor nie napisał podstawowej informacji, co to za silnik ? Pytam nie bez powodu ponieważ w większości w miarę nowoczesnych silników nawet tych co mają obecnie po 10-12 lat na wale korbowym jest zamontowany czujnik zwykle używany do pracy zapłonu elektronicznego lub kalkulatora silnika. W takim przypadku przebieg który się tam pojawia wynikiem kształtowania impulsów od zębów na kole zamachowym a tych jest w okolicach 90 albo i więcej. W takim przypadku przebieg na czujniku położenia wału korbowego jest wielokrotnie większy niż wynikałoby to z samych obrotów wału korbowego i z tego powodu pomiar poprzez zliczanie impulsów na liczniku procka będzie jak najbardziej dokładny nawet z okresem np. 0,1 s co moim zdaniem jest aż nadto wystarczający. Z drugiej strony trzeba też przyznać że czujnik położenia wału korbowego wyznacza także GMP a dzieje się to przez inny odstęp na zębach wału korbowego jednak dla liczenia obrotów można to spokojnie olać. Zatem kolego napisz co to za silnik albo lepiej zorientuj się w konstrukcji koła zamachowego i zastanów się skąd będziesz czerpał impulsy do pomiaru prędkości obrotowej. Myślę że ten właśnie czujnik będzie najlepszym źródłem tym bardziej że łatwo go przetworzyć na postać zgodną z TTL. Czujnik na wałku rozrządu będzie już w tym przypadku zdecydowanie gorszy ponieważ na 2 obr wału przypada 1 obr wałka rozrządu czyli trzeba stosować tę drugą nieco bardziej pracochłonną metodę. PZDR
    Pójde nawet krot dalej i podpowiem ci algorymt:
    1)definiujesz zmienną w której będzie rpm
    2)sygnał z czujnika puszczasz na 16 bitowy licznik procka
    3)definiujesz przerwanie Timera które w odpowiednik interale czasowym będzie przepisywać zawartość licznika do zmienne i dalej będzie ten licznik zerować.
    4)możesz także zdefiniować flagę w tym przerwaniu która będzie informowac program główny o dokonaniu przepisania aktualnej wartości pomiaru
    5)program główny nie robi nic innego jak w pętli wyświetla wartość ze zmiennej na czymś tam, np. LCD albo lepiej na LED (można użyć ew. flagi aby robić to tylko wtedy kiedy masz aktulany pomiar). LCD jest stosunkowo wolny a LED zrobi to w mgnieniu oka no i ma duże cyfry.
    Dobierając odpowiednio interwał czasowy Timera możesz dokonać swoistego przeliczenia częstotliwości impulsów na wartość obrotów i obędzie się bez czasochłonnego wykonywania operacji matematycznych typu dzielenie lub mnożenie.
  • Poziom 33  
    Witam
    Troszkę przedobrzyłeś s tym licznikiem 16 bitowym, starczy połowa 8 bitowego, wróćmy do obliczeń, autor pisze o 4 impulsach na obrót, Ty o 2 i to wydaje mi się bliższe prawdy.
    Maksymalne obroty 7000, na sekundę daje nam to koło 117 obrotów, chcesz mierzyć 0,5 sekundy i i dwa impulsy na obrót czyli 117 impulsów przy maksymalnej prędkości obrotowej.
    Rozdzielczość pomiaru wyjdzie Ci 60 obrotów na minutę bo waga jednego impulsu przy tej metodzie to 60, skakać też będzie i to dziwnie, gdyby rozdzielczość była 50 to byłoby przyjemniejsze dla oka a tak prawie nigdy nie dostaniesz całych setek na końcu...
    Oczywiście 90 impulsów na obrót zmieniałoby podejście do metody, ale i tak trzeba by uśredniać wynik by uniknąć skakania pomiaru przy metodzie zaproponowanej przez pytającego, przy zastosowaniu przerwań będzie trochę lepiej, bo początek pomiaru będzie synchronizowany z pierwszym liczonym impulsem.
    Ze względu na percepcję wyświetlałbym nie częściej niż co sekundę, ale mierzył nieustannie i uśredniał.
    Oczywiście nie polecam metody z Wait tylko przerwania, a co do prostoty programu to w Bascomie dzielenie i mnożenie jest równie proste.
    Niedawno była dyskusja na temat pomiaru obrotów, podałem tam numer Elektroniki dla Wszystkich w której opisane są pomiary częstotliwości różnymi metodami z analizą dokładności i gotowymi programami w Bascomie , o ile pamiętam jest to numer 1/2005.
    Piotr
  • Poziom 27  
    PiotrPitucha napisał:
    Witam
    Troszkę przedobrzyłeś s tym licznikiem 16 bitowym, starczy połowa 8 bitowego, wróćmy do obliczeń, autor pisze o 4 impulsach na obrót, Ty o 2 i to wydaje mi się bliższe prawdy.
    ,Piotr

    Rozdzielczość licznika należy w sumie traktować jako przybliżoną wartość bo ona zależy od czasu bramkowania tego licznika oraz od źródła impulsów (częstotliwości) które mają być zliczane. Co do ilości impulsów na obrót to dla czterocylindrowego czterosuwa to jest ich 4 na jeden obrót wału korbowego (zapłon przypada do 90stopni) przy założeniu że są one pobierane z układu zapłonowego. Typowe obroty jałowe silnika to nie mniej niż 800 obr/min i dla 4 impulsów pobranych z zapłonu daje to częstotliwość nieco ponad 50Hz. Przy maksymalnych obrotach przyjmijmy że 7000 obr/min to będzie już ponad 460Hz. Zatem jeśli przyjąć że bramkowanie będzie co 1 s to nijak 16 bitów nie starczy no chyba że będzie to mniej niż 0,5 s to wtedy można mówić o rozdzielczości 8 bitowej.
    W kwestii układów zapłonowych które obecnie występują głównie w postaci elektronicznych modułów. Najczęściej wyzwalane są one od czujnika położenia na wałku rozrządu a ten ma dwukrotnie mniejsze obroty niż wał korbowy i dodatkowo od czujnika GMP na wale korbowym (+ew. zęby na kole zamachowym o której wcześniej pisałem) W takiej sytuacji może być kłopot ze znalezieniem w prosty sposób źródła impulsów które mają być dalej zliczane a odpowiadają iskrze na świecach zapłonowych (brak klasycznego przerywacza). Więc obliczeni akolegi są jak najbardziej słuszne. Acha kolega nie pisze czy to diesel czy benzyniak ale z obrotów maksymalnych wnioskuję że jednak chodzi o benzynę :)
  • Poziom 41  
    Witam
    Nie ma sensu zliczać impulsów, żadna to rozdzielczość. Przy zegarze AVR 8MHz i zliczaniu własnego zegara, przez jeden okres impulsów z zapłonu, przy maksymalnych obrotach np. 500Hz, licznik zliczy do 16000. Przy niższych obrotach trzeba będzie dodatkowo zliczać przepełnienia licznika. Przy takich wartościach można bawić się matematyką i coś ciekawego uzyskać.
  • Poziom 12  
    Są dwa impulsy na jeden obrót wału. Tłoki w większości 4 cylindrówek chodzą parami. tzn 1-4, oraz 2 -3... Pozatym wystarczy spojrzeć na stary rozdzielacz zapłonu. Gdy palec rozdzielacza wykonuje pełen obrót to wtedy mamy 4 impulsy zapłonowe, tyle że palec kręci się o połowę wolniej niż wał silnika :D