Obsah:
Video: Jednoduchý rotační dekodér: 4 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
Tento návod popisuje jednoduchou metodu dekódování sekvenčního rotačního kodéru pomocí Arduino Uno R3.
Kompaktní softwarové rutiny slouží k počítání počtu přechodů, eliminaci odrazu kontaktů a určování směru otáčení. Další součásti a vyhledávací tabulky nejsou vyžadovány.
K dispozici jsou verze kódu s přerušením a bez přerušení.
Verze přerušení kódu vyžaduje pouze jeden pin přerušení.
Snímky:
- Úvodní fotografie ukazuje sestavený kodér.
- Snímek obrazovky ukazuje kód pro verzi přerušení a počet při otáčení hřídele kodéru ve směru hodinových ručiček a proti směru hodinových ručiček.
- Video ukazuje počet během rychlého otáčení.
Krok 1: Schéma zapojení
Schéma zapojení kodéru je znázorněno na obr.1.
Propojovací vodiče jsou připájeny přímo k pinům kodéru.
Pokud je směr počítání obrácen, vyměňte dva modré vodiče.
Krok 2: Seznam dílů
Následující části byly získány z
- 1 pouze Arduino UNO R3 s kabelem USB.
- 1 pouze sekvenční rotační kodér (EC11 nebo ekvivalent) s přepínačem.
- 1 knoflík pouze vhodný pro hřídel.
- 3 pouze propojovací vodiče Arduino male-to-male.
Krok 3: Teorie
Sekvenční rotační kodéry generují dvě čtvercové vlny, z nichž každá je posunuta o 90 stupňů, jak ukazuje obrázek 1.
Logické vzorce na kontaktu A a kontaktu B se liší, když se hřídel otáčí ve směru hodinových ručiček (CW) a proti směru hodinových ručiček (CCW) přes polohy 1 až 6.
Mezi běžné metody určování směru otáčení patří:
- Hardware
- dvojitá přerušení
- tabulky pro vyhledávání vzorů
Tento projekt používá softwarovou metodu, která nevyžaduje vyhledávací tabulky. [1]
Směr
Místo pohledu na výstupní vzory z Kontaktu A a Kontaktu B se zaměřme na Kontakt A.
Pokud po každém přechodu kontaktu A vzorkujeme kontakt B, všimneme si, že:
- Když je kodér otočen CW, kontakt A a kontakt B mají opačné logické stavy
- Kontakt A a kontakt B mají při otáčení kodéru CCW stejný logický stav
Aktuální kód:
// ----- Počítat přechody
CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }
Tato metoda nabízí následující výhody:
- vyhledávací tabulky nejsou povinné
- je vyžadován pouze jeden řádek přerušení
Debounce
Všechny mechanické enkodéry trpí „kontaktním odrazem“.
Pokud se spínací kontakt nevypne/nerozbije čistě, jeho logický stav bude rychle oscilovat od VYSOKÉ do NÍZKÉ, dokud se spínací kontakt neusadí. To má za následek falešné počty.
Jednou z metod potlačení odrazu kontaktů je přidání malého kondenzátoru přes každý spínací kontakt. Kondenzátor a přidružený výsuvný odpor tvoří integrátor, který účinně zkratuje vysoké frekvence a umožňuje elegantně stoupat/klesat spínací napětí.
Nevýhodou tohoto přístupu je, že přechody mohou být vynechány, pokud se hřídel kodéru rychle otáčí.
Software debouncing
Tato metoda používá dva čítače (otevřené, uzavřené), které byly nastaveny na nulu. [2]
Jakmile je u kontaktu A detekován přechod:
- Průběžné hlasování Kontakt A.
- Zvyšte počet otevřených čítačů a resetujte zavřený čítač, kdykoli je kontakt A VYSOKÝ.
- Pokud je kontakt A NÍZKÝ, zvyšte počet zavřených počitadel a vynulujte počitadlo otevřených.
- Ukončete smyčku, když jeden z čítačů dosáhne předem stanoveného počtu. Účinně hledáme období ustáleného stavu po každém kontaktu.
Aktuální kód:
// ----- Debounce Contact A
while (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0; // Prázdný protilehlý integrátor Open ++; // Integrujte if (Open> MaxCount) return HIGH; } else {// ----- ContactA is Closed Open = 0; // Prázdný opačný integrátor Zavřeno ++; // Integrujte if (Closed> MaxCount) return LOW; }}
Kontakt B není nutné odstraňovat, protože přechody kontaktu A a kontaktu B se neshodují.
Počítací
Mechanická „zarážka“efektivně zdvojnásobí váš počet, protože mezi kliknutími se zaregistrují dvě počty (viz obr. 1).
Počet „detententů“lze určit pomocí aritmetiky modulo 2, jak je uvedeno níže.
Aktuální kód:
// ----- Spočítejte "detenty"
if (Count % 2 == 0) {Serial.print ("Count:"); Serial.println (počet / 2); }
Reference
Další informace naleznete na:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Krok 4: Software
Tento projekt vyžaduje nejnovější verzi Ardino Uno R3 IDE (integrované vývojové prostředí), která je k dispozici na adrese
Stáhněte si každý z následujících dvou skic Arduina (přiložen)
- rotary_encoder_1.ino (verze pro hlasování)
- rotary_encoder_2.no (verze s přerušením)
Poklepejte na požadovanou verzi a postupujte podle pokynů na obrazovce.
Užívat si …
Kliknutím sem zobrazíte mé další pokyny.
Doporučuje:
DIY rotační nástroj: 4 kroky
DIY rotační nástroj: V tomto pokynu vám ukážu, jak můžete vzít některé snadno dostupné materiály a zkombinovat je, abyste vytvořili rotační nástroj pro kutily! Pojďme tedy začít
Jak: Bezkontaktní rotační kodér: 3 kroky
Jak: Bezkontaktní rotační kodér: Tato aplikační poznámka popisuje, jak navrhnout vysoce spolehlivý rotační spínač nebo kodér pomocí Dialog GreenPAK ™. Tato konstrukce spínače je bezkontaktní, a proto ignoruje oxidaci kontaktů a opotřebení. Je ideální pro použití venku, kde je dlouhý
Jak vytvořit jednoduchý dekodér telefonní linky DTMF (tón): 3 kroky
Jak vytvořit jednoduchý dekodér telefonní linky DTMF (tón): Jedná se o jednoduchý projekt, který vám umožní dekódovat signály DTMF v podstatě na jakékoli telefonní lince. V tomto tutoriálu používáme dekodér MT8870D. Používáme předdefinovaný dekodér tónu, protože, věřte mi, je bolest v zadu pokusit se to udělat s
Jak použít krokový motor jako rotační kodér a OLED displej pro kroky: 6 kroků
Jak používat krokový motor jako rotační kodér a OLED displej pro kroky: V tomto tutoriálu se naučíme sledovat kroky krokového motoru na OLED displeji. Podívejte se na ukázkové video. Kredit za originální výukový program získává uživatel youtube " sky4fly "
Rotační kodér - pochopte a používejte (Arduino/jiný ΜKontrolér): 3 kroky
Rotační kodér - pochopte a používejte (Arduino/jiný Μ ovladač): Rotační kodér je elektromechanické zařízení, které převádí rotační pohyb na digitální nebo analogové informace. Může se otáčet ve směru nebo proti směru hodinových ručiček. Existují dva typy rotačních kodérů: absolutní a relativní (inkrementální) kodéry