Witam
Kupiłem ostatnio na allegro kilka sztuk
enkoderów obrotowych NONAME. Pierwszy raz mam styczność z takim czymś jak enkoder dlatego najpierw chciałem napisać program bez jakichkolwiek przerwań czy funkcji zwracających wartości oraz zanian z kodu Grey-a na binarny.
Podłączyłem to w taki schemat
i sugerując się przebiegami
napisałem taki program:
Wcześniej gdy nie dawałem _delay_ms() wogóle były problemy ze zliczaniem
Myślałem, że enkoder ma ustalone swoje stany i nie występują żadne stany przejściowe, ale po problemach sprawdziłem na oscyloskopie (działka na 50ms)
że każde przekręcenie to impuls, po którym następuje powrót do poprzedniego stanu. Niestety mam oscyloskop jednokanałowy i nie mogę zobaczyć przesunięcie w fazie na dwóch wejściach do enkodera.
Okazuje się też, że przy powolnym przekręceniu gałki impuls ten wydłuża się i to znacznie
jak trzymam ją w pozycji pomiędzy jednym a drugim skokiem impuls utrzymuje się cały czas. Czy to normalne? Enkoder kosztował 2,80zł, czy w tych droższych impulsy są płynne?
Jak dodałem funkcję _delay_ms(100) tak jak w programie powyżej już jest trochę lepiej, ale nie mogę w ten sposób wykonywać szybkich obrotów i dalej występuje coś takiego:
gdzie te migania (oczywiście z T=100ms) i przeskoki występują podczas powolnego przekręcania gałki. Najpierw przekręcałem w prawo, a potem w lewo. Jak widać licznik jako tako działa, ale chciałbym się zapytać czy można jakoś zmienić program, żeby wyeliminować ten problem?
Problemem jest chyba to, że przez przy powolnym kręceniu może zostać odczytany błędny stan.
Kupiłem ostatnio na allegro kilka sztuk

enkoderów obrotowych NONAME. Pierwszy raz mam styczność z takim czymś jak enkoder dlatego najpierw chciałem napisać program bez jakichkolwiek przerwań czy funkcji zwracających wartości oraz zanian z kodu Grey-a na binarny.
Podłączyłem to w taki schemat

i sugerując się przebiegami

napisałem taki program:
Code: c
Wcześniej gdy nie dawałem _delay_ms() wogóle były problemy ze zliczaniem
Myślałem, że enkoder ma ustalone swoje stany i nie występują żadne stany przejściowe, ale po problemach sprawdziłem na oscyloskopie (działka na 50ms)

że każde przekręcenie to impuls, po którym następuje powrót do poprzedniego stanu. Niestety mam oscyloskop jednokanałowy i nie mogę zobaczyć przesunięcie w fazie na dwóch wejściach do enkodera.
Okazuje się też, że przy powolnym przekręceniu gałki impuls ten wydłuża się i to znacznie

jak trzymam ją w pozycji pomiędzy jednym a drugim skokiem impuls utrzymuje się cały czas. Czy to normalne? Enkoder kosztował 2,80zł, czy w tych droższych impulsy są płynne?
Jak dodałem funkcję _delay_ms(100) tak jak w programie powyżej już jest trochę lepiej, ale nie mogę w ten sposób wykonywać szybkich obrotów i dalej występuje coś takiego:
gdzie te migania (oczywiście z T=100ms) i przeskoki występują podczas powolnego przekręcania gałki. Najpierw przekręcałem w prawo, a potem w lewo. Jak widać licznik jako tako działa, ale chciałbym się zapytać czy można jakoś zmienić program, żeby wyeliminować ten problem?
Problemem jest chyba to, że przez przy powolnym kręceniu może zostać odczytany błędny stan.