Obsah:

Jednoduchý rotačný dekodér: 4 kroky
Jednoduchý rotačný dekodér: 4 kroky

Video: Jednoduchý rotačný dekodér: 4 kroky

Video: Jednoduchý rotačný dekodér: 4 kroky
Video: Simulační klíče 2024, Júl
Anonim
Image
Image
Jednoduchý rotačný dekodér
Jednoduchý rotačný dekodér

Tento návod popisuje jednoduchý spôsob dekódovania sekvenčného rotačného snímača pomocou Arduino Uno R3.

Kompaktné softvérové rutiny sa používajú na počítanie počtu prechodov, elimináciu odrazu kontaktov a určovanie smeru otáčania. Ďalšie komponenty a vyhľadávacie tabuľky nie sú potrebné.

K dispozícii sú verzie kódu s prerušením a bez prerušenia.

Verzia prerušenia kódu vyžaduje iba jeden PIN prerušenia.

Snímky:

  • Úvodná fotografia zobrazuje zostavený kodér.
  • Snímka obrazovky zobrazuje kód pre verziu prerušenia a počet pri otáčaní hriadeľa snímača v smere a proti smeru hodinových ručičiek.
  • Video zobrazuje počet počas rýchleho otáčania.

Krok 1: Schéma zapojenia

Schéma zapojenia
Schéma zapojenia

Schéma zapojenia snímača je znázornená na obr.1.

Prepojovacie vodiče sú spájkované priamo na kolíky kodéra.

Ak je smer počítania obrátený, vymeňte dva modré vodiče.

Krok 2: Zoznam dielov

Nasledujúce diely boli získané z

  • 1 iba Arduino UNO R3 s káblom USB.
  • 1 iba sekvenčný rotačný snímač (EC11 alebo ekvivalent) s vypínačom.
  • 1 iba gombík vhodný pre hriadeľ.
  • 3 iba prepojovacie vodiče Arduino muž-muž.

Krok 3: Teória

Teória
Teória

Sekvenčné rotačné kodéry generujú dve štvorcové vlny, z ktorých každá je posunutá o 90 stupňov, ako je znázornené na obr.

Logické vzorce na kontakte A a kontakte B sa líšia, keď sa hriadeľ otáča v polohách 1 až 6 v smere hodinových ručičiek (CW) a proti smeru hodinových ručičiek (CCW).

Bežné metódy určovania smeru otáčania zahŕňajú:

  • hardvér
  • dvojité prerušenia
  • tabuľky na vyhľadávanie vzorov

Tento projekt používa softvérovú metódu, ktorá nevyžaduje vyhľadávacie tabuľky. [1]

Smer

Namiesto toho, aby sme sa pozreli na výstupné vzorce z kontaktov A a kontaktu B, zamerajme sa na kontakt A.

Ak po každom prechode kontaktu A vzorkujeme kontakt B, všimneme si, že:

  • Keď je kodér otočený CW, kontakt A a kontakt B majú opačné logické stavy
  • Kontakt A a kontakt B majú rovnaký logický stav, keď je kodér otočený CCW

Skutočný kód:

// ----- Počítanie prechodov

CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }

Táto metóda ponúka nasledujúce výhody:

  • vyhľadávacie tabuľky nie sú povinné
  • je vyžadovaný iba jeden prerušovací riadok

Debounce

Všetky mechanické enkodéry trpia „kontaktným nárazom“.

Ak sa prepínací kontakt nevypne/nerozbije čisto, jeho logický stav bude rýchlo oscilovať od HIGH do LOW, kým sa kontakt spínača neusadí. Výsledkom sú nesprávne počty.

Jednou z metód na potlačenie odrazu kontaktu je pridanie malého kondenzátora na každý prepínací kontakt. Kondenzátor a súvisiaci zdvíhací odpor tvoria integrátor, ktorý efektívne skratuje vysoké frekvencie a umožňuje elegantne stúpať/klesať napätie prepínača.

Temnejšou stránkou tohto prístupu je, že pri rýchlom otáčaní hriadeľa snímača môžu byť prechody vynechané.

Software debouncing

Táto metóda používa dva počítadlá (otvorené, zatvorené), ktoré boli nastavené na nulu. [2]

Akonáhle je v kontakte A zistený prechod:

  • Priebežná anketa Kontakt A.
  • Zvýšte počet otvorených počítadiel a vynulujte počítadlo zatvorení vždy, keď je kontakt A VYSOKÝ.
  • Zvýšte počet zatvorených počítadiel a vynulujte počítadlo otvorení, kedykoľvek je kontakt A NÍZKY.
  • Opustite slučku, keď jeden z počítadiel dosiahne vopred určený počet. Účinne hľadáme obdobie ustáleného stavu po každom kontaktnom odskoku.

Skutočný kód:

// ----- Debounce Contact A

while (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0; // Prázdny protiľahlý integrátor Open ++; // Integrujte, ak (otvorené> MaxCount) vráti HIGH; } else {// ----- ContactA je zatvorený otvorený = 0; // Prázdny protiľahlý integrátor Zavretý ++; // Integrujte if (Closed> MaxCount) return LOW; }}

Nie je potrebné odstraňovať kontakt B, pretože prechody kontaktu A a kontaktu B sa nezhodujú.

Počítanie

Mechanická „zarážka“efektívne zdvojnásobí váš počet, pretože medzi kliknutiami sa zaznamenajú dve počty (pozri obr. 1).

Počet „aretácií“je možné určiť pomocou aritmetiky modulo 2, ako je uvedené nižšie.

Skutočný kód:

// ----- Počítajte „detenty“

if (Count % 2 == 0) {Serial.print ("Count:"); Serial.println (počet / 2); }

Referencie

Ďalšie informácie nájdete na:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

Krok 4: Softvér

Tento projekt vyžaduje najnovšiu verziu integrovaného vývojového prostredia Ardino Uno R3 IDE, ktorá je k dispozícii na adrese

Stiahnite si každú z nasledujúcich dvoch skíc Arduino (priložené)

  • rotary_encoder_1.ino (verzia pre hlasovanie)
  • rotary_encoder_2.no (prerušená verzia)

Dvakrát kliknite na požadovanú verziu a postupujte podľa pokynov na obrazovke.

Užite si to …

Kliknutím sem zobrazíte ďalšie moje pokyny.

Odporúča: