Proponuje, żeby wyjaśnić po co taki test? I czym różnią się enkodery typu 1:1, 1:2, 1:4.
Damos, zrobisz to najlepiej.
OK, w takim razie lecimy:
Enkoder inkrementalny ma dwa wyjścia A i B, na których w miarę obracania pojawia się zmienny sygnał w kodzie Graya:
http://pl.wikipedia.org/wiki/Kod_Graya . Na każdej "nóżce" pojawia się naprzemiennie 0-1-0-1-0-1-0-1-... itd
Kierunek obrotu można ustalić za pomocą analizy przesunięcia fazowego - po ludzku mówiąc: sprawdzając, na której nóżce sygnał zmienił się najpierw.
Enkoder, o którym mówimy (bo nie każdy) obraca się skokowo a nie płynnie, to znaczy, że ma pewną ilość ustalonych pozycji, na których chce się zatrzymać podczas obracania (czuć wtedy po palcami delikatny opór). Takich pozycji jest najczęściej 8 lub 16.
Pomiędzy jedną pozycją a druga powinna zajść jakieś zmiany "na nóżkach" enkodera, aby obsługujący go program poznał, że użytkownik obraca. Zmiana może być jedna lub kilka - i tu właśnie wpadamy w klasyfikację 1:1, 1:2, 1:4.
Otóż - na pełen
cykl zmian na obu wyjściach, tzn kiedy A o B przejdą przez stany 0-1-0 enkoder może mieć 1 krok, 2 kroki lub 4 kroki. Jeżeli program obsługujący enkoder ma generować jeden impuls na każdy krok - musi wiedzieć, ile kroków przypada na jeden cykl.
Algorytm dla 1:1 dokonuje detekcji zbocza opadającego lub wznoszącego jednego z sygnałów i sprawdza, czy to nastąpiło po zmianie na zero lub 1 drugiego sygnału - zależnie od tego obrót jest w lewo lub w prawo
Algorytm dla 1:2 dokonuje detekcji obu zboczy jednego sygnału i konfrontuje ten moment ze stanem drugiego sygnału - to pozwala mu określić kierunek
Algorytm dla 1:4 reaguje na zbocza opadające i rosnące obu sygnałów i w każdym z tych momentów musi określić przesunięcie fazowe względem drugiego sygnału dla detekcji kierunku obrotu.
Oto graficzne przedstawienie przebiegów czasowych idealnego enkodera w 3 wariantach: 1:1, 1:2 i 1:4. Na każdym diagramie pokazałem:
- szary obszar zawierający jeden cykl zmian
-
fioletowe, pionowe linie symbolizujące - kiedy zatrzymało się pokrętło w każdym kroku (punkty zatrzymania pokrętła enkodera) pomiędzy tymi liniami jest właśnie
krok obrotu enkodera
-
poziome, zielone linie symbolizujące 3 odrębne algorytmy programu - najwyższa dla enkodera 1:1, niższa dla 1:2 i najniższa dla 1:4, na nich zaznaczam, kiedy "wyłapują" krok enkodera
-
czerwone kropki pokazujące, na jakie zdarzenie reaguje jaki algorytm (wtedy generuje informację o obrocie o jeden krok)
- czarne "iksy" (
X) pokazujące, w których krokach dany algorytm nie wygeneruje impulsu, ponieważ nie wystąpiły warunki właściwe dla danego algorytmu
Oto działanie 3 algorytmów na enkoderze 1:1

widać, że:
algorytm 1:1 wygeneruje w trakcie jednego
kroku jeden impuls
algorytm 1:2 wygeneruje w trakcie jednego
kroku dwa impulsy (dwa impulsy na jeden skok gałki - jeden impuls nadmiarowy)
algorytm 1:4 wygeneruje w trakcie jednego
kroku cztery impulsy (cztery impulsy na jeden skok gałki - trzy impulsy nadmiarowe)
następny przypadek: 3 algorytmy i enkoder typu 1:2 (dwa skoki gałki na pełną cyrkulację sygnału)

widać, że:
algorytm 1:1
nie wygeneruje w trakcie pierwszego
kroku impulsu, wygeneruje za to w kolejnym kroku - mamy więc impuls co drugie zatrzymanie gałki (jeden impuls zgubiony)
algorytm 1:2 wygeneruje w trakcie jednego
kroku jeden impuls (czyli mniej niż poprzednio i akurat tyle, ile trzeba)
algorytm 1:4 wygeneruje w trakcie jednego
kroku dwa impulsy (dwa impulsy na jeden skok gałki - jeden impuls nadmiarowy)
jak widać, algorytm dla 1:1 zaczyna "gubić" impulsy a algorytm 1:4 jeszcze generuje więcej niż powinien
przejdźmy do trzeciego przypadku:
3 algorytmy i enkoder typu 1:4 (4 skoki gałki na pełną cyrkulację sygnału)

widać, że:
algorytm 1:1
nie wygeneruje w trakcie pierwszych 3
kroków ani jednego impulsu, wygeneruje za to w czwartym kroku - mamy więc impuls co cztery zatrzymania gałki (3 impulsy zgubione)
algorytm 1:2
nie wygeneruje w trakcie pierwszego i trzeciego
kroku żadnego impulsu (generuje za to dwa impulsy w krokach 2 i 4) - mamy więc impuls co drugie zatrzymanie gałki (dwa impulsy zgubione)
algorytm 1:4 wygeneruje w trakcie każdego
kroku jeden impuls (mamy więc jeden impuls na jeden skok gałki)
Wszystkie moje enkodery (mimo, iż są różne) są typu 1:1. Vito_zm ma natomiast 1:2. Ciekaw jestem, czy ktoś ma 1:4 ? Te powinny być najlepszej jakości.
BTW - a teraz powiedzcie mi, jak algorytm 1:4 ma ustalić, który przebieg urósł jako pierwszy w takim przypadku:

:karpik

To tyle w ramach wyjaśnień - jeśli są pytania - proszę śmiało.