Spisu treści:

Rotary Encoder - Zrozum i używaj (Arduino/inny Kontroler): 3 kroki
Rotary Encoder - Zrozum i używaj (Arduino/inny Kontroler): 3 kroki

Wideo: Rotary Encoder - Zrozum i używaj (Arduino/inny Kontroler): 3 kroki

Wideo: Rotary Encoder - Zrozum i używaj (Arduino/inny Kontroler): 3 kroki
Wideo: High Precision Encoder - 2500 Points er Rotation 2024, Listopad
Anonim
Rotary Encoder - Zrozum i używaj (Arduino/inne ΜKontroler)
Rotary Encoder - Zrozum i używaj (Arduino/inne ΜKontroler)

Enkoder obrotowy to urządzenie elektromechaniczne, które przekształca ruch obrotowy na informacje cyfrowe lub analogowe. Może obracać się zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara. Istnieją dwa rodzaje enkoderów obrotowych: enkodery absolutne i względne (przyrostowe).

Podczas gdy enkoder absolutny wyprowadza wartość proporcjonalną do aktualnego kąta wału, enkoder inkrementalny wyprowadza krok wału i jego kierunek (w tym przypadku mamy enkoder inkrementalny)

Enkodery obrotowe stają się coraz bardziej popularne, ponieważ w jednym module elektrycznym można korzystać z dwóch funkcji: prostego przełącznika do potwierdzania operacji oraz enkodera obrotowego do nawigacji m.in. poprzez menu.

Przyrostowy enkoder obrotowy generuje dwa sygnały wyjściowe, gdy jego wał się obraca. W zależności od kierunku jeden z sygnałów prowadzi drugi. (patrz poniżej)

Krok 1: Zrozumienie danych wyjściowych

Zrozumienie danych wyjściowych
Zrozumienie danych wyjściowych

Jak widać, kiedy wałek enkodera zaczyna się obracać zgodnie z ruchem wskazówek zegara, wyjście A najpierw spada na LOW, a wyjście B podąża za nim. W kierunku przeciwnym do ruchu wskazówek zegara operacja obraca się w przeciwnym kierunku.

Teraz musimy tylko zaimplementować to na naszym µControllerze (użyłem Arduino Nano).

Krok 2: Zbuduj obwód

Zbuduj obwód
Zbuduj obwód
Zbuduj obwód
Zbuduj obwód

Jak opisałem wcześniej, wyjścia tworzą bok WYSOKI i NISKI. Aby uzyskać czyste WYSOKIE na pinach danych A i B µControllera, musimy dodać rezystory Pull-Up. Wspólny Pin C idzie prosto do ziemi na NISKIM boku.

Do uzyskania informacji o wewnętrznym przełączniku (przycisku) wykorzystamy pozostałe dwa piny. Jeden z nich trafia do VCC, a drugi do pinu danych mikrokontrolera. Musimy również dodać rezystor Pull-Down do pinu danych, aby uzyskać czysty LOW.

Możliwe jest również użycie wewnętrznych rezystorów Pull-Up i Pull-Down swojego mikrokontrolera!

W moim przypadku pinout wygląda tak:

  • +3, 3V => +3, 3V (Arduino)(możliwe również +5V)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Szpilka

    11

  • C => GND
  • SW =>

    Szpilka

    12

Krok 3: Pisanie kodu

int pinA = 10; //przełącznik wewnętrzny A int pinB = 11; //włącznik wewnętrzny B int pinSW = 12; //przełącznik (wciśnięty koder) int encoderPosCount = 0; // zaczyna się od zera, zmień jeśli chcesz

int pozycyjny;

bool switchval; int mrotateOstatni; wewn. rotacja;

pusta konfiguracja () {

int mrotateLast = digitalRead(pinA); Serial.początek (9600); opóźnienie(50); }

void loop() { readencoder(); if(readswitch() == 1){ Serial.println("Przełącznik = 1"); } }

int readenkoder (){

mrotate = digitalRead(pinA); if (mrotate != mrotateLast){ //pokrętło obraca się if (digitalRead(pinB) != mrotate) { //przełącznik A zmieniono jako pierwszy -> obracanie zgodnie z ruchem wskazówek zegara encoderPosCount ++; Serial.println ("obrócony zgodnie z ruchem wskazówek zegara"); } else {// przełącznik B zmienił się jako pierwszy -> obracanie w kierunku przeciwnym do ruchu wskazówek zegara PosCount--; Serial.println ("obrócony przeciwnie do ruchu wskazówek zegara"); }

Serial.print("Pozycja kodera: "); Serial.println(liczbaPoz kodera); Serial.println(""); } mrotateLast = mrotate; koder powrotuPosCount; } bool przełącznik odczytu(){

if(digitalRead(pinSW)!=0){ //przełącznik jest wciśnięty

while(digitalRead(pinSW)!=0){} //przełącznik jest aktualnie wciśnięty switchval = 1; } else{switchval = 0;} //switch jest nienaciśnięty return switchval; }

Teraz możesz obrócić enkoder, a zmienna encoderPosCount będzie odliczać w górę, jeśli obrócisz się zgodnie z ruchem wskazówek zegara, i odlicz w dół, jeśli obrócisz się w kierunku przeciwnym do ruchu wskazówek zegara.

Otóż to! Prosto i pożytecznie.

Zapraszam do zmiany i wykonania kodu. Możesz to zaimplementować w swoim projekcie.

Prześlę również projekt LED, w którym użyłem enkodera do ustawienia jasności moich diod LED.

Zalecana: