- Rotacijski dajalnik in njegove vrste
- KY-040 Rotacijski dajalnik Izrez in opis
- Kako deluje rotacijski dajalnik
- Potrebne komponente
- PIC16F877A Diagram vezja rotacijskega dajalnika
- Razlaga kode
Dajalnik je vhodna naprava, ki omogoča uporabniku, da komunicira s sistemom. Izgleda bolj kot radijski potenciometer, vendar oddaja niz impulzov, zaradi česar je njegova uporaba edinstvena. Ko se gumb dajalnika zasuka, se vrti v obliki majhnih korakov, kar mu pomaga pri uporabi koračnega / servo motorja, krmarjenju po zaporedju menija in povečanju / zmanjšanju vrednosti števila in še veliko več.
V tem članku bomo spoznali različne vrste rotacijskih dajalnikov in kako to deluje. Povezali ga bomo tudi s PIC mikrokrmilnikom PIC16F877A in z vrtenjem dajalnika nadzirali vrednost celotnega števila ter prikazovali njegovo vrednost na 16 * 2 LCD zaslonu. Na koncu te vadnice boste udobno uporabljali rotacijski kodirnik za svoje projekte. Začnimo torej…
Rotacijski dajalnik in njegove vrste
Rotacijski dajalnik se pogosto imenuje dajalnik gredi. Je elektromehanski pretvornik, kar pomeni, da mehanske gibe pretvori v elektronske impulze ali z drugimi besedami pretvori kotni položaj ali gibanje ali položaj gredi v digitalni ali analogni signal. Sestavljen je iz gumba, ki se pri vrtenju premika korak za korakom in ustvarja zaporedje impulznih vlakov z vnaprej določeno širino za vsak korak.
Na trgu obstaja veliko vrst rotacijskih dajalnikov, ki jih lahko oblikovalec izbere glede na svojo aplikacijo. Spodaj so navedeni najpogostejši tipi
- Inkrementalni kodirnik
- Absolutni kodirnik
- Magnetni dajalnik
- Optični dajalnik
- Laserski dajalnik
Ti dajalniki so razvrščeni na podlagi izhodnega signala in zaznavalne tehnologije, inkrementalni dajalnik in absolutni dajalniki so razvrščeni na podlagi izhodnega signala, magnetni, optični in laserski dajalniki pa na podlagi senzorske tehnologije. Tu uporabljen dajalnik je inkrementalni dajalnik.
Dajalnik absolutnih podatkov o položaju shrani tudi po tem, ko je napajanje odpravljeno, podatki o položaju pa bodo na voljo, ko bomo nanj ponovno vklopili napajanje.
Drugi osnovni tip, inkrementalni dajalnik, zagotavlja podatke, ko dajalnik spremeni svoj položaj. Podatkov o položaju ni bilo mogoče shraniti.
KY-040 Rotacijski dajalnik Izrez in opis
Izpusti rotacijskega dajalnika KY-040 Incremental so prikazani spodaj. V tem projektu bomo ta rotacijski dajalnik povezali s priljubljenim mikrokrmilnikom PIC16F877A iz mikročipa.
Prva dva zatiča (Ground in Vcc) se uporabljata za napajanje dajalnika, običajno se uporablja napajanje + 5V. Dajalnik poleg vrtenja gumba v smeri urnega kazalca in v nasprotni smeri urnega kazalca ima tudi stikalo (Active low), ki ga lahko pritisnete s pritiskom gumba v notranjosti. Signal s tega stikala dobimo prek zatiča 3 (SW). Na koncu ima še dva izhodna zatiča (DT in CLK), ki tvorita valovne oblike, kot je že razloženo spodaj. Ta rotacijski dajalnik smo že povezali z Arduinom.
Kako deluje rotacijski dajalnik
Izhod je v celoti odvisen od notranjih bakrenih blazinic, ki zagotavljajo povezavo z GND in VCC z gredjo.
Obstajata dva dela rotacijskega dajalnika. Kolo gredi, ki je povezano z gredjo in se vrti v smeri urnega kazalca ali v nasprotni smeri urnega kazalca, odvisno od vrtenja gredi in podstavka, kjer je izvedena električna povezava. Podnožje ima vrata ali točke, ki so povezane z DT ali CLK na tak način, da bo, ko se kolo gredi zasuka, povezalo osnovne točke in zagotovilo kvadratnega vala na vratih DT in CLK.
Izhod bo takšen, ko se gred vrti -
Dve vrati zagotavljata kvadratni val, vendar je v času majhna razlika. Zaradi tega, če sprejemamo izhod kot 1 in 0, so lahko samo štiri stanja, 0 0, 1 0, 1 1, 0 1. Zaporedje binarnega izhoda določa obrat v smeri urnega kazalca ali obrat v levo. Tako kot na primer, če rotacijski dajalnik zagotavlja 1 0 v stanju mirovanja in zagotavlja 1 1 po tem, to pomeni, da dajalnik spremeni svoj položaj za en korak v smeri urinega kazalca, če pa 0 0 po prostem teku 0, pomeni, da gred z enim korakom spreminja svoje položaje v nasprotni smeri urnega kazalca.
Potrebne komponente
Čas je, da ugotovimo, kaj moramo povezati rotacijski dajalnik z mikrokrmilnikom PIC,
- PIC16F877A
- 4.7k upor
- 1k upor
- 10k lonec
- 33pF keramični kondenzator kolutov - 2 kos
- Kristal 20 MHz
- 16x2 zaslon
- Rotacijski dajalnik
- 5V adapter.
- Odbor za kruh
- Priključne žice.
PIC16F877A Diagram vezja rotacijskega dajalnika
Spodaj je slika končne nastavitve po priključitvi komponent v skladu z vezjem:
Namesto potenciometra smo uporabili en 1K upor za kontrast LCD-ja. Preverite tudi celoten delujoči video na koncu.
Razlaga kode
Popolna koda PIC je podana na koncu tega projekta z demonstracijskim videoposnetkom, tukaj razlagamo nekaj pomembnih delov kode. Če ste nov pri PIC Microcontrollerju, sledite našim PIC vadnicam od začetka.
Kot smo že razpravljali, moramo preveriti izhod in ločiti binarni izhod tako za DT kot za CLK, zato smo za operacijo ustvarili del if-else .
if (Encoder_CLK! = position) { if (Encoder_DT! = position) { // lcd_com (0x01); števec ++; // Povečaj števec, ki bo natisnjen na lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, števec); } else { // lcd_com (0x01); lcd_com (0xC0); števec--; // zmanjšanje števca lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, števec); // lcd_puts ("Levo"); } }
Prav tako moramo shraniti položaj na vsakem koraku. Za to smo uporabili spremenljivko “position”, ki shranjuje trenutni položaj.
position = Encoder_CLK; // Shrani položaj ure dajalnika na spremenljivko. Lahko je 0 ali 1.
Poleg tega je na voljo možnost obveščanja o pritisku stikala na LCD-prikazovalniku.
if (Encoder_SW == 0) { sw_delayms (20); // odložitev zamude if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("stikalo pritisnjeno"); // itoa (števec, vrednost, 10); // lcd_puts (vrednost);
System_init funkcija se uporablja za inicializacijo oplazil I / O operacijo, LCD in hraniti položaj dajalnik.
void system_init () { TRISB = 0x00; // PORT B kot izhod, ta vrata se uporabljajo za LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // To bo inicializiralo položaj LCD = Encoder_CLK; // Pred začetkom zanke while je položaj CLK določil na sistemskem zagonu. }
Funkcija LCD je zapisana v knjižnici lcd.c in lcd.h, kjer sta prijavljeni lcd_puts (), lcd_cmd ().
Za izjavo spremenljivke, konfiguracijske bite in druge delčke kode spodaj poiščite celotno kodo.