Witam szanownych kolegów.
Chciał bym poruszyć po raz n-ty problem obrotomierza samochodowego. Jednakże pozwoliłem sobie stworzyć do tego osobny temat ze względu na odmienność konstrukcji tegoż chyba najstarszego przyrządu pomiarowego. Mam nadzieję, iż moderatorzy będą tego samego zdania i nie usuną tematu.
Chciał bym samodzielnie wykonać obrotomierz samochodowy, który wskazywał zmierzoną prędkość obrotową przy pomocy wskazówki, jak to jest zrobione w "prawdziwych" samochodach. Mój do takowych nie należy ze względu na swój wiek.
Wg informacji z różnych czasopism motoryzacyjnych najbardziej przyjemne dla użytkownika są obrotomierze w których wskazówka jest wychylana silnikiem krokowym. Takie obrotomierze dają pomiar najbardziej stabilny, wskazówka nie drga, jest nieczuła na wibracje samochodu i t.d. Cóż, teraz kolej na obliczenia.
W moim aucie jest benzynowy silnik z rozrządem gaźnikowym. Impulsy pomiarowe postanowiłem uzyskiwać z cewki zapłonowej. Z dyskusji jakie są na elektrodzie dowiedziałem się, iż takie silniki dają 4 impulsy na jeden obrót wału napędowego silnika. Postanowiłem, iż skala pomiarowa mojego obrotomierza będzie do 9000 obr/min. Zapewne zakres ten z pewnością wystarczy nie tylko mi ale i wielu innym kolegom z elektrody. Natomiast rozdzielczość wybrałem co 100 obr/min. Z taką rozdzielczością wskazywał obrotomierz w nowym aucie mojego znajomego. Być może, iż to jest zbyt dokładnie, ale nic nie stoi na przeszkodzie by to zmienić programowo.
Czyli 9000obr/min -> daje 150 obr/sek -> daje 600Hz przy założeniu 4 impulsów na obrót wału. Jeżeli teraz weźmiemy Atmega8 i zrobimy przerwanie co 0.3 sekundy do otrzymamy 180 impulsów przy 9000 obr/min. Czyli spokojnie możemy wykorzystać do tego timer0 pozwalający zliczyć maksymalnie 256 impulsów.
Silniki krokowe, jakie są dostępne na allegro mają 200 kroków na jeden obrót, czyli 1.8 stopnia na jeden krok. Jeżeli mamy pomiar do 9000 obr/min z rozdzielczością 100 obr/min to daje nam to dokładnie 90 kroków do wykonania przez silnik aby wskazać 9000 obr/min od 0 obr/min. Przy 1.8 stopni/krok i 90 krokach daje nam to wychylenie 162 stopni. Na kolana nie powala, ale może być.
Sprawdziłem eksperymentalnie, ze posiadany przeze mnie silnik krokowy potrafi obracać się płynnie przy szybkości przełączania kroków nie częściej niż co 3ms. Czyli żeby wykonać 90 kroków do pełnego wychylenia potrzebuje 270ms. Przerwanie mamy co 300ms, czyli powinno działać.
No ale jak zrobiłem to wszystko na Atmega8 obrotomierz nie działa. Jak podam sygnał z generatora funkcyjnego (przebieg prostokątny, amplituda 5V, częstotliwość płynnie zmieniam w przedziale 35Hz - 600Hz) to silnik zaczyna drgać i nie reaguje na zmianę ilości odczytywanych impulsów. Chociaż jak zrobiłem pomiar na LCD to wszystko działa. Wyświetlacza pokazuje prawidłowy odczyt impulsów i spokojnie daje sie przeskalować na obr/min. Przerwanie co 0.3 sekundy zwraca ilość zmierzonych impulsów. Program główny przelicza te impulsy na ilość kroków do wykonania przez silnik krokowy aby wskazówka zatrzymała się na właściwym odczycie obr/min i następnie procesor wykonuje potrzebną ilość kroków silnikiem.
Zanim wkleję kod chciał bym usłyszeć wasze opinie odnośnie moich rozważań teoretycznych. Pisze w C, kod nie jest skomplikowany, walczę już z tym problemem jakiś czas i nie wydaje mi sie, by były jakieś błędy w kodzie. Tym nie mniej wszystko jest możliwe.
Stawiam raczej na to że gdzieś mam błąd merytoryczny i dlatego nie ma co się dziwić że obrotomierz nie działa.
Może założenia są złe? Może ktoś już robił taki obrotomierz?
Chciał bym poruszyć po raz n-ty problem obrotomierza samochodowego. Jednakże pozwoliłem sobie stworzyć do tego osobny temat ze względu na odmienność konstrukcji tegoż chyba najstarszego przyrządu pomiarowego. Mam nadzieję, iż moderatorzy będą tego samego zdania i nie usuną tematu.
Chciał bym samodzielnie wykonać obrotomierz samochodowy, który wskazywał zmierzoną prędkość obrotową przy pomocy wskazówki, jak to jest zrobione w "prawdziwych" samochodach. Mój do takowych nie należy ze względu na swój wiek.
Wg informacji z różnych czasopism motoryzacyjnych najbardziej przyjemne dla użytkownika są obrotomierze w których wskazówka jest wychylana silnikiem krokowym. Takie obrotomierze dają pomiar najbardziej stabilny, wskazówka nie drga, jest nieczuła na wibracje samochodu i t.d. Cóż, teraz kolej na obliczenia.
W moim aucie jest benzynowy silnik z rozrządem gaźnikowym. Impulsy pomiarowe postanowiłem uzyskiwać z cewki zapłonowej. Z dyskusji jakie są na elektrodzie dowiedziałem się, iż takie silniki dają 4 impulsy na jeden obrót wału napędowego silnika. Postanowiłem, iż skala pomiarowa mojego obrotomierza będzie do 9000 obr/min. Zapewne zakres ten z pewnością wystarczy nie tylko mi ale i wielu innym kolegom z elektrody. Natomiast rozdzielczość wybrałem co 100 obr/min. Z taką rozdzielczością wskazywał obrotomierz w nowym aucie mojego znajomego. Być może, iż to jest zbyt dokładnie, ale nic nie stoi na przeszkodzie by to zmienić programowo.
Czyli 9000obr/min -> daje 150 obr/sek -> daje 600Hz przy założeniu 4 impulsów na obrót wału. Jeżeli teraz weźmiemy Atmega8 i zrobimy przerwanie co 0.3 sekundy do otrzymamy 180 impulsów przy 9000 obr/min. Czyli spokojnie możemy wykorzystać do tego timer0 pozwalający zliczyć maksymalnie 256 impulsów.
Silniki krokowe, jakie są dostępne na allegro mają 200 kroków na jeden obrót, czyli 1.8 stopnia na jeden krok. Jeżeli mamy pomiar do 9000 obr/min z rozdzielczością 100 obr/min to daje nam to dokładnie 90 kroków do wykonania przez silnik aby wskazać 9000 obr/min od 0 obr/min. Przy 1.8 stopni/krok i 90 krokach daje nam to wychylenie 162 stopni. Na kolana nie powala, ale może być.
Sprawdziłem eksperymentalnie, ze posiadany przeze mnie silnik krokowy potrafi obracać się płynnie przy szybkości przełączania kroków nie częściej niż co 3ms. Czyli żeby wykonać 90 kroków do pełnego wychylenia potrzebuje 270ms. Przerwanie mamy co 300ms, czyli powinno działać.
No ale jak zrobiłem to wszystko na Atmega8 obrotomierz nie działa. Jak podam sygnał z generatora funkcyjnego (przebieg prostokątny, amplituda 5V, częstotliwość płynnie zmieniam w przedziale 35Hz - 600Hz) to silnik zaczyna drgać i nie reaguje na zmianę ilości odczytywanych impulsów. Chociaż jak zrobiłem pomiar na LCD to wszystko działa. Wyświetlacza pokazuje prawidłowy odczyt impulsów i spokojnie daje sie przeskalować na obr/min. Przerwanie co 0.3 sekundy zwraca ilość zmierzonych impulsów. Program główny przelicza te impulsy na ilość kroków do wykonania przez silnik krokowy aby wskazówka zatrzymała się na właściwym odczycie obr/min i następnie procesor wykonuje potrzebną ilość kroków silnikiem.
Zanim wkleję kod chciał bym usłyszeć wasze opinie odnośnie moich rozważań teoretycznych. Pisze w C, kod nie jest skomplikowany, walczę już z tym problemem jakiś czas i nie wydaje mi sie, by były jakieś błędy w kodzie. Tym nie mniej wszystko jest możliwe.
Stawiam raczej na to że gdzieś mam błąd merytoryczny i dlatego nie ma co się dziwić że obrotomierz nie działa.
Może założenia są złe? Może ktoś już robił taki obrotomierz?
