- Pyörivä kooderi ja sen tyypit
- KY-040-pyörivän kooderin pinout ja kuvaus
- Kuinka pyörivä kooderi toimii
- Tarvittavat komponentit
- PIC16F877A Kiertokooderin liitäntäpiirikaavio
- Koodin selitys
Pyörivä kooderi on syöttölaite, jonka avulla käyttäjä voi olla vuorovaikutuksessa järjestelmän kanssa. Se näyttää enemmän kuin radio-potentiometriltä, mutta se tuottaa pulssijonon, mikä tekee sovelluksesta ainutlaatuisen. Kun enkooderin nappulaa käännetään, se pyörii pienten vaiheiden muodossa, mikä auttaa sitä käyttämään askelmoottorin / servomoottorin ohjausta, navigointia valikkosarjassa ja luvun arvon lisäämistä / vähentämistä ja paljon muuta.
Tässä artikkelissa opit erityyppisistä pyörivistä enkoodereista ja niiden toiminnasta. Olemme myös liitäntä sen PIC mikro PIC16F877A ja ohjata arvo kokonaisluku pyörittämällä Encoder ja näyttää sen arvo on 16 * 2 LCD-näyttö. Tämän opetusohjelman lopussa voit käyttää Rotary Encoderia projektissasi. Joten aloitetaan…
Pyörivä kooderi ja sen tyypit
Kiertokooderia kutsutaan usein akselianturiksi. Se on sähkömekaaninen anturi, eli se muuntaa mekaaniset liikkeet elektronisiksi pulsseiksi tai toisin sanoen muuntaa kulma- tai liike- tai akseliasennon digitaaliseksi tai analogiseksi signaaliksi. Se koostuu nupista, joka pyöriessään liikkuu askel askeleelta ja tuottaa sarjan pulssijunia, joilla on ennalta määritelty leveys kullekin vaiheelle.
Markkinoilla on monenlaisia kiertokoodereita, jotka suunnittelija voi valita yhden sovelluksensa mukaan. Yleisimmät tyypit on lueteltu alla
- Inkrementtianturi
- Absoluuttinen kooderi
- Magneettinen kooderi
- Optinen kooderi
- Laserkooderi
Nämä kooderit luokitellaan lähtösignaalin ja tunnistustekniikan perusteella, inkrementtianturi ja absoluuttianturit luokitellaan lähtösignaalin perusteella ja magneettinen, optinen ja laserkooderi tunnistustekniikan perusteella. Tässä käytetty kooderi on inkrementtityyppinen kooderi.
Absoluuttianturi tallentaa sijaintitiedot silloinkin, kun virta on katkaistu, ja sijaintitiedot ovat käytettävissä, kun käytämme siihen uudelleen virtaa.
Toinen perustyyppi, inkrementtianturi, tarjoaa tietoja, kun kooderi muuttaa sijaintiaan. Se ei voinut tallentaa sijaintitietoja.
KY-040-pyörivän kooderin pinout ja kuvaus
KY-040-inkrementtityyppisen kooderin pinouts on esitetty alla. Tässä projektissa liitämme tämän kiertokooderin suosittuun mikrosirun PIC16F877A-mikrokontrolleriin.
Kahta ensimmäistä nastaa (maadoitus ja Vcc) käytetään kooderin virtalähteeseen, tyypillisesti käytetään + 5 V: n syöttöä. Sen lisäksi, että kooderia pyöritetään myötäpäivään ja vastapäivään, kooderissa on myös kytkin (aktiivinen matala), jota voidaan painaa painamalla sisäpuolella olevaa nuppia. Tämän kytkimen signaali saadaan tapin 3 (SW) kautta. Lopuksi siinä on kaksi ulostulotappia (DT ja CLK), jotka tuottavat aaltomuodot, kuten alla on jo käsitelty. Olemme liittäneet tämän Rotary Encoderin aiemmin Arduinoon.
Kuinka pyörivä kooderi toimii
Lähtö riippuu kokonaan sisäisistä kuparityynyistä, jotka tarjoavat yhteyden GND: n ja VCC: n kanssa akseliin.
Rotary Encoderissa on kaksi osaa. Akselipyörä, joka on kytketty akseliin ja pyörii myötä- tai vastapäivään akselin pyörimisestä riippuen ja alustasta, johon sähköliitäntä tehdään. Pohjassa on portteja tai pisteitä, jotka on kytketty DT: hen tai CLK: hen siten, että kun akselipyörä pyörii, se yhdistää tukikohdat ja antaa neliöaallon sekä DT- että CLK-portissa.
Lähtö on kuin akselin pyöriessä -
Kaksi porttia tarjoaa neliöaallon, mutta ajoituksessa on pieni ero. Tästä johtuen, jos hyväksytään lähtö 1 ja 0, tilassa voi olla vain neljä tilaa, 0 0, 1 0, 1 1, 0 1. Binäärilähdön järjestys määrää myötä- tai vastapäivän. Kuten esimerkiksi, jos kiertokooderi tarjoaa 1 0 joutokäynnissä ja antaa 1 1 sen jälkeen, se tarkoittaa, että kooderi muuttaa asemaansa yhden askeleen myötäpäivään, mutta jos se antaa 0 0 joutokäynnin 1 0 jälkeen, tarkoittaa, että akseli vaihtaa asemiaan vastapäivään yhdellä askeleella.
Tarvittavat komponentit
On aika tunnistaa, mitä meidän on liitettävä kiertokooderiin PIC-mikrokontrolleriin,
- PIC16F877A
- 4.7k vastus
- 1k vastus
- 10k potti
- 33pF keraaminen levykondensaattori - 2kpl
- 20MHz kristalli
- 16x2-näyttö
- Pyörivä kooderi
- 5 V: n sovitin.
- Leipälauta
- Liitäntäjohdot.
PIC16F877A Kiertokooderin liitäntäpiirikaavio
Alla on kuva lopullisesta asennuksesta komponenttien kytkemisen jälkeen piirikaavion mukaan:
Olemme käyttäneet yhtä 1K-vastusta nestekidenäytön kontrastiin potentiometrin käyttämisen sijaan. Tarkista myös lopussa annettu koko toimiva video.
Koodin selitys
Täydellinen PIC-koodi annetaan tämän projektin lopussa esittelyvideolla, tässä selitämme muutamia tärkeitä osia koodista. Jos olet uusi PIC-mikrokontrolleri, seuraa PIC-oppaita alusta alkaen.
Kuten olemme keskustelleet aiemmin, meidän täytyy tarkistaa tuotoksen ja eriyttää binäärilähdön sekä DT ja CLK, joten loimme if-else osa toiminnan.
if (Encoder_CLK! = sijainti) { if (Encoder_DT! = position) { // lcd_com (0x01); laskuri ++; // Lisää lcd: lle tulostettavaa laskuria lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, laskuri); } else { // lcd_com (0x01); lcd_com (0xC0); laskuri--; // pienennä laskuria lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, laskuri); // lcd_puts ("Vasen"); } }
Meidän on myös tallennettava sijainti jokaisessa vaiheessa. Tätä varten käytimme muuttuvaa "sijaintia", joka tallentaa nykyisen sijainnin.
asema = kooderi_CLK; // Sen on tallennettava kooderin kellon sijainti muuttujaan. Voi olla 0 tai 1.
Tämän lisäksi tarjotaan vaihtoehto ilmoittaa LCD-näytön painalluksesta.
jos (Encoder_SW == 0) { sw_delayms (20); // poistumisviive if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("kytkin painettu"); // itoa (laskuri, arvo, 10); // lcd_puts (arvo);
System_init toiminto käytetään alustaa pin I / O-operaatio, LCD ja tallentamaan Nuppisäädin asentoon.
void system_init () { TRISB = 0x00; // PORT B lähdönä , Tätä porttia käytetään LCD- TRISD-bitteille.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Tämä alustaa nestekidenäytön sijainnin = Encoder_CLK; // Sotred CLK-paikan järjestelmän init-tilassa ennen while-silmukan alkua. }
LCD-toiminto kirjoitetaan lcd.c- ja lcd.h-kirjastoihin, joissa lcd_puts (), lcd_cmd () ilmoitetaan.
Muuttuja-ilmoitusta, määritysbittejä ja muita koodikatkelmia varten löydät koko koodin alla.