- Rotační kodér a jeho typy
- Popis a popis otočného kodéru KY-040
- Jak funguje rotační kodér
- Požadované komponenty
- Schéma zapojení rotačního kodéru PIC16F877A
- Vysvětlení kódu
Otočný je vstupní zařízení, které pomáhá uživateli k interakci se systémem. Vypadá to spíš jako rádiový potenciometr, ale vydává řadu pulzů, díky nimž je jeho aplikace jedinečná. Když se otočí knoflík kodéru, otáčí se ve formě malých kroků, což mu pomáhá při ovládání krokového / servomotoru, procházení sekvencí nabídky a zvyšování / snižování hodnoty čísla a mnoho dalšího.
V tomto článku se dozvíme o různých typech rotačních kodérů a o tom, jak to funguje. Také jej propojíme s mikrokontrolérem PIC PIC16F877A a budeme kontrolovat hodnotu celého čísla otáčením kodéru a zobrazovat jeho hodnotu na 16 * 2 LCD obrazovce. Na konci tohoto tutoriálu vám bude pohodlné používat Rotary Encoder pro vaše projekty. Pojďme tedy začít…
Rotační kodér a jeho typy
Rotační kodér se často nazývá kodér hřídele. Jedná se o elektromechanický měnič, což znamená, že převádí mechanické pohyby na elektronické pulsy nebo jinými slovy převádí úhlovou polohu nebo polohu pohybu nebo hřídele na digitální nebo analogový signál. Skládá se z knoflíku, který se při otáčení bude krok za krokem pohybovat a vytvářet sekvenci sledů pulzů s předdefinovanou šířkou pro každý krok.
Na trhu existuje mnoho typů rotačních kodérů, které si designér může vybrat podle své aplikace. Nejběžnější typy jsou uvedeny níže
- Inkrementální kodér
- Absolutní kodér
- Magnetický kodér
- Optický kodér
- Laserový kodér
Tyto kodéry jsou klasifikovány na základě výstupního signálu a snímací technologie, inkrementální kodér a absolutní kodéry jsou klasifikovány na základě výstupního signálu a magnetický, optický a laserový kodér jsou klasifikovány na základě snímací technologie. Zde používaný kodér je kódovač přírůstkového typu.
Kodér absolutních hodnot ukládá informace o poloze i po odpojení napájení a informace o poloze budou k dispozici, až na něj znovu připojíme energii.
Druhý základní typ, inkrementální kodér, poskytuje data, když kodér změní svou polohu. Nelze uložit informace o poloze.
Popis a popis otočného kodéru KY-040
Níže jsou zobrazeny vývody rotačního kodéru inkrementálního typu KY-040. V tomto projektu propojíme tento rotační kodér s populárním mikrokontrolérem PIC16F877A z mikročipu.
První dva piny (zem a Vcc) se používají k napájení kodéru, obvykle se používá napájení + 5V. Kromě otáčení knoflíku ve směru hodinových ručiček a proti směru hodinových ručiček má kodér také spínač (Aktivní nízký), který lze stisknout stisknutím knoflíku uvnitř. Signál z tohoto přepínače je získáván přes kolík 3 (SW). Nakonec má dva výstupní piny (DT a CLK), které vytvářejí průběhy, jak již bylo uvedeno níže. Tento rotační kodér jsme dříve propojili s Arduino.
Jak funguje rotační kodér
Výstup zcela závisí na vnitřních měděných podložkách, které zajišťují spojení s GND a VCC s hřídelí.
Rotační kodér má dvě části. Hřídelové kolo, které je spojeno s hřídelí a otáčí se ve směru nebo proti směru hodinových ručiček v závislosti na otáčení hřídele a základně, kde je provedeno elektrické připojení. Základna má porty nebo body, které jsou připojeny k DT nebo CLK takovým způsobem, že když se otáčí hřídelové kolo, spojí základní body a poskytne obdélníkovou vlnu na obou portech DT a CLK.
Výstup bude jako při otáčení hřídele -
Dva porty poskytují obdélníkovou vlnu, ale v načasování je malý rozdíl. Z tohoto důvodu, pokud přijmeme výstup jako 1 a 0, mohou existovat pouze čtyři stavy, 0 0, 1 0, 1 1, 0 1. Pořadí binárního výstupu určuje otáčení ve směru nebo proti směru hodinových ručiček. Například, pokud Rotary Encoder poskytuje 1 0 v klidovém stavu a poté poskytuje 1 1, znamená to změnu kodéru, je to jeden krok ve směru hodinových ručiček, ale pokud poskytuje 0 0 po volnoběhu 1 0, znamená, že hřídel se mění ve svých polohách proti směru hodinových ručiček s jedním krokem.
Požadované komponenty
Je čas určit, co potřebujeme k propojení Rotary Encoder s PIC Microcontroller,
- PIC16F877A
- 4,7k rezistor
- 1k rezistor
- 10k hrnec
- Keramický diskový kondenzátor 33pF - 2ks
- 20MHz krystal
- 16x2 displej
- Rotační enkodér
- 5V adaptér.
- Chlebová deska
- Propojovací vodiče.
Schéma zapojení rotačního kodéru PIC16F877A
Níže je obrázek konečného nastavení po připojení komponent podle schématu zapojení:
Použili jsme jeden 1K rezistor pro kontrast LCD místo použití potenciometru. Zkontrolujte také úplné pracovní video uvedené na konci.
Vysvětlení kódu
Kompletní PIC kód je uveden na konci tohoto projektu s ukázkovým videem, zde vysvětlujeme několik důležitých částí kódu. Pokud jste s mikrokontrolérem PIC noví, postupujte od začátku podle našich výukových programů PIC.
Jak jsme již diskutovali dříve, musíme zkontrolovat výstup a rozlišit binární výstup pro DT i CLK, takže jsme pro operaci vytvořili část if-else .
if (Encoder_CLK! = position) { if (Encoder_DT! = position) { // lcd_com (0x01); counter ++; // Zvýší počitadlo, které bude vytištěno na lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, počítadlo); } else { // lcd_com (0x01); lcd_com (0xC0); čelit--; // snížit počítadlo lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, počítadlo); // lcd_puts ("Vlevo"); } }
Musíme také uložit pozici na každém kroku. K tomu jsme použili proměnnou „pozici“, která ukládá aktuální pozici.
position = Encoder_CLK; // Je to k uložení pozice hodin kodéru na proměnné. Může být 0 nebo 1.
Kromě této možnosti je k dispozici možnost upozornit na stisknutí spínače na LCD.
if (Encoder_SW == 0) { sw_delayms (20); // zpoždění debounce if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("spínač stisknutý"); // itoa (počitadlo, hodnota, 10); // lcd_puts (hodnota);
System_init funkce se používá k inicializaci pin I / O operace, LCD a pro uložení polohy rotační snímač.
void system_init () { TRISB = 0x00; // PORT B jako výstup, Tento port se používá pro LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Tím se inicializuje poloha LCD = Encoder_CLK; // Před spuštěním smyčky while se poloha CLK v systému inicializuje. }
Funkce LCD je zapsána do knihoven lcd.c a lcd.h, kde jsou deklarovány lcd_puts (), lcd_cmd ().
Deklaraci proměnné, konfigurační bity a další fragmenty kódu naleznete níže v úplném kódu.