Cześć

Ostatnio pracuje nad robotem micromause i przyszedł czas na obsługę enkoderów.
Korzystam z następujących enkoderów:
http://botland.com.pl/enkodery/1879-zes ... ja-5v.htmlOraz napędu:
http://botland.com.pl/high-power-hp/64- ... -50-1.htmlUkład przedstawiłem w tym temacie:
topic5296.htmlObecnie staram sie wykorzystać tylko jeden kanał i mierze ilość impulsów jakie docierają do mikrokontrolera.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Podaje tylko główną cześć programu. Jeśli trzeba to wrzucę cały program.
Poniżej znajduje się filmik przedstawiający wynik programu. Na filmiku silnik zatrzymuje się kolejno dla i_a=150 , 300 i 600 przy takiej samej prędkości obrotowej.
http://www.youtube.com/watch?edit=vd&v=6hb9ShFnpkEJak widać nie zatrzymuje się on idealnie w miejscu z którego startował, wygląda jak by gubił pojedyncze kroki. Im szybciej silnik się kreci tym większe są błędy. Próbowałem już różnych sposobów żeby jakoś ten problem rozwiązać.
Ostatnio miedzy innymi próbowałem wykorzystać kod podany przez Sunriver'a w tym temacie:
topic817.html,
Zmieniłem timer na TIMER2 dostępny w moim uC oraz definicje pinów na te z których korzystam. Niestety program nie działa, tzn wartość zmiennej val nie zmienia się(sprawdzałem to między innymi po przez wysyłanie informacji na komputer przez rs'a)
Zastanawiam się czym te błędy enkodera mogą być spowodowane i czy da się ten problem rozwiązać programowo.
Dodatkowo jeśli chodzi o sygnał z jakim mam do czynienia to wygląda on następująco:
Sygnał z enkodera

Sygnał po przejściu przez komparator(sygnał który dociera do atmegi)

Mam nadzieje ze nie namieszałem za bardzo i wyjaśniłem w czym problem. W skrócie: enkoder gubi(tak mi się wydaje) kroki, im szybciej się obraca napęd tym więcej kroków gubi.
Z góry dzięki za pomoc i ewentualne wskazówki.

Pozdrawiam