- Rotacinis koduotojas ir jo tipai
- KY-040 rotacinio kodavimo įrenginio kištukas ir aprašymas
- Kaip veikia „Rotary Encoder“
- Būtini komponentai
- PIC16F877A rotacinio kodavimo įrenginio sąsajos grandinės schema
- Kodo paaiškinimas
Sukamasis kodavimo yra įvesties įrenginys, kuris padeda naudotojui bendrauti su sistema. Tai labiau panašu į radijo potenciometrą, tačiau jis išleidžia impulsų grupę, todėl jo taikymas yra unikalus. Pasukus kodavimo rankenėlę, jis sukasi mažais žingsneliais, o tai padeda jį naudoti žingsninio / servo variklio valdymui, naršymui per meniu seką ir skaičiaus vertės padidinimui / sumažinimui ir daug daugiau.
Šiame straipsnyje mes sužinosime apie skirtingus „Rotary Encoder“ tipus ir kaip jie veikia. Mes taip pat susiesime jį su PIC mikrovaldikliu PIC16F877A ir valdysime sveiko skaičiaus vertę sukdami Encoderį ir parodysime jo vertę 16 * 2 LCD ekrane. Šios pamokos pabaigoje jums bus patogu savo projektams naudoti „Rotary Encoder“. Taigi pradėkime…
Rotacinis koduotojas ir jo tipai
Rotacinis koderis dažnai vadinamas veleno kodatoriumi. Tai yra elektromechaninis keitiklis, reiškiantis, kad jis mechaninius judesius paverčia elektroniniais impulsais, arba, kitaip tariant, jis paverčia kampinę padėtį, judesį ar veleno padėtį skaitmeniniu ar analoginiu signalu. Jį sudaro rankenėlė, kuri sukdamasi judės žingsnis po žingsnio ir kiekvienam žingsniui sudarys impulsinių traukinių seką su iš anksto nustatytu pločiu.
Rinkoje yra daugybė sukamojo kodavimo įrenginių tipų, kuriuos dizaineris gali pasirinkti vieną pagal savo taikymą. Toliau pateikiami dažniausiai pasitaikantys tipai
- Prieauginis koduotojas
- Absoliutusis koduotojas
- Magnetinis koduotuvas
- Optinis koduotojas
- Lazerinis koduotuvas
Šie kodavimo įrenginiai klasifikuojami pagal išvesties signalo ir jutimo technologiją, papildomasis koduotojas ir absoliutusis kodavimas - pagal išvesties signalą, o magnetinis, optinis ir lazerinis kodavimo įrenginiai - pagal jutimo technologiją. Čia naudojamas koduotojas yra inkrementinio tipo koduotojas.
Absoliutusis enkoderis saugo informaciją apie padėtį net ir pašalinus maitinimą, o informacija apie padėtį bus prieinama, kai vėl jai įjungsime maitinimą.
Kitas pagrindinis tipas - „ Inkremental Encoder“ teikia duomenis, kai koderis pakeičia savo padėtį. Jis negalėjo išsaugoti vietos informacijos.
KY-040 rotacinio kodavimo įrenginio kištukas ir aprašymas
Atsižvelgiama į pinouts KY-040 Incremental tipo sukamasis kodavimo yra parodyta žemiau. Šiame projekte mes susiesime šį „Rotary Encoder“ su populiariu mikrovaldikliu PIC16F877A iš mikroschemos.
Pirmieji du kaiščiai („Ground“ ir „Vcc“) naudojami enkoderiui maitinti, paprastai naudojamas + 5 V maitinimas. Be rankenos pasukimo pagal laikrodžio rodyklę ir prieš laikrodžio rodyklę, kodavimo įrenginyje taip pat yra jungiklis („Active low“), kurį galima paspausti paspaudus viduje esančią rankenėlę. Signalas iš šio jungiklio gaunamas per kaištį 3 (SW). Galiausiai jis turi du išvesties kaiščius (DT ir CLK), kurie sukuria bangos formas, kaip jau aptarta toliau. Anksčiau mes susiejome šį „Rotary Encoder“ su „Arduino“.
Kaip veikia „Rotary Encoder“
Išvestis visiškai priklauso nuo vidinių varinių pagalvėlių, kurios sujungia ašį su GND ir VCC.
Yra dvi Rotary Encoder dalys. Veleno ratas, sujungtas su velenu ir sukantis pagal laikrodžio rodyklę arba prieš laikrodžio rodyklę, priklausomai nuo veleno pasukimo, ir pagrindo, kuriame atliekamas elektros sujungimas. Pagrindas turi prievadus ar taškus, sujungtus su DT arba CLK taip, kad sukdamasis veleno ratas sujungs pagrindo taškus ir užtikrins kvadratinę bangą tiek DT, tiek CLK prievade.
Išėjimas bus toks, kaip velenas sukasi-
Du uostai teikia kvadratinę bangą, tačiau laikas šiek tiek skiriasi. Dėl šios priežasties, jei priimsime išėjimą kaip 1 ir 0, gali būti tik keturios būsenos: 0 0, 1 0, 1 1, 0 1. Dvejetainio išėjimo seka lemia posūkį pagal laikrodžio rodyklę arba prieš laikrodžio rodyklę. Pvz., Jei sukamasis enkoderis suteikia 0 0 tuščiąja eiga ir po to teikia 1 1, tai reiškia, kad koderis pakeičia savo padėtį vienu žingsniu pagal laikrodžio rodyklę, bet jei jis teikia 0 0 po tuščiosios eigos 1 0, reiškia, kad velenas keičia savo padėtį prieš laikrodžio rodyklę vienu žingsniu.
Būtini komponentai
Atėjo laikas išsiaiškinti, ko mums reikia norint susieti rotacinį kodavimo įrenginį su PIC mikrovaldikliu,
- PIC16F877A
- 4.7k rezistorius
- 1k rezistorius
- 10 tūkst. Puodo
- Keraminis disko kondensatorius 33pF - 2vnt
- 20Mhz kristalas
- 16x2 ekranas
- Rotacinis koduotojas
- 5V adapteris.
- Bandomoji Lenta
- Prijungimo laidai.
PIC16F877A rotacinio kodavimo įrenginio sąsajos grandinės schema
Žemiau pateikiama galutinės sąrankos nuotrauka prijungus komponentus pagal grandinės schemą:
Skystųjų kristalų ekrano kontrastui naudojome vieną 1K rezistorių, užuot naudoję potenciometrą. Taip pat patikrinkite visą darbo vaizdo įrašą, pateiktą pabaigoje.
Kodo paaiškinimas
Pilnas PIC kodas pateikiamas šio projekto pabaigoje su demonstraciniu vaizdo įrašu, čia mes paaiškiname keletą svarbių kodo dalių. Jei dar nesinaudojote „PIC“ mikrovaldikliu, nuo pat pradžių vadovaukitės mūsų „PIC“ vadovėliais.
Kaip aptarėme anksčiau, turime patikrinti išvestį ir diferencijuoti binarinę išvestį tiek DT, tiek CLK, todėl sukūrėme operacijai „ if-else“ dalį.
if (Encoder_CLK! = pozicija) { if (Encoder_DT! = pozicija) { // lcd_com (0x01); skaitiklis ++; // Padidinkite skaitiklį, kuris bus atspausdintas ant lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, skaitiklis); } dar { // lcd_com (0x01); lcd_com (0xC0); skaitiklis--; // sumažinti skaitiklį lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, skaitiklis); // lcd_puts ("kairė"); } }
Mes taip pat turime išsaugoti poziciją kiekviename žingsnyje. Norėdami tai padaryti, mes naudojome kintamą "poziciją", kurioje saugoma dabartinė padėtis.
pozicija = Encoder_CLK; // Tai koduotojo laikrodžio padėtis kintamajame. Gali būti 0 arba 1.
Išskyrus šią parinktį, yra galimybė pranešti apie jungiklio paspaudimą LCD ekrane.
if (Koduotojas_SW == 0) { sw_delayms (20); // atšaukimo atidėjimas if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("nuspaustas jungiklis"); // itoa (skaitiklis, reikšmė, 10); // lcd_puts (reikšmė);
System_init funkcija yra naudojama inicijuoti pin I / O veiksmo, LCD ir saugoti Sukamasis Encoder poziciją.
void system_init () { TRISB = 0x00; // PORT B kaip išvestis, Šis prievadas naudojamas LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Tai inicijuos LCD padėtį = Encoder_CLK; // Sotred CLK padėtį sistemos init, prieš prasidedant „while loop“. }
Skystųjų kristalų funkcija yra parašyta bibliotekoje lcd.c ir lcd.h, kur deklaruojami lcd_puts (), lcd_cmd ().
Kintamojo deklaracijai, konfigūracijos bitams ir kitiems kodo fragmentams rasite visą kodą žemiau.