Ako funguje rotačný kodér a jeho prepojenie s Arduinom

Ako Funguje Rotacny Koder A Jeho Prepojenie S Arduinom



Rotary Encoder je dôležité elektromechanické zariadenie, ktoré má rôznorodé využitie v oblasti elektroniky. Tento článok vysvetlí typy a fungovanie rotačného kodéra spolu s jeho prepojením s Arduino.

Čo je to rotačný kódovač

Otočný kódovač je digitálne vstupné zariadenie, ktoré sníma uhlovú polohu otočného gombíka a odosiela signály do mikrokontroléra alebo akéhokoľvek iného zariadenia, ku ktorému sú pripojené. Môžu sa otáčať o 360° bez zastavenia. Nazýva sa tiež hriadeľový kodér. Používa sa v tlačiarňach, audio elektronike, motoroch a ovládačoch.









Typy rotačných kódovačov

Existujú hlavne dva typy rotačných snímačov, o ktorých sa rozhoduje na základe nimi generovaného výstupného signálu. Tieto typy sú pomenované:



Inkrementálny rotačný kódovač

Tento typ enkodéra počíta otáčky otočného gombíka vo forme impulzov. Keď otočíte gombíkom, generuje sa impulz. Pre každý impulz sa počítadlo zvyšuje, aby indikovalo uhlovú polohu hriadeľa.





Absolútny rotačný kódovač

Tento typ snímača udáva absolútnu uhlovú polohu hriadeľa, pretože má samostatný kód pre každú polohu hriadeľa a meria uhol cez tento kód. Na poskytnutie výstupu uhlovej polohy nepotrebuje počítadlo. Aj keď je absolútny rotačný snímač bez napätia, príslušné hodnoty uhlových polôh sa zachovajú. Je to tiež lacný kódovač.



Fungovanie rotačného kodéra

Rotačný kódovač pozostáva z disku s rovnomerne rozmiestnenými oblasťami pripojenými k spoločnému kolíku C, ktorý je uzemnený. Dva ďalšie kolíky A a B sú kontaktné kolíky, ktoré sú v kontakte s C pri otáčaní otočného gombíka. Keď sa kolík A alebo B spojí so zemou, vygeneruje sa signál. Tieto signály generované z výstupných kolíkov sú fázovo posunuté o 90°. Je to preto, že kolík A sa pripojí k zemi, keď sa gombík otáča v smere hodinových ručičiek, a kolík B sa pripojí k zemi ako prvý, keď sa gombík otočí proti smeru hodinových ručičiek. Preto je smer otáčania gombíka určený prostredníctvom týchto spojení.

Ak stav B sa nerovná A , potom sa gombík otočil v smere hodinových ručičiek.


Ak sa stav B rovná A, gombík sa otočil proti smeru hodinových ručičiek.

Konfigurácia kolíkov rotačného kódovača

Nižšie uvedený diagram znázorňuje vývod otočného kódovača, ktorý zobrazuje výstupné kolíky A a B, otočný prepínač, ktorý možno použiť ako tlačidlo, a kolíky na napájanie.

Pin Popis rotačného kódovača

Nasleduje uvedený popis všetkých kolíkov rotačného kódovača.

Out B alebo CLK

Tento kolík poskytuje výstup o tom, koľkokrát sa gombík alebo otočný kódovač otočil. Zakaždým, keď otočíte gombíkom, CLK dokončí cyklus HIGH a LOW. Počíta sa to ako jedno otočenie.

Out A alebo DT

Toto je druhý výstupný kolík otočného kódovača, ktorý určuje smer otáčania. Za signálom CLK zaostáva o 90°. Preto, ak sa jeho stav nerovná stavu CLK, smer otáčania je v smere hodinových ručičiek, v opačnom prípade proti smeru hodinových ručičiek.

Prepínač

Spínací kolík sa používa na kontrolu, či je tlačidlo stlačené alebo nie.

VCC

Tento kolík je pripojený k napájaniu 5V

GND

Tento kolík je pripojený k zemi

Prepojenie rotačného kodéra s Arduino

Otočný kódovač má päť kolíkov. VCC a GND rotačného kodéra sú pripojené k Arduino. Zvyšné kolíky CLK, DT a SW sú pripojené k digitálnym vstupným kolíkom Arduina.

Arduino kód pre rotačný kodér

// Vstupy otočného kódovača
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int počítadlo = 0 ;
int aktualny CLKSstav;
int lastCLKSate;
Smer prúdu struny = '' ;
unsigned long lastButtonPressTime = 0 ;
neplatné nastavenie ( ) {
// Nastavte kolíky kódovača ako vstupy
    pinMode ( CLK_PIN, INPUT ) ;
    pinMode ( DT_PIN, INPUT ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Nastavte sériový monitor
Serial.začať ( 9600 ) ;
// Prečítajte si počiatočný stav CLK
lastCLKSate = digitalRead ( CLK_PIN ) ;
}
prázdna slučka ( ) {
// Prečítajte si aktuálny stav CLK
currentCLKSate = digitalRead ( CLK_PIN ) ;
// Ak posledný a súčasný stav CLK je iný, potom nastal pulz
// Reagovať iba na 1 zmena stavu, aby sa predišlo dvojitému započítaniu
ak ( aktuálny CLKSstav ! = posledný CLKSstav && aktuálny CLKSstav == 1 ) {
// Ak je stav DT odlišný od stavu CLK, potom
// Kodér sa otáča proti smeru hodinových ručičiek, takže sa znižuje
ak ( digitalRead ( DT_PIN ) ! = aktuálny CLKSstav ) {
pult--;
currentDirection = 'CCW' ;
} inak {
// Kodér sa otáča v smere hodinových ručičiek, preto ho zvyšujte
counter++;
currentDirection = 'CW' ;
}
Sériová.tlač ( 'Smer rotácie:' ) ;
Sériová.tlač ( currentDirection ) ;
Sériová.tlač ( ' | Protihodnota: ' ) ;
Serial.println ( počítadlo ) ;
}
// Pamätajte na posledný stav CLK
lastCLKSstav = aktuálny CLKSstav;
// Prečítajte si stav tlačidla
int buttonState = digitalRead ( SW_PIN ) ;
// Ak zaznamenáme signál LOW, tlačidlo je stlačené
ak ( buttonState == NÍZKE ) {
// Ak uplynulo 50 ms od posledný NÍZKY pulz, to znamená, že
// bolo stlačené, uvoľnené a znova stlačené
ak ( milis ( ) - lastButtonPressTime > päťdesiat ) {
Serial.println ( 'Tlačidlo stlačené!' ) ;
}
// Pamätajte na posledný udalosť stlačenia tlačidla čas
lastButtonPressTime = milis ( ) ;
}
// Dajte v mierne oneskorenie Pomoc odraziť čítanie
meškanie ( 1 ) ;
}


Vo vyššie uvedenom kóde sa stav pinu CLK kontroluje vo funkcii loop(). Ak sa nerovná predchádzajúcemu stavu, ukazuje, že sa otočný gombík otočil. Teraz, aby sme skontrolovali smer otáčania gombíka, súčasný stav CLK sa porovná so stavom DT. Ak sú oba stavy nerovnaké, ukazuje to, že sa gombík otočil v smere hodinových ručičiek a počítadlo zvyšuje jeho hodnotu, aby sa zobrazila poloha otočného gombíka. V opačnom prípade počítadlo znižuje.

Záver

Rotačné snímače sú pokročilé snímače polohy, ktoré sa môžu otáčať nepretržite. Sú dostupné v dvoch typoch: prírastkové a absolútne. Otočný kódovač funguje tak, že počíta impulzy generované otáčaním gombíka. Má rôzne aplikácie v každodennej elektronike až po priemyselnú automatizáciu.