ATNEL tech-forum
https://forum.atnel.pl/

Dwa enkodery kwadraturowe - ATmega32
https://forum.atnel.pl/topic20862.html
Strona 1 z 1

Autor:  drewpol [ 11 cze 2018, o 20:41 ]
Tytuł:  Dwa enkodery kwadraturowe - ATmega32

Witam.
Mam pewien dylemat co do wyboru popranej implementacji obsługi enkoderów kwadraturowych.
Do Atmegi32 zostaną podłączone 2 enkodery kwadraturowe. Z dokumentacji wynika, że procesor ma 3 piny, które mogą pracować jako zewnętrzne wyzwolenie przerwania. Niestety liczba sygnałów, która będzie mierzona z enkoderów wynosi 4.
Enkoder jest zamocowany na wale silnika, którego prędkość obrotowa wynosi 14000 obr / min co daje 3,89 obr/s. Enkoder generuje 12 impulsów na obrót, więc częstotliwość zmian sygnałów kwadraturowych wynosi ~50Hz. Sam procesor będzie pracował z zewnętrznym kwarcem 16MHz, czyli czas pojedynczego taktu wynosi ok 6,3*10^(-8)[s]. Sygnał kwadraturowy zmienia się co ok 0,02[s].
Z tych obilczeń wynika, że mogę zastosować timer, który będzie np. z częstotliwością 100Hz sprawdzał aktualny stan wejść 4 pinów, które będą pracowały jako normalne wejścia i na podstawie tych danych aktualizował liczniki.
W przypadku zastosowanie pinów jako INTx miałbym pewność, że liczniki będą poprawnie aktualizowane, ale w przypadku programowego zastosowania nie jestem pewien. Dodam, że procesor między czasie będzie wysyłał i odbierał dane przez interfejs UART oraz sterował pozostałymi 3 portami z pinami.
Pytanie czy takie rozwiązanie będzie poprawne? Czy może w tym przypadku istnieją jakieś alternatywne rozwiązania (może z wykorzystaniem pinów INTx), o których nie wiem? Być może rozwiązaniem jest wykorzystanie procesora, który posiada sprzętową obsługę 4 zewnętrznych przerwań INTx?

Z góry dziękuję za wskazówki i pomoc.
Pozdrawiam!

Autor:  jnk0le [ 11 cze 2018, o 21:36 ]
Tytuł:  Re: Dwa enkodery kwadraturowe - ATmega32

Enkodery można obsługiwać z jednym pinem "przerwaniowym" najlepiej działającym na obu zboczach.
Oczywiście ewentualny debouncing musi być zrealizowany sprzętowo w tym przypadku.

np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nawet mam jakiegoś dawno nie aktualizowanego liba do tego: https://github.com/jnk0le/AVR-FAST-ENCODER

------------------------ [ Dodano po: 3 minutach ]

(14k rpm / 60s) * 12 to mi wychodzi 2800 kroków/s, chyba że masz jeszcze jakąś przekładnie przed wałem

Autor:  Mario17 [ 11 cze 2018, o 21:47 ]
Tytuł:  Re: Dwa enkodery kwadraturowe - ATmega32

14000 obr/min to ok. 233 obr/s, przy enkoderze o rozdzielczości 12 impulsów daje sygnał na wyjściu enkodera o częstotliwości ~2,8kHz (0,35ms) a to troche za dużo jak na programowe badanie pinów, czy obsługę przerwań jeżeli w gre wchodzi wykonywanie innych zadań. Najlepiej byłoby to załatwić sprzętowo np. podając sygnał z enkoderów na wejścia T0 i T1 jako zewnętrzny sygnał taktujący dla timerów, a potem w programie co jakiś ustalony okres czasu sprawdzać rejestry TCNT tych timerów i na tej podstawie liczyć aktualną prędkość. Tylko w przypadku ATmegi32 daje to możliwość obsługi jednego enkodera z wykrywaniem kierunku obrotów lub dwóch enkoderów z brakiem informacji o kierunkach, którą jeśli sterujesz jakimś mostkiem h możesz brać z jego aktualnego wysterowania, czy ma obracać silnikiem w prawo czy lewo, więc teoretycznie możesz pominąć badanie kierunku za pomocą enkoderów ;), chyba że potrzebujesz dodawania/odejmowania impulsów w zależności od kierunku to na atmedze ciężko będzie z obsługą dwóch enkoderów.

Autor:  drewpol [ 11 cze 2018, o 22:29 ]
Tytuł:  Re: Dwa enkodery kwadraturowe - ATmega32

Dziękuję za odpowiedzi. W obliczeniach rzeczywiście jest pomyłka za co przepraszam. Zastanawiam się nad zmniejszeniem rozdzielczości. Czy w atmedze jest możliwość sprzetowego procesowania np. co 10 przerwania ?

Autor:  tomcat65 [ 11 cze 2018, o 23:46 ]
Tytuł:  Re: Dwa enkodery kwadraturowe - ATmega32

Do czego mają służyć te enkodery - regulacja obrotów?
Nie prościej użyć sprzętowego dekodera enkodera? :)
W necie jest mnóstwo rozwiązań, często pojawia się układ LS7184.
Na wyjściu dostajesz sygnały STEP i DIR, prostsze do zliczania i operacji na nich.

Autor:  SylwekK [ 12 cze 2018, o 06:40 ]
Tytuł:  Re: Dwa enkodery kwadraturowe - ATmega32

Jak dla mnie za mało danych odnośnie urządzenia docelowego. W swoim sterowniku obsługuje przy 16MHz łącznie 5 różnych enkoderów i żaden się nie gubi - 2 po 10 imp/obrót z max prędkością 6k/min, 2 po 1600 imp/obr z max 15obr/s, i jeden zwykły do menu 20imp/obr, który też nie ma problemu przy szybszym kręceniu.
Wszystko zbiega się do pewnych uproszczeń sprzętowych i zastosowanych rozwiązań programowych, ale jak wspomniałem jeśli nie wiadomo co to ma robić to można sobie gdybać.


Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/