Wykorzystanie enkodera inkrementalnego w Industruino - SHEMECK
logo

Wykorzystanie enkodera inkrementalnego w Industruino

Wykorzystanie enkodera inkrementalnego w Industruino

Od pewnego czasu obiektem naszych zainteresowań stał się sterownik Industruino oparty na platformie Arduino. W związku z tym postanowiliśmy przetestować możliwość podpięcia do niego enkodera inkrementalnego. Testy przeprowadziliśmy na modelu IND.I/O z procesorem Atmega32u4.

Próby podłączenia rozpoczęliśmy od wejść cyfrowych sterownika. Znajdują się one w strefie cyfrowej i komunikują się z procesorem poprzez protokół I2C. Okazało się, że sygnały A i B z enkodera były odbierane prawidłowo natomiast częstotliwość ich odbierania (która jest taka sama jak czas wykonania jednej pętli programowej)  była zdecydowanie za niska, aby była możliwość zastosowania takiej metody w rozwiązaniach przemysłowych.

W zaistniałej sytuacji musieliśmy podłączyć enkoder bezpośrednio do wejść procesora. Nie jest to również zbyt dużym problemem, gdyż kilka takich wejść zostało wyprowadzonych na "Expansion Port 14 pin IDC". Wejścia te zostały podłączone zgodnie z poniższym schematem:

Na podanym porcie wyprowadzone zostały wejścia numer: D0, D1, D2, D3, D4, D5, D6, D7, D10. Jednak większość z tych wejść pełni też inne role w sterowniku Industruino i tylko niektóre z nich można sterować prądowo. W związku z tym do projektu można wykorzystać wejścia: D1, D4, D5, D6, D7, D10. Aby odpowiednio obsłużyć sygnały A i B enkodera potrzeba jeszcze dołączyć do jednego z tych wejść przerwanie. Wybrany procesor może obsłużyć do 5 przerwań znajdujących się na wejściach: D0, D1, D2, D3, D7. Na podstawie powyższych ustaleń możemy stwierdzić, że do testowanego modelu Industruino możemy podpiąć maksymalnie 2 enkodery, których jeden z sygnałów musi być podpięty do wejścia D1 lub D7.

Aby odczytywać i rejestrować pozycję enkodera wykorzystaliśmy najprostszą metodę polegającą na wykryciu zbocza narastającego jednego z sygnałów (A) oraz porównaniu do aktualnej wartości drugiego sygnału (B). Zgodnie z tą metodą jeżeli enkoder kręci się w kierunku zgodnym do wskazówek zegara to wartość sygnału B jest podczas każdego przerwania różna od wartości sygnału A. Jeżeli natomiast sygnały A i B są sobie równe to enkoder porusza się w kierunku przeciwnym do ruchu wskazówek zegara. Wadą tej metody jest utrata połowy precyzji enkodera. Poniżej znajduję się kod napisany w programie Arduino IDE, który wykorzystuje bibliotekę : "UC1701.h" służącą do obsługi wyświetlacza znajdującego się na sterowniku Industruino.

Po stworzeniu projektu można stwierdzić, że podłączenie do sterownika Industruino enkodera nie jest zbyt skomplikowane, natomiast rozwiązanie to ma niestety pewne ograniczenia. Podczas testów korzystaliśmy z enkodera inkrementalnego o rozdzielczości 1024 imp/obr. W naszym projekcie sterownik odczytywał dokładnie pozycję przy wolnych obrotach. Przy większych niestety zaczynał "gubić" impulsy (częstotliwość zmiany sygnału A była większa od częstotliwości wykonywania przerwań). Dlatego do zastosowań przemysłowych proponowalibyśmy zastosowanie enkoderów o małej rozdzielczości dla szybszych procesów lub ewentualnie enkoderów o nieco większej rozdzielczości, w sytuacji gdy wiemy, że wał enkodera będzie poruszał sie powoli.

 

Udostępnij:

Warto zobaczyć

Propozycje

Potrzebujesz pomocy?