Kiedyś słyszałem że ktoś wykorzystał silnika krokowy jako enkoder obrotowy (impulsator) w kodzie Graya.
Zrobiłem coś takiego wykorzystując silnik krokowy ze starego flopa 1,2MB. Cewki silnika krokowego podłączyłem do dwóch wzmacniaczy operacyjnych. Jedne końce uzwojeń do wejść nieodwracających opampów przez dzielniki rezystorowe i a drugie dwa końce uzwojeń połączone są razem i podłączone do wejść odwracających opampów do których też dochodzi połowa napięcia zasilania 5V. Na wejściach nieodwracających oprócz dzielników rezystorowych są jeszcze po dwie obcinające sygnał diody w przeciwnych polaryzacjach. Równolegle z diodami połączone są kondensatory 10uF. Oba wzmacniacze mają sprzężenia zwrotne po 100kohm do wejścia nieodwracającego. Układ obserwowałem na oscyloskopie dwustrumieniowym i działa wyśmienicie (przebiegi kodu Grata na oscyloskopie niemal książkowe). Nawet delikatne ruszenie silnika o jeden krok powoduje zmianę kodu (Graya) na wyjściach opampów. Podłączyłem wkrętarkę akumulatorową do osi silnika krokowego i przy maksymalnych obrotach wkrętarki (około 1000obr/min) nadal przebiegi książkowe. Maksymalne obroty przy których enkoder może prawidłowo działać ograniczone są wartościami kondensatorów 10uF oraz rezystorów. Bez tych kondensatorów delikatne dotykanie osi silnika lub drgania stołu powodowało generowanie stanów nieustalonych na wyjściach opampów.
Poszedłem krok naprzód. Napisałem krótki progamik w C++ na atmegę 32. Na LCDku wyświetlam aktualny stan położenia osi silnika (kod Graya) oraz stan licznika którego wartość zmienia się podczas kręcenia osią silnik krokowego. Tu działa wszystko wyśmienicie. Nie gubi żadnego, nawet najwolniejszego kroku. Silnik ma krok co 1,8stopnia więc 200 kroków to pełny obrót. Zaznaczyłem na osi oraz na korpusie punkt i obróciłem oś o 360stopni. Licznik na wyświetlaczu wskazał wartość 200. Idealnie. Jest jednak jedno ale. Wszystko działa idealnie do czasu gdy nie zmienię kierunku. W przypadku zmiany kierunku, nie wazne czy to szybko czy wolno. Pierwszy krok obrotu osi silnika wyzwala mi dwa impulsy licznika zliczającego a wyświetlany kod graya przyjmuje stany zabronione, tzn przeskakuje jedną kombinację. Po tym jednym jedynym impulsie każdy następny jest prawidłowy aż do ponownej zmiany kierunku obracania gdzie znowu przy jednym kroku dostaję dwa impulsy kody graya. Gdy obracam delikatnie oś silnika tylko o jeden impuls raz w lewo raz w prawo, licznik Na LCDku zmienia wartość naprzemian +2 -2 . Gdy zmiany są np. o 5 kroków na osi silnika to licznik zmienia wartość o +6 -6 Dlaczego tak się dzieje że każde przejście przez zmianę kierunku obracania osią silnika powoduje wyzwolenie dwóch impulsów Graya na wyjściach opampów?
Marek