- Rotējošais kodētājs un tā veidi
- KY-040 rotējošā kodētāja tapas un apraksts
- Kā darbojas rotējošais kodētājs
- Nepieciešamās sastāvdaļas
- PIC16F877A rotējošā kodētāja saskarnes shēmas diagramma
- Kods Paskaidrojums
Rotary encoder ir ievades ierīci, kas palīdz lietotājam mijiedarboties ar sistēmu. Tas drīzāk izskatās kā radio potenciometrs, bet tas izstaro impulsu vilcienu, kas padara tā lietošanu unikālu. Kad kodētāja poga tiek pagriezta, tā griežas nelielu pakāpienu veidā, kas palīdz to izmantot soļu / servomotoru kontrolei, pārvietošanās pa izvēlnes secību un skaitļa vērtības palielināšana / samazināšana un daudz kas cits.
Šajā rakstā mēs uzzināsim par dažādiem rotējošo kodētāju veidiem un to darbību. Mēs to saskarsimies arī ar PIC mikrokontrolleru PIC16F877A un kontrolēsim vesela skaitļa vērtību, pagriežot kodētāju, un parādīsim tā vērtību 16 * 2 LCD ekrānā. Šīs apmācības beigās jums būs ērti izmantot Rotary Encoder projektiem. Tātad sāksim…
Rotējošais kodētājs un tā veidi
Rotējošo kodētāju bieži sauc par vārpstas kodētāju. Tas ir elektromehāniskais devējs, tas nozīmē, ka tas pārveido mehāniskās kustības elektroniskos impulsos vai, citiem vārdiem sakot, pārveido leņķa stāvokli vai kustību vai vārpstas stāvokli digitālā vai analogā signālā. Tas sastāv no pogas, kas, pagriežoties, pārvietosies soli pa solim un katram solim izveidos impulsu vilcienu secību ar iepriekš noteiktu platumu.
Tirgū ir daudz veidu rotējošo kodētāju, kurus dizainers var izvēlēties vienu atbilstoši savam pielietojumam. Visizplatītākie veidi ir uzskaitīti zemāk
- Inkrementālais kodētājs
- Absolūtais kodētājs
- Magnētiskais kodētājs
- Optiskais kodētājs
- Lāzera kodētājs
Šie kodētāji tiek klasificēti, pamatojoties uz izejas signālu un uztveršanas tehnoloģiju, inkrementālais kodētājs un absolūtais kodētājs tiek klasificēts, pamatojoties uz izejas signālu, un magnētiskais, optiskais un lāzera kodētājs ir klasificēts, pamatojoties uz sensoru tehnoloģiju. Šeit izmantotais kodētājs ir inkrementālā tipa kodētājs.
Absolūtais kodētājs saglabā informāciju par atrašanās vietu pat pēc strāvas padeves pārtraukšanas, un informācija par atrašanās vietu būs pieejama, kad mēs tai atkal izmantosim enerģiju.
Otrs pamata tips - Inkrementālais kodētājs - nodrošina datus, kad kodētājs maina pozīciju. Tā nevarēja saglabāt informāciju par atrašanās vietu.
KY-040 rotējošā kodētāja tapas un apraksts
No pinouts KY-040 Incremental type rotary encoder ir parādīts zemāk. Šajā projektā mēs sasaistīsim šo rotējošo kodētāju ar populāro mikrokontrolleru PIC16F877A no mikroshēmas.
Pirmās divas tapas (Ground un Vcc) tiek izmantotas kodētāja darbināšanai, parasti tiek izmantota + 5 V barošana. Papildus pogas pagriešanai pulksteņa rādītāja virzienā un pretēji pulksteņrādītāja kustības virzienam, kodētājā ir arī slēdzis (Active low), kuru var nospiest, nospiežot pogu iekšpusē. Signāls no šī slēdža tiek iegūts caur tapu 3 (SW). Visbeidzot, tam ir divas izejas tapas (DT un CLK), kas rada viļņu formas, kā jau tika apspriests turpmāk. Šis Rotary Encoder mēs jau iepriekš esam sasaistījuši ar Arduino.
Kā darbojas rotējošais kodētājs
Izvade pilnībā ir atkarīga no iekšējiem vara spilventiņiem, kas nodrošina savienojumu ar GND un VCC ar vārpstu.
Rotācijas kodētājam ir divas daļas. Vārpstas ritenis, kas savienots ar asi un rotē pulksteņrādītāja virzienā vai pretēji pulksteņrādītāja kustības virzienam atkarībā no vārpstas rotācijas un pamatnes, kur tiek veikts elektriskais savienojums. Bāzei ir pieslēgvietas vai punkti, kas savienoti ar DT vai CLK tādā veidā, ka, pagriežoties vārpstas ritenim, tā savienos bāzes punktus un nodrošinās kvadrātveida vilni gan DT, gan CLK pieslēgvietā.
Rezultāts būs tāds pats kā vārpstas griešanās laikā-
Divas ostas nodrošina kvadrātveida viļņu, taču laika ziņā ir nelielas atšķirības. Sakarā ar to, ja mēs pieņemam izvadi kā 1 un 0, var būt tikai četri stāvokļi: 0 0, 1 0, 1 1, 0 1. Binārā izejas secība nosaka pagriezienu pulksteņrādītāja kustības virzienā vai pretēji pulksteņrādītāja virzienam. Tāpat kā, piemēram, ja rotācijas kodētājs nodrošina 1 0 tukšgaitā un pēc tam nodrošina 1 1, tas nozīmē, ka kodētājs maina tā pozīciju vienu soli pulksteņrādītāja virzienā, bet, ja tas nodrošina 0 0 pēc tukšgaitas 1 0, nozīmē, ka vārpsta mainās pozīcijās pretēji pulksteņrādītāja virzienam ar vienu soli.
Nepieciešamās sastāvdaļas
Ir pienācis laiks noteikt, kas mums ir nepieciešams saskarnei Rotary Encoder ar PIC mikrokontrolleru,
- PIC16F877A
- 4.7k rezistors
- 1k rezistors
- 10k katls
- 33pF keramikas diska kondensators - 2gab
- 20Mhz kristāls
- 16x2 displejs
- Rotējošais kodētājs
- 5V adapteris.
- Maizes dēlis
- Savienojuma vadi.
PIC16F877A rotējošā kodētāja saskarnes shēmas diagramma
Zemāk ir redzams galīgās iestatīšanas attēls pēc komponentu pievienošanas saskaņā ar shēmas shēmu:
LCD kontrastam mēs esam izmantojuši vienu 1K rezistoru, nevis potenciometru. Pārbaudiet arī visu darba video, kas sniegts beigās.
Kods Paskaidrojums
Pilnīgs PIC kods ir norādīts šī projekta beigās ar demonstrācijas video, šeit mēs izskaidrojam dažas svarīgas koda daļas. Ja esat jauns PIC mikrokontrolleris, tad no sākuma ievērojiet mūsu PIC apmācības.
Kā mēs jau iepriekš apspriedām, mums jāpārbauda izeja un jānošķir binārā izeja gan DT, gan CLK, tāpēc mēs izveidojām operācijai citu daļu.
ja (Encoder_CLK! = position) { if (Encoder_DT! = position) { // lcd_com (0x01); skaitītājs ++; // Palieliniet skaitītāju, kas tiks izdrukāts uz lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, skaitītājs); } cits { // lcd_com (0x01); lcd_com (0xC0); skaitītājs--; // samazināt skaitītāju lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, skaitītājs); // lcd_puts ("Pa kreisi"); } }
Mums arī jāuzglabā pozīcija katrā solī. Lai to izdarītu, mēs izmantojām mainīgo “position”, kas saglabā pašreizējo pozīciju.
pozīcija = Encoder_CLK; // Tas ir kodētāja pulksteņa stāvokļa saglabāšana mainīgajā. Var būt 0 vai 1.
Izņemot šo, tiek nodrošināta opcija paziņot par slēdža nospiešanu LCD.
ja (Encoder_SW == 0) { sw_delayms (20); // atcelšanas aizkave, ja (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("slēdzis nospiests"); // itoa (skaitītājs, vērtība, 10); // lcd_puts (vērtība);
System_init funkcija tiek izmantota, lai sāktu pin I / O darbību, LCD un glabāt Rotary Encoder pozīciju.
void system_init () { TRISB = 0x00; // PORT B kā izvade. Šis ports tiek izmantots LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Tas inicializēs LCD pozīciju = Encoder_CLK; // Sotred CLK pozīciju sistēmas init, pirms sāk cilpu while. }
LCD funkcija ir ierakstīta bibliotēkā lcd.c un lcd.h, kur ir deklarēti lcd_puts (), lcd_cmd ().
Mainīgā deklarācijai, konfigurācijas bitiem un citiem koda fragmentiem, lūdzu, atrodiet pilnu kodu zemāk.