- Rotačný kódovač a jeho typy
- KY-040 Rotačný kódovací konektor a popis
- Ako funguje rotačný kódovač
- Súčasti sú povinné
- Schéma zapojenia otočného kódovacieho zariadenia PIC16F877A
- Vysvetlenie kódu
Otočný je vstupné zariadenie, ktoré pomáha užívateľovi k interakcii so systémom. Vyzerá skôr ako rádiový potenciometer, ale na výstup dáva sériu impulzov, vďaka čomu je jeho aplikácia jedinečná. Keď je gombík enkodéra otočený, otáča sa vo forme malých krokov, čo mu pomáha pri ovládaní krokovým / servomotorom, prechádzaním sekvenciou ponuky a zvyšovaním / znižovaním hodnoty čísla a oveľa viac.
V tomto článku sa dozvieme o rôznych druhoch rotačných kódovačov a o tom, ako to funguje. Taktiež ho prepojíme s mikrokontrolérom PIC PIC16F877A a budeme riadiť hodnotu celého čísla otáčaním kódovacieho zariadenia a zobrazovať jeho hodnotu na 16 * 2 LCD obrazovke. Na konci tohto tutoriálu vám bude pohodlné používať rotačný kódovač pre svoje projekty. Tak poďme na to…
Rotačný kódovač a jeho typy
Rotačný kódovač sa často nazýva aj kódovač hriadeľa. Je to elektromechanický prevodník, čo znamená, že prevádza mechanické pohyby na elektronické impulzy alebo inými slovami, prevádza uhlovú polohu alebo pohyb alebo polohu hriadeľa na digitálny alebo analógový signál. Skladá sa z gombíka, ktorý sa pri otáčaní bude krok za krokom pohybovať a vytvárať sekvenciu sledov impulzov s preddefinovanou šírkou pre každý krok.
Na trhu existuje veľa druhov rotačných kódovačov, ktoré si konštruktér môže zvoliť podľa svojej aplikácie. Najbežnejšie typy sú uvedené nižšie
- Inkrementálny kódovač
- Absolútny kódovač
- Magnetický kódovač
- Optický kódovač
- Laserový kódovač
Tieto kódovacie zariadenia sú klasifikované na základe výstupného signálu a snímacej technológie, prírastkové snímače a absolútne snímače sú klasifikované na základe výstupného signálu a magnetické, optické a laserové snímače sú klasifikované na základe snímacej technológie. Encoder tu používa prírastkové typ snímača.
Kodér absolútnej hodnoty ukladá informácie o polohe aj po odpojení napájania a informácie o polohe budú k dispozícii, keď na ne znova pripojíme napájanie.
Ďalším základným typom je inkrementálny kódovač, ktorý poskytuje údaje, keď kodér zmení svoju polohu. Nemohlo sa uložiť informácie o polohe.
KY-040 Rotačný kódovací konektor a popis
Pinouty rotačného kódovača inkrementálneho typu KY-040 sú uvedené nižšie. V tomto projekte prepojíme tento rotačný kódovač s populárnym mikrokontrolérom PIC16F877A z mikročipu.
Prvé dva piny (zem a Vcc) sa používajú na napájanie enkodéra, zvyčajne sa používa napájanie + 5 V. Okrem otáčania gombíka v smere hodinových ručičiek a proti smeru hodinových ručičiek má kodér aj prepínač (aktívne nízko), ktorý je možné stlačiť stlačením gombíka vo vnútri. Signál z tohto prepínača sa získava cez pin 3 (SW). Nakoniec má dva výstupné piny (DT a CLK), ktoré vytvárajú krivky, ako už bolo uvedené nižšie. Tento rotačný kodér sme predtým prepojili s rozhraním Arduino.
Ako funguje rotačný kódovač
Výkon úplne závisí od vnútorných medených podložiek, ktoré zaisťujú spojenie s GND a VCC s hriadeľom.
Rotačný kódovač sú dve časti. Hriadeľové koleso, ktoré je spojené s hriadeľom a otáča sa v smere alebo proti smeru hodinových ručičiek v závislosti od otáčania hriadeľa a základne, kde sa vykonáva elektrické pripojenie. Základňa má porty alebo body, ktoré sú pripojené k DT alebo CLK takým spôsobom, že keď sa hriadeľové koleso otáča, spojí základné body a poskytne štvorcovú vlnu na oboch portoch DT a CLK.
Výstup bude ako pri otáčaní hriadeľa -
Dva porty poskytujú štvorcovú vlnu, ale v načasovaní je mierny rozdiel. Z tohto dôvodu, ak prijmeme výstup ako 1 a 0, môžu existovať iba štyri stavy, 0 0, 1 0, 1 1, 0 1. Postupnosť binárneho výstupu určuje otočenie v smere alebo proti smeru hodinových ručičiek. Napríklad, ak Rotary Encoder poskytuje 1 0 v nečinnom stave a poskytuje 1 1 po tom, znamená to, že sa kódovač zmení, je to o krok v smere hodinových ručičiek, ale ak poskytuje 0 0 po nečinnosti 1 0, znamená, že hriadeľ mení svoje polohy v jednom smere proti smeru hodinových ručičiek.
Súčasti sú povinné
Je čas určiť, čo potrebujeme na prepojenie rotačného enkodéra s mikrokontrolérom PIC,
- PIC16F877A
- 4,7k rezistor
- 1k rezistor
- 10k hrniec
- Keramický diskový kondenzátor 33pF - 2ks
- 20Mhz kryštál
- Displej 16x2
- Rotačný kódovač
- 5V adaptér.
- Chlebová doska
- Pripojovacie vodiče.
Schéma zapojenia otočného kódovacieho zariadenia PIC16F877A
Nasleduje obrázok konečného nastavenia po pripojení komponentov podľa schémy zapojenia:
Namiesto potenciometra sme na kontrast LCD použili jediný rezistor 1K. Skontrolujte tiež celé pracovné video uvedené na konci.
Vysvetlenie kódu
Kompletný PIC kód je uvedený na konci tohto projektu s demonštračným videom, tu vysvetľujeme niekoľko dôležitých častí kódu. Ak ste v mikrokontroléri PIC nováčikom, postupujte od začiatku podľa našich návodov PIC.
Ako sme už diskutovali predtým, musíme skontrolovať výstup a odlíšiť binárny výstup pre DT aj CLK, preto sme pre operáciu vytvorili časť if-else .
if (Encoder_CLK! = position) { if (Encoder_DT! = position) { // lcd_com (0x01); pult ++; // Zväčší počítadlo, ktoré sa vytlačí na lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, počítadlo); } else { // lcd_com (0x01); lcd_com (0xC0); pult--; // zmenšiť počítadlo lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, počítadlo); // lcd_puts ("vľavo"); } }
Musíme tiež uložiť pozíciu na každom kroku. K tomu sme použili premennú „pozíciu“, ktorá ukladá aktuálnu pozíciu.
pozícia = Encoder_CLK; // Slúži na uloženie pozície hodín kódovacieho zariadenia na premennej. Môže byť 0 alebo 1.
Okrem tejto možnosti je k dispozícii možnosť upozorniť na stlačenie spínača na LCD displeji.
if (Encoder_SW == 0) { sw_delayms (20); // oneskorenie debounce if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("stlačený spínač"); // itoa (počitadlo, hodnota, 10); // lcd_puts (hodnota);
System_init funkcie sa používa k inicializácii pin I / O operácie, LCD a pre uloženie polohy rotačný snímač.
void system_init () { TRISB = 0x00; // PORT B ako výstup, Tento port sa používa pre LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Týmto sa inicializuje poloha LCD = Encoder_CLK; // Pozícia CLK sa pred spustením cyklu while zafixuje na pozíciu systému. }
Funkcia LCD je zapísaná do knižnice lcd.c a lcd.h, kde sú deklarované lcd_puts (), lcd_cmd ().
Deklaráciu premennej, konfiguračné bity a ďalšie útržky kódu nájdete v úplnom znení nižšie.