Spisu treści:
- Krok 1: Wewnątrz enkodery obrotowe
- Krok 2: Nieszczęście, które wielu ludziom powoduje prawdziwy ból
- Krok 3: Rozwiązanie maszyny skończonej (FSM)
- Krok 4: Kod Arduino
- Krok 5: Bezbłędna integracja
![Kompletne rozwiązanie obrotowe Arduino: 5 kroków Kompletne rozwiązanie obrotowe Arduino: 5 kroków](https://i.howwhatproduce.com/images/005/image-12873-9-j.webp)
Wideo: Kompletne rozwiązanie obrotowe Arduino: 5 kroków
![Wideo: Kompletne rozwiązanie obrotowe Arduino: 5 kroków Wideo: Kompletne rozwiązanie obrotowe Arduino: 5 kroków](https://i.ytimg.com/vi/oD7zZlduuo8/hqdefault.jpg)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
![Kompletne rozwiązanie obrotowe Arduino Kompletne rozwiązanie obrotowe Arduino](https://i.howwhatproduce.com/images/005/image-12873-10-j.webp)
Enkodery obrotowe to obrotowe pokrętła sterujące do projektów elektronicznych, często używane z mikrokontrolerami z rodziny Arduino. Mogą być używane do dostrajania parametrów, nawigacji po menu, przesuwania obiektów na ekranie, ustawiania dowolnych wartości. Są powszechnymi zamiennikami potencjometrów, ponieważ można je obracać dokładniej i nieskończenie, inkrementują lub dekrementują o jedną wartość dyskretną, a często są zintegrowane z wciskanym przełącznikiem funkcji wyboru. Występują we wszystkich kształtach i rozmiarach, ale najniższy przedział cenowy jest trudny do połączenia, jak wyjaśniono poniżej.
Istnieje niezliczona ilość artykułów o szczegółach pracy i trybach użytkowania enkoderów obrotowych, a także liczne przykładowe kody i biblioteki dotyczące ich używania. Jedynym problemem jest to, że żaden z nich nie działa w 100% dokładnie z chińskimi modułami obrotowymi z najniższej półki cenowej.
Krok 1: Wewnątrz enkodery obrotowe
![Enkodery obrotowe wewnątrz Enkodery obrotowe wewnątrz](https://i.howwhatproduce.com/images/005/image-12873-11-j.webp)
![Enkodery obrotowe wewnątrz Enkodery obrotowe wewnątrz](https://i.howwhatproduce.com/images/005/image-12873-12-j.webp)
![Enkodery obrotowe wewnątrz Enkodery obrotowe wewnątrz](https://i.howwhatproduce.com/images/005/image-12873-13-j.webp)
Obrotowa część enkodera ma trzy piny (i dwa dodatkowe dla opcjonalnej części przełącznika). Jedna to wspólna masa (czarny GND), a dwie pozostałe służą do określania kierunku po przekręceniu pokrętła (często nazywane są niebieskimi CLK i czerwonymi DT). Obydwa są podłączone do pinu wejściowego PULLUP mikrokontrolera, dzięki czemu poziom WYSOKI jest ich domyślnym odczytem. Gdy pokrętło jest obrócone do przodu (lub zgodnie z ruchem wskazówek zegara), najpierw niebieski CLK spada do poziomu LOW, a następnie czerwony DT. Obracając się dalej, niebieski CLK wznosi się z powrotem do HIGH, a następnie, gdy wspólna łatka GND opuszcza oba piny połączeniowe, czerwony DT również podnosi się z powrotem do HIGH. W ten sposób ukończenie jednego pełnego tiku FWD (lub zgodnie z ruchem wskazówek zegara). To samo idzie w innym kierunku BWD (lub przeciwnie do ruchu wskazówek zegara), ale teraz czerwony spada jako pierwszy, a niebieski powraca jako ostatni, jak pokazano odpowiednio na dwóch obrazach poziomu.
Krok 2: Nieszczęście, które wielu ludziom powoduje prawdziwy ból
![Nędza, która wielu ludziom sprawia prawdziwy ból Nędza, która wielu ludziom sprawia prawdziwy ból](https://i.howwhatproduce.com/images/005/image-12873-14-j.webp)
![Nędza, która wielu ludziom sprawia prawdziwy ból Nędza, która wielu ludziom sprawia prawdziwy ból](https://i.howwhatproduce.com/images/005/image-12873-15-j.webp)
![Nędza, która wielu ludziom sprawia prawdziwy ból Nędza, która wielu ludziom sprawia prawdziwy ból](https://i.howwhatproduce.com/images/005/image-12873-16-j.webp)
Częstym problemem dla hobbystów Arduino jest to, że tanie moduły enkoderów obrotowych odbijają dodatkowe zmiany poziomów wyjściowych, powodując dodatkowe i błędne odczyty liczników kierunku. Zapobiega to bezbłędnemu liczeniu i uniemożliwia zintegrowanie tych modułów z dokładnymi projektami obrotowymi. Te dodatkowe odbicia są spowodowane mechanicznymi ruchami łatek nad pinami łączącymi, a nawet zastosowanie dodatkowych kondensatorów nie może ich całkowicie wyeliminować. Odbicia mogą pojawić się w dowolnym miejscu w pełnych cyklach tików i są ilustrowane przez rzeczywiste scenariusze na obrazach.
Krok 3: Rozwiązanie maszyny skończonej (FSM)
![Rozwiązanie maszyny skończonej (FSM) Rozwiązanie maszyny skończonej (FSM)](https://i.howwhatproduce.com/images/005/image-12873-17-j.webp)
Obraz pokazuje pełną przestrzeń stanów możliwych zmian poziomów dla dwóch pinów (niebieskiego CLK i czerwonego DT), zarówno dla poprawnych, jak i fałszywych odbić. Na podstawie tej maszyny stanowej można zaprogramować kompletne rozwiązanie, które zawsze działa w 100% dokładnie. Ponieważ w tym rozwiązaniu nie są potrzebne żadne opóźnienia filtrowania, jest ono również najszybsze z możliwych. Kolejną korzyścią wynikającą z oddzielenia przestrzeni stanów pinów od trybu pracy jest to, że można zastosować zarówno tryb odpytywania, jak i tryby przerwań według własnych upodobań. Odpytywanie lub przerwania mogą wykryć zmiany poziomu na pinach, a oddzielna procedura obliczy nowy stan na podstawie bieżącego stanu i rzeczywistych zdarzeń zmian poziomu.
Krok 4: Kod Arduino
![Kod Arduino Kod Arduino](https://i.howwhatproduce.com/images/005/image-12873-18-j.webp)
Poniższy kod zlicza tiki FWD i BWD na monitorze szeregowym, a także integruje opcjonalną funkcję przełącznika.
// Peter Csurgay 10.04.2019
// Piny obrotowe mapowane na porty Arduino
#zdefiniuj SW 21 #zdefiniuj CLK 22 #zdefiniuj DT 23
// Aktualna i poprzednia wartość licznika dostrojona pokrętłem
int curVal = 0; int prevVal = 0;
// Siedem stanów FSM (maszyna skończonych stanów)
#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int state = IDLE_11;
pusta konfiguracja () {
Serial.początek(250000); Serial.println("Rozpocznij…"); // Poziom HIGH będzie domyślny dla wszystkich pinów pinMode(SW, INPUT_PULLUP); pinMode(CLK, INPUT_PULLUP); pinMode(DT, INPUT_PULLUP); // Zarówno CLK jak i DT będą wyzwalać przerwania dla wszystkich zmian poziomu attachInterrupt(digitalPinToInterrupt(CLK), rotorCLK, CHANGE); attachInterrupt(digitalPinToInterrupt(DT), rotacyjnyDT,CHANGE); }
pusta pętla () {
// Obsługa opcjonalnego przełącznika zintegrowanego z niektórymi enkoderami obrotowymi if (digitalRead(SW)==LOW) { Serial.println("Wciśnięty"); while(!digitalRead(SW)); } // Każda zmiana wartości licznika jest wyświetlana w Monitorze szeregowym if (curVal != prevVal) { Serial.println(curVal); prevVal = curVal; } }
// Przejścia automatu stanów dla zmian poziomu CLK
void rotorCLK() { if (digitalRead(CLK)==LOW) { if (stan==IDLE_11) stan = SCLK_01; w przeciwnym razie (stan==SCLK_10) stan = SCLK_00; w przeciwnym razie (stan==SDT_10) stan = SDT_00; } else { if (stan==SCLK_01) stan = IDLE_11; w przeciwnym razie (stan==SCLK_00) stan = SCLK_10; w przeciwnym razie (stan==SDT_00) stan = SDT_10; else if (stan==SDT_01) { stan = IDLE_11; curVal--; } } }
// Przejścia automatu stanów dla zmian poziomu DT
void rotorDT() { if (digitalRead(DT)==LOW) { if (stan==IDLE_11) stan = SDT_10; w przeciwnym razie (stan==SDT_01) stan = SDT_00; w przeciwnym razie jeśli (stan==SCLK_01) stan = SCLK_00; } else { if (stan==SDT_10) stan = IDLE_11; w przeciwnym razie (stan==SDT_00) stan = SDT_01; w przeciwnym razie, jeśli (stan==SCLK_00) stan = SCLK_01; else if (stan==SCLK_10) { stan = IDLE_11; curVal++; } } }
Krok 5: Bezbłędna integracja
![](https://i.ytimg.com/vi/NgMvAgHcgyE/hqdefault.jpg)
Możesz sprawdzić w załączonym filmie, że rozwiązanie FSM działa dokładnie i szybko, nawet w przypadku niskozakresowych enkoderów obrotowych z różnymi sporadycznymi efektami odbicia.
Zalecana:
Skaner punktowy XYZ wykorzystujący odzyskane enkodery obrotowe: 5 kroków
![Skaner punktowy XYZ wykorzystujący odzyskane enkodery obrotowe: 5 kroków Skaner punktowy XYZ wykorzystujący odzyskane enkodery obrotowe: 5 kroków](https://i.howwhatproduce.com/images/009/image-25579-j.webp)
Skaner punktów XYZ wykorzystujący odzyskane enkodery obrotowe: Po nabyciu dużej liczby wyrzuconych obrotowych enkoderów optycznych z mojego miejsca pracy w końcu zdecydowałem się zrobić z nimi coś zabawnego/przydatnego. Niedawno kupiłem nową drukarkę 3D do mojego domu i co może to komplement lepiej niż 3D s
Obrotowe płyty słoneczne oparte na programie: 9 kroków
![Obrotowe płyty słoneczne oparte na programie: 9 kroków Obrotowe płyty słoneczne oparte na programie: 9 kroków](https://i.howwhatproduce.com/images/001/image-882-35-j.webp)
Obrotowe płyty słoneczne oparte na programie: Zgodnie z rosnącą populacją i potrzebami potrzebujemy większej wydajności przy mniejszych nakładach. Zaproponowaliśmy programową rotacyjną płytę solarną. Działa zawsze zgodnie z kierunkiem natężenia światła słonecznego. W tym konkursie zaproponowaliśmy specjalny rodzaj
Mini dwukolorowe obrotowe światło ostrzegawcze: 6 kroków
![Mini dwukolorowe obrotowe światło ostrzegawcze: 6 kroków Mini dwukolorowe obrotowe światło ostrzegawcze: 6 kroków](https://i.howwhatproduce.com/images/005/image-14682-18-j.webp)
Mini dwukolorowe obrotowe światło ostrzegawcze: W tej instrukcji stworzymy mini światło ostrzegawcze. Wiesz, jedno z tych staromodnych wirujących świateł, które montowano na sprzęcie budowlanym, zanim diody LED stały się duże? Tak. Jeden z tych. Ten będzie stosunkowo prosty i mały
Najnowsze rozwiązanie MacOS/Hackintosh High Sierra 10.13 USB Wifi Driver "Przyszłościowe" rozwiązanie przy użyciu Raspberry Pi: 4 kroki
![Najnowsze rozwiązanie MacOS/Hackintosh High Sierra 10.13 USB Wifi Driver "Przyszłościowe" rozwiązanie przy użyciu Raspberry Pi: 4 kroki Najnowsze rozwiązanie MacOS/Hackintosh High Sierra 10.13 USB Wifi Driver "Przyszłościowe" rozwiązanie przy użyciu Raspberry Pi: 4 kroki](https://i.howwhatproduce.com/images/002/image-5691-59-j.webp)
Najnowsze rozwiązanie MacOS/Hackintosh High Sierra 10.13 USB Wifi Driver „Future Proof” przy użyciu Raspberry Pi: Jednym z najbardziej frustrujących problemów z najnowszym macOS/Hackintoshem jest dostępność sterownika Wi-Fi USB. Mam 3 USB Wi-Fi, żaden z nich nie działa na najnowszych macOS High Sierra 10.13Moje najnowsze wifi USB to bezprzewodowa panda, ale obsługa sterowników dla macO
Obrotowe rzutniki LED napędzane silnikiem Stirlinge (eVoltis Stirlingmachine): 12 kroków (ze zdjęciami)
![Obrotowe rzutniki LED napędzane silnikiem Stirlinge (eVoltis Stirlingmachine): 12 kroków (ze zdjęciami) Obrotowe rzutniki LED napędzane silnikiem Stirlinge (eVoltis Stirlingmachine): 12 kroków (ze zdjęciami)](https://i.howwhatproduce.com/preview/how-and-what-to-produce/10966980-rotating-led-throwies-driven-by-a-stirlingengine-evoltis-stirlingmachine-12-steps-with-pictures-j.webp)
Obrotowe rzutniki LED napędzane silnikiem Stirlinge (eVoltis Stirlingmachine): Jest to maszyna na gorące powietrze (silnik Stirling), zbudowana ze starych części komputerowych (radiator i głowica starego dysku twardego). Ten silnik Stirlinge (i wszystkie inne również) działa z różnicą temperatur między gorącą stroną dolną (np. Heatet z