- Codificator rotativ și tipurile sale
- KY-040 Pinout Encoder Pinout și descriere
- Cum funcționează codificatorul rotativ
- Componente necesare
- Diagrama circuitului de interfațare a codificatorului rotativ PIC16F877A
- Explicarea codului
Un codificator rotativ este un dispozitiv de intrare care ajută utilizatorul să interacționeze cu un sistem. Arată mai mult ca un potențiometru radio, dar generează un tren de impulsuri, ceea ce face ca aplicația sa să fie unică. Când butonul codificatorului este rotit, acesta se rotește sub formă de pași mici, ceea ce îl ajută să fie utilizat pentru controlul pasului / servomotorului, navigând printr-o secvență a meniului și mărind / micșorând valoarea unui număr și multe altele.
În acest articol, vom afla despre diferitele tipuri de codificatoare rotative și cum funcționează. De asemenea , îl vom interfața cu microcontrolerul PIC PIC16F877A și vom controla valoarea unui număr întreg prin rotirea codificatorului și vom afișa valoarea acestuia pe un ecran LCD de 16 * 2. La sfârșitul acestui tutorial, vă veți simți confortabil cu utilizarea unui codificator rotativ pentru proiectele dvs. Deci sa începem…
Codificator rotativ și tipurile sale
Codificatorul rotativ numit adesea codificator cu arbore. Este un traductor electromecanic, adică transformă mișcările mecanice în impulsuri electronice sau, cu alte cuvinte, convertește poziția unghiulară sau mișcarea sau poziția arborelui într-un semnal digital sau analogic. Se compune dintr-un buton care, atunci când se rotește, se va deplasa pas cu pas și va produce o secvență de trenuri de impulsuri cu lățime predefinită pentru fiecare pas.
Există multe tipuri de codificator rotativ pe piață, proiectantul poate alege unul în funcție de aplicația sa. Cele mai frecvente tipuri sunt enumerate mai jos
- Codificator incremental
- Codificator absolut
- Codificator magnetic
- Codificator optic
- Codificator laser
Aceste codificatoare sunt clasificate pe baza semnalului de ieșire și a tehnologiei de detectare, codificatorul incremental și codificatoarele absolute sunt clasificate pe baza semnalului de ieșire, iar codificatorul magnetic, optic și laser sunt clasificate pe baza tehnologiei de detectare. Encoder folosit aici este un tip de traductor incremental.
Codificatorul absolut stochează informațiile de poziție chiar și după ce alimentarea este scoasă, iar informațiile de poziție vor fi disponibile atunci când îi vom aplica din nou energie.
Celălalt tip de bază, codificatorul incremental, oferă date atunci când codificatorul își schimbă poziția. Nu a putut stoca informațiile despre poziție.
KY-040 Pinout Encoder Pinout și descriere
Pinout -urile codificatorului rotativ de tip incremental KY-040 sunt prezentate mai jos. În acest proiect, vom interfața acest codificator rotativ cu popularul microcontroler PIC16F877A de la microcip.
Primii doi pini (masă și Vcc) sunt utilizați pentru alimentarea codificatorului, de obicei se utilizează o sursă de + 5V. În afară de rotirea butonului în sensul acelor de ceasornic și în sens invers acelor de ceasornic, codificatorul are și un comutator (activ activ) care poate fi apăsat apăsând butonul din interior. Semnalul de la acest comutator este obținut prin pinul 3 (SW). În cele din urmă are cei doi pini de ieșire (DT și CLK) care produc formele de undă așa cum s-a discutat mai jos. Am interfațat anterior acest codificator rotativ cu Arduino.
Cum funcționează codificatorul rotativ
Ieșirea depinde în întregime de tampoanele de cupru interne care asigură conexiunea cu GND și VCC cu arborele.
Există două părți ale codificatorului rotativ. Roata arborelui care este conectată cu arborele și se rotește în sensul acelor de ceasornic sau în sens invers acelor de ceasornic în funcție de rotația arborelui și de baza unde se realizează conexiunea electrică. Baza are porturi sau puncte care sunt conectate la DT sau CLK în așa fel încât, atunci când roata arborelui se rotește, va conecta punctele de bază și va oferi unda pătrată atât pe portul DT, cât și pe portul CLK.
Ieșirea va fi ca atunci când arborele se rotește-
Două porturi asigură unda pătrată, dar există o ușoară diferență în momentul. Datorită acestui fapt, dacă acceptăm ieșirea ca 1 și 0, pot exista doar patru stări, 0 0, 1 0, 1 1, 0 1. Secvența ieșirii binare determină rotirea în sensul acelor de ceasornic sau în sens invers acelor de ceasornic. De exemplu, dacă codificatorul rotativ oferă 1 0 în stare de repaus și oferă 1 1 după aceea, asta înseamnă că codificatorul își schimbă poziția cu un singur pas în sensul acelor de ceasornic, dar dacă furnizează 0 0 după pauză 1 0, înseamnă că arborele își schimbă pozițiile în sens invers acelor de ceasornic cu un singur pas.
Componente necesare
Este timpul să identificăm de ce avem nevoie pentru a interfața codificatorul rotativ cu microcontrolerul PIC,
- PIC16F877A
- Rezistor de 4.7k
- 1k rezistor
- Oala de 10k
- Condensator de disc ceramic 33pF - 2buc
- Cristal de 20Mhz
- Afișaj 16x2
- Rotativ
- Adaptor de 5V.
- Pâine
- Sârme de conectare.
Diagrama circuitului de interfațare a codificatorului rotativ PIC16F877A
Mai jos este imaginea configurării finale după conectarea componentelor conform schemei de circuite:
Am folosit un singur rezistor de 1K pentru contrastul LCD-ului în loc să folosim un potențiometru. De asemenea, verificați videoclipul complet de lucru dat la final.
Explicarea codului
Codul PIC complet este dat la sfârșitul acestui proiect cu un videoclip demonstrativ, aici explicăm câteva părți importante ale codului. Dacă sunteți nou cu microcontrolerul PIC, urmați tutorialele noastre PIC de la început.
După cum am discutat anterior, trebuie să verificăm ieșirea și să diferențiem ieșirea binară atât pentru DT, cât și pentru CLK, așa că am creat o parte if-else pentru operație.
if (Encoder_CLK! = position) { if (Encoder_DT! = position) { // lcd_com (0x01); contor ++; // Măriți contorul care va fi imprimat pe lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, contor); } else { // lcd_com (0x01); lcd_com (0xC0); tejghea--; // micșorați contorul lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, contor); // lcd_puts („Stânga”); } }
De asemenea, trebuie să stocăm poziția la fiecare pas. Pentru a face acest lucru, am folosit o „poziție” variabilă care stochează poziția curentă.
poziție = Codificator_CLK; // Este pentru a stoca poziția ceasului codificatorului pe variabilă. Poate fi 0 sau 1.
În afară de aceasta, este disponibilă o opțiune pentru a notifica despre apăsarea comutatorului pe LCD.
if (Encoder_SW == 0) { sw_delayms (20); // întârziere debounce dacă (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("comutator apăsat"); // itoa (contor, valoare, 10); // lcd_puts (valoare);
System_init Funcția este utilizată pentru a inițializa PIN - ul I / O operațiune, LCD și pentru a stoca poziția codificator rotativ.
void system_init () { TRISB = 0x00; // PORT B ca ieșire, Acest port este utilizat pentru LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Aceasta va inițializa poziția LCD = Encoder_CLK; // Sotred poziția CLK la inițierea sistemului, înainte de începerea buclei while. }
Funcția LCD este scrisă pe biblioteca lcd.c și lcd.h unde sunt declarate lcd_puts (), lcd_cmd ().
Pentru declarația variabilă, biții de configurare și alte fragmente de cod, găsiți codul complet mai jos.