- Rotacijski davač i njegove vrste
- KY-040 Rotacijski koder Pinout i opis
- Kako radi rotacijski koder
- Komponente potrebne
- PIC16F877A Dijagram kruga sučelja rotacijskog kodera
- Objašnjenje koda
Rotary koder je ulazni uređaj koji pomaže korisniku interakciju sa sustavom. Izgleda više poput radio potenciometra, ali odaje niz impulsa što njegovu primjenu čini jedinstvenom. Kada se okreće gumb enkodera, on se okreće u obliku malih koraka, što mu pomaže da se koristi za upravljanje koračnim / servo motorom, kretanje kroz redoslijed izbornika i povećanje / smanjenje vrijednosti broja i još mnogo toga.
U ovom ćemo članku naučiti o različitim vrstama rotacijskih kodera i kako to funkcionira. Također ćemo ga povezati s PIC mikrokontrolerom PIC16F877A i kontrolirati vrijednost cijelog broja okretanjem kodera i prikazati njegovu vrijednost na LCD zaslonu 16 * 2. Na kraju ovog vodiča bit će vam ugodno koristiti rotacijski koder za svoje projekte. Pa krenimo…
Rotacijski davač i njegove vrste
Rotacijski davač često se naziva osovinski koder. To je elektromehanički pretvarač, što znači da mehaničke pokrete pretvara u elektroničke impulse ili drugim riječima pretvara kutni položaj ili položaj kretanja ili položaja osovine u digitalni ili analogni signal. Sastoji se od gumba koji će se pri okretanju pomicati korak po korak i stvarati niz impulsnih vlakova unaprijed definirane širine za svaki korak.
Na tržištu postoji mnogo vrsta rotacijskih kodera koje dizajner može odabrati prema svojoj primjeni. Najčešće vrste navedene su u nastavku
- Inkrementalni koder
- Apsolutni koder
- Magnetski koder
- Optički koder
- Laserski koder
Ovi enkoderi klasificirani su na temelju izlaznog signala i senzorske tehnologije, inkrementalni enkoder i apsolutni enkoderi klasificirani su na temelju izlaznog signala, a magnetski, optički i laserski enkoderi klasificirani na temelju senzorske tehnologije. Davača se ovdje koristi je inkrementalni tipa davača.
Apsolutni koder pohranjuje podatke o položaju čak i nakon uklanjanja napajanja, a podaci o položaju bit će dostupni kad na njega ponovo primijenimo napajanje.
Drugi osnovni tip, inkrementalni koder, daje podatke kada koder promijeni svoj položaj. Nije mogao pohraniti podatke o položaju.
KY-040 Rotacijski koder Pinout i opis
Isječci rotacijskog kodera inkrementalnog tipa KY-040 prikazani su u nastavku. U ovom ćemo projektu povezati ovaj rotacijski koder s popularnim mikrokontrolerom PIC16F877A iz mikročipa.

Prva dva pina (uzemljenje i Vcc) koriste se za napajanje kodera, obično se koristi napajanje od + 5V. Osim rotacije gumba u smjeru kazaljke na satu i u smjeru suprotnom od kazaljke na satu, koder ima i prekidač (Active low) koji se može pritisnuti pritiskom na gumb unutar. Signal s ovog prekidača dobiva se kroz zatik 3 (SW). Napokon ima dva izlazna zatiča (DT i CLK) koji proizvode valne oblike kao što je već objašnjeno u nastavku. Ovaj smo rotacijski koder prethodno povezali s Arduinom.
Kako radi rotacijski koder
Izlaz u potpunosti ovisi o unutarnjim bakrenim pločicama koje osiguravaju vezu s GND i VCC s osovinom.

Postoje dva dijela rotacijskog kodera. Kotač osovine koji je povezan s osovinom i okreće se u smjeru kazaljke na satu ili u smjeru suprotnom od kazaljke na satu, ovisno o rotaciji osovine i osnove na kojoj se vrši električno spajanje. Baza ima priključke ili točke koji su povezani s DT ili CLK na takav način da će, kada se osovinski kotač okreće, spojiti osnovne točke i pružiti četvrtasti val na DT i CLK priključku.
Izlaz će biti kao kad se osovina okrene-

Dvije luke pružaju kvadratni val, ali postoji mala razlika u vremenu. Zbog toga, ako prihvatimo izlaz kao 1 i 0, mogu postojati samo četiri stanja, 0 0, 1 0, 1 1, 0 1. Slijed binarnog izlaza određuje okretanje u smjeru kazaljke na satu ili okretanje u suprotnom smjeru kazaljke na satu. Kao, na primjer, ako rotacijski koder daje 1 0 u stanju mirovanja i daje 1 1 nakon toga, to znači da koder mijenja svoj položaj u jednom koraku u smjeru kazaljke na satu, ali ako daje 0 0 nakon praznog hoda 1 0, znači da osovina jednim korakom mijenja svoje položaje u smjeru suprotnom od kazaljke na satu.
Komponente potrebne
Vrijeme je da prepoznamo što trebamo povezati rotacijski koder s PIC mikrokontrolerom,
- PIC16F877A
- Otpor 4.7k
- 1k otpornik
- 10k lonac
- Kondenzator s keramičkim diskom od 33pF - 2kom
- Kristal od 20 MHz
- Zaslon 16x2
- Rotacijski davač
- 5V adapter.
- Daska za kruh
- Spojne žice.
PIC16F877A Dijagram kruga sučelja rotacijskog kodera

Ispod je slika konačnog postavljanja nakon spajanja komponenata prema shemi kruga:


Upotrijebili smo jedan otpor 1K za kontrast LCD-a umjesto potenciometra. Također, pogledajte cijeli radni video zapis dat na kraju.
Objašnjenje koda
Kompletni PIC kod dat je na kraju ovog projekta s demonstracijskim video zapisom, ovdje objašnjavamo nekoliko važnih dijelova koda. Ako ste novi u PIC mikrokontroleru, slijedite naše PIC upute od početka.
Kao što smo ranije razgovarali, moramo provjeriti izlaz i razlikovati binarni izlaz i za DT i za CLK, pa smo stvorili if-else dio za operaciju.
if (Encoder_CLK! = position) { if (Encoder_DT! = position) { // lcd_com (0x01); brojač ++; // Povećaj brojač koji će se ispisivati na lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, brojač); } else { // lcd_com (0x01); lcd_com (0xC0); brojač--; // smanjenje brojača lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, brojač); // lcd_puts ("Lijevo"); } }
Također moramo pohraniti položaj na svakom koraku. Da bismo to učinili, koristili smo varijablu "pozicija" koja pohranjuje trenutnu poziciju.
pozicija = Encoder_CLK; // Spremi položaj sata kodera na varijablu. Može biti 0 ili 1.
Osim ove mogućnosti nudi se i obavijest o pritisku prekidača na LCD-u.
if (Encoder_SW == 0) { sw_delayms (20); // odgađanje ukidanja if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("prekidač pritisnut"); // itoa (brojač, vrijednost, 10); // lcd_puts (vrijednost);
System_init funkcija se koristi za inicijalizaciju pin I / O operacija, LCD i pohraniti okretne poziciju.
void system_init () { TRISB = 0x00; // PORT B kao izlaz, ovaj se port koristi za LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Ovo će inicijalizirati položaj LCD- a = Encoder_CLK; // Sotrirao je položaj CLK-a na sustavu init, prije početka while petlje. }
Funkcija LCD zapisana je na knjižnici lcd.c i lcd.h gdje su deklarirani lcd_puts (), lcd_cmd ().
Za deklaraciju varijable, konfiguracijske bitove i ostale isječke koda, u nastavku pronađite cjeloviti kôd.
