Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 23:04


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 11 cze 2018, o 20:41 
Offline
Użytkownik

Dołączył(a): 08 lut 2015
Posty: 132
Pomógł: 4

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!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 21:36 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

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

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Ostatnio edytowano 11 cze 2018, o 21:51 przez jnk0le, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 21:47 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 34
Pomógł: 11

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 22:29 
Offline
Użytkownik

Dołączył(a): 08 lut 2015
Posty: 132
Pomógł: 4

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 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 23:46 
Offline
Użytkownik

Dołączył(a): 09 paź 2016
Posty: 71
Lokalizacja: Olsztyn
Pomógł: 1

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2018, o 06:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

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ć.


_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 12 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO