Spisu treści:

Prosty dekoder obrotowy: 4 kroki
Prosty dekoder obrotowy: 4 kroki

Wideo: Prosty dekoder obrotowy: 4 kroki

Wideo: Prosty dekoder obrotowy: 4 kroki
Wideo: wbiłam na scenę😱😱 2024, Listopad
Anonim
Image
Image
Prosty dekoder obrotowy
Prosty dekoder obrotowy

Ta instrukcja opisuje prostą metodę dekodowania sekwencyjnego enkodera obrotowego za pomocą Arduino Uno R3.

Kompaktowe procedury oprogramowania służą do zliczania liczby przejść, eliminowania odbijania się styków i określania kierunku obrotu. Dodatkowe komponenty i tabele przeglądowe nie są wymagane.

Dostępne są wersje kodu z przerwaniami i bez przerw.

Wersja kodu z przerwaniami wymaga tylko jednego pinu przerwania.

Obrazy:

  • Zdjęcie otwierające przedstawia zmontowany enkoder.
  • Zrzut ekranu pokazuje kod dla wersji przerwania i liczbę, gdy wał enkodera jest obracany zgodnie z ruchem wskazówek zegara i przeciwnie do ruchu wskazówek zegara.
  • Film pokazuje liczbę podczas szybkiego obracania.

Krok 1: Schemat obwodu

Schemat obwodu
Schemat obwodu

Schemat okablowania enkodera pokazano na rys.1.

Przewody połączeniowe są przylutowane bezpośrednio do pinów enkodera.

Zamień dwa niebieskie przewody, jeśli kierunek zliczania jest odwrotny.

Krok 2: Lista części

Następujące części zostały uzyskane z

  • 1 tylko Arduino UNO R3 z kablem USB.
  • 1 tylko sekwencyjny enkoder obrotowy (EC11 lub równoważny) z przełącznikiem.
  • 1 tylko pokrętło pasujące do wału.
  • 3 tylko zworki Arduino męsko-męskie.

Krok 3: Teoria

Teoria
Teoria

Sekwencyjne enkodery obrotowe generują dwie fale prostokątne, z których każda jest przesunięta o 90 stopni, jak pokazano na rys.1.

Wzorce logiczne na styku A i styku B są różne, gdy wał jest obracany zgodnie z ruchem wskazówek zegara (CW) i przeciwnie do ruchu wskazówek zegara (CCW) przez pozycje od 1 do 6.

Typowe metody określania kierunku obrotu to:

  • sprzęt komputerowy
  • podwójne przerwania
  • tabele wyszukiwania wzorców

Ten projekt wykorzystuje metodę oprogramowania, która nie wymaga tabel przeglądowych. [1]

Kierunek

Zamiast patrzeć na wzorce wyjściowe z Kontaktu A i Kontaktu B, skupmy się na Kontaktie A.

Jeśli po każdym przejściu Kontaktu A przeanalizujemy próbkę kontaktu B, zauważymy, że:

  • Kontakt A i Kontakt B mają przeciwne stany logiczne, gdy enkoder jest obracany w prawo
  • Kontakt A i kontakt B mają ten sam stan logiczny, gdy enkoder jest obrócony w lewo

Rzeczywisty kod:

// ----- Policz przejścia

BieżącyStanA = stanKontaktA(); if (CurrentStateA != LastStateA) { CurrentStateB = digitalRead(ContactB); if (CurrentStateA == CurrentStateB) Count++; if (CurrentStateA != CurrentStateB) Count--; Ostatni Stan A = Bieżący Stan A; }

Ta metoda ma następujące zalety:

  • tabele przeglądowe nie są wymagane
  • wymagana jest tylko jedna linia przerwania

Obalić

Wszystkie enkodery mechaniczne cierpią z powodu „odskoku kontaktu”.

Jeśli styk przełącznika nie zwiera/rozwiera się czysto, jego stan logiczny będzie gwałtownie oscylował od WYSOKIEGO do NISKIEGO, aż styk przełącznika ustabilizuje się. Powoduje to fałszywe zliczenia.

Jedną z metod tłumienia odbijania się styków jest dodanie małego kondensatora na każdym styku przełącznika. Kondensator i związany z nim rezystor podciągający tworzą integrator, który skutecznie zwiera wysokie częstotliwości i umożliwia wdzięczny wzrost/spadek napięcia przełącznika.

Wadą tego podejścia jest to, że przejścia mogą zostać pominięte, jeśli wał enkodera zostanie szybko obrócony.

Odbicie oprogramowania

Ta metoda wykorzystuje dwa liczniki (Open, Closed), które zostały ustawione na zero. [2]

Po wykryciu przejścia na styku A:

  • Stale ankietuj kontakt A.
  • Zwiększ licznik otwarcia i zresetuj licznik zamknięcia, gdy styk A jest WYSOKI.
  • Zwiększ licznik zamknięcia i zresetuj licznik otwarcia, gdy styk A jest NISKI.
  • Wyjdź z pętli, gdy jeden z liczników osiągnie określoną liczbę. Skutecznie szukamy okresu stanu ustalonego po każdym odbiciu kontaktu.

Rzeczywisty kod:

// ----- Odbij kontakt A

while (1) { if (digitalRead(ContactA)) { // ----- ContactA jest otwarty zamknięty = 0; // Pusty przeciwny integrator Open++; // Integracja jeśli (Open > MaxCount) return HIGH; } else { // ----- KontaktA jest zamknięty Otwarty = 0; // Pusty przeciwny integrator Closed++; // Integracja jeśli (Zamknięte > MaxCount) return LOW; } }

Nie ma potrzeby odbijania kontaktu B, ponieważ przejścia Kontaktu A i Kontaktu B nie pokrywają się.

Rachunkowość

Mechaniczna „zapadka” skutecznie podwaja twoją liczbę, ponieważ dwie liczby są rejestrowane między kliknięciami (patrz rys. 1).

Liczbę „zapadków” można określić za pomocą arytmetyki modulo 2, jak pokazano poniżej.

Rzeczywisty kod:

// ----- Policz "zapadki"

if (Liczba % 2 == 0) { Serial.print("Liczba: "); Serial.println(Liczba / 2); }

Bibliografia

Więcej informacji można znaleźć pod adresem:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

Krok 4: Oprogramowanie

Ten projekt wymaga najnowszej wersji Ardino Uno R3 IDE (zintegrowane środowisko programistyczne), które jest dostępne pod adresem

Pobierz każdy z poniższych dwóch szkiców Arduino (w załączeniu)

  • rotor_encoder_1.ino (wersja odpytująca)
  • rotor_encoder_2.no (wersja z przerwaniem)

Kliknij dwukrotnie preferowaną wersję i postępuj zgodnie z instrukcjami wyświetlanymi na ekranie.

Cieszyć się …

Kliknij tutaj, aby wyświetlić inne moje instrukcje.

Zalecana: