Obsah:

Kompletné rotačné riešenie Arduino: 5 krokov
Kompletné rotačné riešenie Arduino: 5 krokov

Video: Kompletné rotačné riešenie Arduino: 5 krokov

Video: Kompletné rotačné riešenie Arduino: 5 krokov
Video: Equipment Corner- OctoPrint configuration 2024, Júl
Anonim
Kompletné rotačné riešenie Arduino
Kompletné rotačné riešenie Arduino

Rotačné kodéry sú otočné ovládacie gombíky pre elektronické projekty, často používané s mikrokontrolérmi rodiny Arduino. Môžu byť použité na doladenie parametrov, navigáciu v ponukách, presúvanie predmetov na obrazovke, nastavovanie hodnôt akéhokoľvek druhu. Sú to bežné náhrady potenciometrov, pretože sa dajú otáčať presnejšie a plynulejšie, zvyšujú alebo znižujú jednu diskrétnu hodnotu naraz a často sú integrované s posuvným prepínačom pre funkcie výberu druhu. Prichádzajú vo všetkých tvaroch a veľkostiach, ale s najnižším cenovým rozpätím je ťažké prepojiť, ako je vysvetlené nižšie.

Existuje nespočetné množstvo článkov o pracovných podrobnostiach a režimoch použitia rotačných kodérov a množstvo vzorových kódov a knižníc o ich použití. Jediným problémom je, že žiadny z nich nepracuje 100% presne s čínskymi rotačnými modulmi v najnižšom cenovom rozpätí.

Krok 1: Rotačné kodéry vo vnútri

Vnútorné rotačné snímače
Vnútorné rotačné snímače
Vnútorné rotačné snímače
Vnútorné rotačné snímače
Vnútorné rotačné snímače
Vnútorné rotačné snímače

Otočná časť snímača má tri kolíky (a dva ďalšie pre voliteľnú časť spínača). Jeden je spoločný (čierny GND), ďalšie dva slúžia na určenie smeru otáčania gombíka (často sa nazývajú modrý CLK a červený DT). Oba sú pripojené k vstupnému kolíku PULLUP mikrokontroléra, vďaka čomu je predvoleným údajom úroveň VYSOKÁ. Keď je gombík otočený dopredu (alebo v smere hodinových ručičiek), najskôr modrý CLK klesne na úroveň LOW, potom nasleduje červené DT. Keď sa otočíte ďalej, modrá CLK vystúpi späť na HIGH, potom ako spoločná GND záplata opustí oba pripájacie kolíky, červená DT tiež vystúpi späť na HIGH. Dokončenie jedného úplného začiarknutia FWD (alebo v smere hodinových ručičiek). To isté platí pre druhý smer BWD (alebo proti smeru hodinových ručičiek), ale teraz červená padá ako prvá a modrá stúpa späť ako posledná, ako je znázornené na dvoch úrovňových obrázkoch.

Krok 2: Bieda, ktorá mnohým spôsobuje skutočnú bolesť

Bieda, ktorá mnohým spôsobuje skutočnú bolesť
Bieda, ktorá mnohým spôsobuje skutočnú bolesť
Bieda, ktorá mnohým spôsobuje skutočnú bolesť
Bieda, ktorá mnohým spôsobuje skutočnú bolesť
Bieda, ktorá mnohým spôsobuje skutočnú bolesť
Bieda, ktorá mnohým spôsobuje skutočnú bolesť

Bežný problém pre nadšencov Arduina je, že lacné moduly rotačných snímačov odrážajú dodatočné zmeny výstupných úrovní, čo spôsobuje dodatočné a nesprávne čítanie smerov. Tým sa zabráni bezchybnému počítaniu a znemožní sa integrácia týchto modulov do presných rotačných projektov. Tieto extra odskoky sú spôsobené mechanickými pohybmi záplat cez pripájacie kolíky a dokonca ani použitie ďalších kondenzátorov ich nemôže úplne odstrániť. Odrazy sa môžu objaviť kdekoľvek v plnom cykle kliešťov a sú ilustrované scenármi skutočného života na obrázkoch.

Krok 3: Riešenie stroja s konečným stavom (FSM)

Riešenie stroja s konečným stavom (FSM)
Riešenie stroja s konečným stavom (FSM)

Obrázok ukazuje plný stavový priestor možných zmien úrovní pre dva piny (modrý CLK a červený DT), pre správne aj falošné odrazy. Na základe tohto stavového stroja je možné naprogramovať kompletné riešenie, ktoré vždy funguje 100% presne. Pretože pri tomto riešení nie sú potrebné žiadne oneskorenia filtrovania, je tiež najrýchlejšie. Ďalšou výhodou oddelenia stavového priestoru kolíkov od pracovného režimu je, že je možné podľa vlastného uváženia použiť režimy hlasovania alebo prerušenia. Polling alebo prerušenia môžu detekovať zmeny úrovní na kolíkoch a samostatná rutina vypočíta nový stav na základe aktuálneho stavu a skutočných udalostí zmien úrovní.

Krok 4: Arduino kód

Arduino kód
Arduino kód

Nasledujúci kód počíta kliešte FWD a BWD na sériovom monitore a tiež integruje voliteľnú funkciu prepínania.

// Peter Csurgay 2019-04-10

// Rotačné kolíky mapované do portov Arduino

#define SW 21 #define CLK 22 #define DT 23

// Aktuálna a predchádzajúca hodnota počítadla vyladená rotátorom

int curVal = 0; int prevVal = 0;

// Sedem stavov FSM (konečný stavový automat)

#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;

neplatné nastavenie () {

Serial.begin (250000); Serial.println („Štart…“); // Úroveň HIGH bude predvolená pre všetky piny pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // CLK aj DT spustia prerušenia pre všetky zmeny úrovní attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }

prázdna slučka () {

// Manipulácia s voliteľným prepínačom integrovaným do niektorých rotačných kodérov if (digitalRead (SW) == LOW) {Serial.println ("Pressed"); while (! digitalRead (SW)); } // Akákoľvek zmena hodnoty počítadla sa zobrazí v programe Serial Monitor if (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}

// Prechody štátnych strojov na zmeny na úrovni CLK

neplatné rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; else if (stav == SCLK_10) stav = SCLK_00; else if (state == SDT_10) state = SDT_00; } else {if (state == SCLK_01) state = IDLE_11; else if (stav == SCLK_00) stav = SCLK_10; else if (state == SDT_00) state = SDT_10; else if (state == SDT_01) {state = IDLE_11; curVal--; }}}

// Prechody stavového stroja pre zmeny na úrovni DT

neplatné rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; else if (state == SDT_01) state = SDT_00; else if (state == SCLK_01) state = SCLK_00; } else {if (state == SDT_10) state = IDLE_11; else if (state == SDT_00) state = SDT_01; else if (stav == SCLK_00) stav = SCLK_01; else if (state == SCLK_10) {state = IDLE_11; curVal ++; }}}

Krok 5: Bezchybná integrácia

V priloženom videu si môžete overiť, že riešenie FSM funguje presne a rýchlo aj v prípade rotačných kodérov s nízkym dosahom s rôznymi sporadickými efektmi odrazu.

Odporúča: