Znaleziono 1 wynik

autor: dzarek
19 wrz 2011, 11:49
Forum: Automatyka przemysłowa
Temat: Enkoder kwadraturowy - szybki "algorytm odczytu"
Odpowiedzi: 18
Odsłony: 6359

A czy ktoś ma przykład samej obsługi enkodera w C? Chodzi mi o to czy jest zrealizowana tylko na przerwaniach, czy w trybie licznika (np CTC), czy też licznika który liczy góra/dół (tego akurat nie wiem jak zrealizować - jeszcze)
Witam.
Ja obsługując impulsator (działa tak samo jak enkoder) użyłem takiego sposobu:
- jedno z wyjść np. A podpinam pod przerwanie zewnętrzne przykładowo INT0, które reaguje zarówno na zbocze narastające jak i opadające,
- w przerwaniu badam if'em wartość ex-or obu kanałów i na tej podstawie rozpoznaje kierunek obrotu
- w przerwaniu inkrementuje bądź dekrementuje zmienną "pozycja", która prezentuje aktualną pozycją wału.

Przykładowy kod w C wygląda tak:

Kod: Zaznacz cały

#define ENKODER_A   			bit_is_clear (PIND, 2) 
#define ENKODER_B   			bit_is_clear (PIND, 3) 

ISR (INT0_vect) 
{ 
	if ( ENKODER_A ^ ENKODER_B ) pozycja++; 
	else pozycja--; 
}	
Tym sposobem możesz odczytać w Twoim przypadku 5000 imp/obr. Pamiętaj aby zmienna "pozycja" była odpowiedniego typu, aby nie uległa szybkiemu przepełnieniu. Przy ATmega16 i zegarze 16MHz sądzę, że 20 obr/sek nie powinno stanowić żadnego problemu gdy program będzie pisany w C :)

Wróć do „Enkoder kwadraturowy - szybki "algorytm odczytu"”