Mundarija:

Rotary Enkoder - Tushuning va ishlating (Arduino/boshqa ontrol Controller): 3 qadam
Rotary Enkoder - Tushuning va ishlating (Arduino/boshqa ontrol Controller): 3 qadam

Video: Rotary Enkoder - Tushuning va ishlating (Arduino/boshqa ontrol Controller): 3 qadam

Video: Rotary Enkoder - Tushuning va ishlating (Arduino/boshqa ontrol Controller): 3 qadam
Video: Lesson 97: Controlling Servo Motor using Rotary Encoder and Display Angle On LCD 2024, Noyabr
Anonim
Rotary Enkoder - Buni tushunish va ishlatish (Arduino/boshqa ontrol Controller)
Rotary Enkoder - Buni tushunish va ishlatish (Arduino/boshqa ontrol Controller)

Aylanadigan kodlovchi-bu aylanma harakatni raqamli yoki analogli ma'lumotlarga aylantiradigan elektr mexanik qurilma. U soat yo'nalishi bo'yicha yoki teskari yo'nalishda aylanishi mumkin. Aylanadigan kodlovchi ikki xil: absolyut va nisbiy (ortib boruvchi) kodlovchi.

Mutlaq kodlovchi joriy mil burchagiga mutanosib qiymat chiqarsa, ortib boruvchi enkoder milning qadamini va uning yo'nalishini chiqaradi. (Bu holda bizda qo'shimcha kodlovchi mavjud)

Rotary enkoderlari yanada ommalashib bormoqda, chunki siz bitta elektr modulda ikkita funktsiyadan foydalana olasiz: operatsiyalarni tasdiqlash uchun oddiy kalit va navigatsiya uchun aylanadigan kodlovchi, masalan. menyu orqali.

Bosqichli aylanuvchi kodlovchi mil aylanayotganda ikkita chiqish signalini ishlab chiqaradi. Yo'nalishga qarab, signallardan biri boshqasini boshqaradi. (pastga qarang)

1 -qadam: Chiqish ma'lumotlarini tushunish

Chiqish ma'lumotlarini tushunish
Chiqish ma'lumotlarini tushunish

Ko'rib turganingizdek, enkoder o'qi soat yo'nalishi bo'yicha aylana boshlaganda, A chiqishi avval LOWga tushadi va B chiqishi undan keyin keladi. Ish soat sohasi farqli o'laroq teskari yo'nalishda teskari tomonga buriladi.

Endi biz buni mController -da amalga oshirishimiz kerak (men Arduino Nano -dan foydalanganman).

2 -qadam: O'chirish sxemasini yarating

O'chirish davri
O'chirish davri
O'chirish davri
O'chirish davri

Yuqorida aytib o'tganimdek, chiqishlar yuqori va past qanot hosil qiladi. A va B ma'lumot pinlarida toza nazorat qilish uchun biz yuqori tortishish rezistorlarini qo'shishimiz kerak. Umumiy pin C LOW yonboshi uchun to'g'ridan -to'g'ri erga tushadi.

Ichki kalit (tugma) haqida ma'lumot olish uchun biz boshqa ikkita pinni ishlatamiz. Ulardan biri VCC -ga, ikkinchisi esa mccontroller ma'lumot piniga o'tadi. Toza LOWni olish uchun biz ma'lumotlar piniga tortiladigan qarshilikni qo'shishimiz kerak.

Bundan tashqari, mController-ning ichki tortish va tortish rezistorlaridan foydalanish mumkin!

Mening vaziyatimda pinout quyidagicha ko'rinadi:

  • +3, 3V => +3, 3V (Arduino) (shuningdek +5V bo'lishi mumkin)
  • GND => GND (Arduino)
  • A => pin 10
  • B =>

    Pin

    11

  • C => GND
  • SW =>

    Pin

    12

3 -qadam: Kodni yozish

int pinA = 10; // ichki kalit A int pinB = 11; // ichki kalit B int pinSW = 12; // switch (bosilgan Enkoder) int encoderPosCount = 0; // noldan boshlanadi, agar xohlasangiz o'zgartiring

int pozitsiyasi;

bool almashtirish; int mrotateSo'nggi; int mrotate;

bo'sh o'rnatish () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); kechikish (50); }

void loop () {readencoder (); if (readwitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// tugmasi aylanayotgan bo'lsa if (digitalRead (pinB)! = mrotate) {// switch A avval o'zgardi -> soat yo'nalishi bo'yicha aylantiruvchi encoserPosCount ++; Serial.println ("soat yo'nalishi bo'yicha aylantirildi"); } else {// birinchi navbatda B tugmasi o'zgartirildi-> soat yo'nalishi bo'yicha teskari aylantiruvchi encoserPosCount--; Serial.println ("soat sohasi farqli o'girib"); }

Serial.print ("Enkoderning joylashuvi:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; encoderPosCount -ni qaytarish; } bool readwitch () {

if (digitalRead (pinSW)! = 0) {// tugmasi bosilsa

while (digitalRead (pinSW)! = 0) {} // switch hozirda switchval = 1 bosilgan; } else {switchval = 0;} // switch bosilmagan qaytish switchval; }

Endi siz kodlovchini burishingiz mumkin va agar siz soat yo'nalishi bo'yicha aylansangiz encoderPosCount o'zgarmaydigan sanaladi va agar siz soat miliga teskari yo'nalishda aylantirsangiz, uni hisoblashingiz mumkin.

Bo'ldi shu! Oddiy va foydali.

Kodni o'zgartirishga va bajarishga jur'at eting. Siz uni loyihangizda amalga oshirishingiz mumkin.

Men LED loyihasini yuklayman, u erda men LEDlarning yorqinligini sozlash uchun kodlovchi ishlatganman.

Tavsiya: