Rotary Encoder je důležité elektromechanické zařízení, které má rozmanité využití v oblasti elektroniky. Tento článek vysvětlí typy a fungování rotačního kodéru spolu s jeho propojením s Arduinem.
Co je rotační kodér
Otočný kodér je digitální vstupní zařízení, které snímá úhlovou polohu otočného knoflíku a posílá signály do mikrokontroléru nebo jakéhokoli jiného zařízení, ke kterému jsou připojeny. Mohou se otáčet o 360° bez zastavení. Říká se mu také hřídelový kodér. Používá se v tiskárnách, audio elektronice, motorech a ovladačích.
Typy rotačních kodérů
Existují hlavně dva typy rotačních kodérů, které se rozhodují na základě výstupního signálu, který generují. Tyto typy se jmenují:
Inkrementální rotační kodér
Tento typ kodéru počítá otáčky otočného knoflíku ve formě impulsů. Když jednou otočíte knoflíkem, generuje se pulz. Pro každý impuls se počítadlo zvyšuje, aby indikovalo úhlovou polohu hřídele.
Absolutní rotační kodér
Tento typ kodéru udává absolutní úhlovou polohu hřídele, protože má samostatný kód pro každou polohu hřídele a měří úhel přes tento kód. Pro výstup úhlové polohy nepotřebuje čítač. I když je absolutní rotační kodér bez napětí, příslušné hodnoty úhlových poloh zůstanou zachovány. Je to také levný kodér.
Práce rotačního kodéru
Rotační kodér se skládá z disku se stejně rozmístěnými oblastmi připojeného ke společnému kolíku C, který je uzemněn. Dva další kolíky A a B jsou kontaktní kolíky, které jsou v kontaktu s C při otáčení otočného knoflíku. Když se pin A nebo B spojí se zemí, generuje se signál. Tyto signály generované z výstupních pinů jsou fázově posunuty o 90°. Je to proto, že kolík A se připojí k zemi, když otočíte knoflíkem ve směru hodinových ručiček, a kolík B se připojí k zemi jako první, když otočíte knoflíkem proti směru hodinových ručiček. Směr otáčení knoflíku je tedy určen těmito spoji.
Pokud je stav B se nerovná A , pak se knoflík otočil ve směru hodinových ručiček.
Pokud je stav B roven A, knoflík se otočil proti směru hodinových ručiček.
Konfigurace kolíků otočného kodéru
Níže uvedené schéma ukazuje vývod otočného kodéru, který ukazuje výstupní kolíky A a B, otočný přepínač, který lze použít jako tlačítko, a kolíky pro napájení.
Pin Popis rotačního kodéru
Následuje popis všech kolíků otočného kodéru.
Out B nebo CLK
Tento kolík udává, kolikrát se knoflík nebo otočný kodér otočil. Pokaždé, když otočíte knoflíkem, CLK dokončí cyklus HIGH a LOW. Počítá se to jako jedno otočení.
Out A nebo DT
Toto je druhý výstupní kolík otočného kodéru, který určuje směr otáčení. Za signálem CLK zaostává o 90°. Pokud se tedy jeho stav nerovná stavu CLK, směr otáčení je ve směru hodinových ručiček, v opačném případě proti směru hodinových ručiček.
Přepínač
Spínací špendlík se používá ke kontrole, zda je tlačítko stisknuto nebo ne.
VCC
Tento pin je připojen k napájení 5V
GND
Tento kolík je připojen k zemi
Propojení rotačního kodéru s Arduinem
Otočný kodér má pět kolíků. VCC a GND rotačního kodéru jsou připojeny k Arduinu. Zbývající piny CLK, DT a SW jsou připojeny k digitálním vstupním pinům Arduina.
Arduino kód pro rotační kodér
// Vstupy otočného kodéru
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int čítač = 0 ;
int aktuálníCLKStav;
int lastCLKSate;
Směr proudu řetězce = '' ;
unsigned long lastButtonPressTime = 0 ;
neplatné nastavení ( ) {
// Nastavte piny kodéru tak jako vstupy
pinMode ( CLK_PIN, INPUT ) ;
pinMode ( DT_PIN, INPUT ) ;
pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Nastavení sériového monitoru
Serial.begin ( 9600 ) ;
// Přečtěte si počáteční stav CLK
lastCLKSate = digitalRead ( CLK_PIN ) ;
}
prázdná smyčka ( ) {
// Přečtěte si aktuální stav ČLK
currentCLKSate = digitalRead ( CLK_PIN ) ;
// Pokud poslední a současný stav CLK je jiný, pak došlo k pulzu
// Reagovat pouze na 1 změna stavu, aby se zabránilo dvojímu započtení
-li ( aktuální stav CLKS ! = poslední CLKSstav && aktuální CLKStav == 1 ) {
// Pokud je stav DT jiný než stav CLK, pak
// Kodér se otáčí proti směru hodinových ručiček, takže se snižuje
-li ( digitální čtení ( DT_PIN ) ! = aktuální stav CLKS ) {
čelit--;
currentDirection = 'CCW' ;
} jiný {
// Kodér se otáčí ve směru hodinových ručiček, takže zvyšujte
čítač++;
currentDirection = 'CW' ;
}
Sériový.tisk ( 'Směr otáčení:' ) ;
Sériový.tisk ( currentDirection ) ;
Sériový.tisk ( ' | Protihodnota: ' ) ;
Serial.println ( čelit ) ;
}
// Pamatujte si poslední stav CLK
lastCLKState = aktuálníCLKSstav;
// Přečtěte si stav tlačítka
int buttonState = digitalRead ( SW_PIN ) ;
// Pokud detekujeme signál LOW, je tlačítko stisknuto
-li ( buttonState == NÍZKÁ ) {
// Pokud uplynulo 50 ms od poslední NÍZKÝ puls, to znamená, že
// bylo stisknuto, uvolněno a znovu stisknuto tlačítko
-li ( milis ( ) - lastButtonPressTime > padesáti ) {
Serial.println ( 'Tlačítko stisknuto!' ) ;
}
// Pamatujte si poslední událost stisknutí tlačítka čas
lastButtonPressTime = milis ( ) ;
}
// Dát v mírné zpoždění Pomoc odrazit čtení
zpoždění ( 1 ) ;
}
Ve výše uvedeném kódu se stav pinu CLK kontroluje ve funkci loop(). Pokud se nerovná předchozímu stavu, ukazuje, že se otočný knoflík otočil. Nyní, pro kontrolu směru otáčení knoflíku, je aktuální stav CLK porovnán se stavem DT. Pokud jsou oba stavy nestejné, ukazuje to, že se knoflík otočil ve směru hodinových ručiček a počitadlo zvyšuje jeho hodnotu, aby se zobrazila poloha otočného knoflíku. V opačném případě počítadlo snižuje.
Závěr
Rotační snímače jsou pokročilé snímače polohy, které se mohou otáčet nepřetržitě. Jsou k dispozici ve dvou typech: přírůstkové a absolutní. Otočný kodér funguje tak, že počítá impulsy generované otáčením knoflíku. Má různé aplikace v každodenní elektronice až po průmyslovou automatizaci.