Агуулгын хүснэгт:

Энгийн Ротари декодер: 4 алхам
Энгийн Ротари декодер: 4 алхам

Видео: Энгийн Ротари декодер: 4 алхам

Видео: Энгийн Ротари декодер: 4 алхам
Видео: 220v house power converted to 3 phase power 600v 440v walk through 2024, Арваннэгдүгээр
Anonim
Image
Image
Энгийн Ротари декодер
Энгийн Ротари декодер

Энэхүү зааварчилгаа нь Arduino Uno R3 ашиглан дараалсан эргэлддэг кодлогчийг тайлах энгийн аргыг тайлбарласан болно.

Компакт програм хангамжийн горимыг шилжилтийн тоог тоолох, холбоо барих үсрэлтийг арилгах, эргэлтийн чиглэлийг тодорхойлоход ашигладаг. Нэмэлт бүрэлдэхүүн хэсгүүд болон хайлтын хүснэгт шаардлагагүй.

Кодын тасалдал болон тасалдалгүй хувилбаруудыг оруулсан болно.

Кодын тасалдлын хувилбарт зөвхөн нэг таслах зүү шаардлагатай.

Зураг:

  • Нээлтийн зураг дээр угсарсан кодлогч харагдаж байна.
  • Дэлгэцийн зураг нь тасалдаг хувилбарын код болон кодлогчийн босоо амыг цагийн зүүний дагуу, цагийн зүүний эсрэг эргүүлэх үеийн тооллогыг харуулна.
  • Видео нь хурдан эргүүлэх үед тооллогыг харуулав.

Алхам 1: Хэлхээ диаграм

Хэлхээ диаграм
Хэлхээ диаграм

Кодлогчын холболтын диаграммыг зурагт үзүүлэв.

Холбогч утаснууд нь кодлогч тээглүүрт шууд гагнагддаг.

Хэрэв тоолох чиглэл өөрчлөгдсөн бол хоёр цэнхэр утсыг солино уу.

Алхам 2: эд ангиудын жагсаалт

Дараах хэсгүүдийг https://www.aliexpress.com/ дээрээс авсан болно.

  • USB кабель бүхий зөвхөн 1 Arduino UNO R3.
  • 1 нь зөвхөн шилжүүлэгчтэй дараалсан эргэлддэг кодлогч (EC11 эсвэл түүнтэй адилтгах).
  • Босоо аманд тохирсон 1 товчлуур.
  • 3 зөвхөн Arduino эрэгтэй-эрэгтэй холбогч утас.

Алхам 3: Онол

Онол
Онол

Дараалсан эргэлддэг кодлогч нь 2 квадрат долгион үүсгэдэг бөгөөд тус бүрийг 1-р зурагт үзүүлсэн шиг 90 градусаар нүүлгэн шилжүүлдэг.

Босоо амыг цагийн зүүний дагуу (CW), цагийн зүүний эсрэг (CCW) 1 -ээс 6 -р байрлалд эргүүлэх үед A ба B контактын логик загварууд өөр өөр байдаг.

Эргэлтийн чиглэлийг тодорхойлох нийтлэг аргуудад дараахь зүйлс орно.

  • техник хангамж
  • ихэр тасалдаг
  • загвар хайх хүснэгтүүд

Энэ төсөл нь хайлтын хүснэгт шаарддаггүй програм хангамжийн аргыг ашигладаг. [1]

Чиглэл

Contact A ба Contact B -ийн гаралтын загварыг харахын оронд А холбоо барихад анхаарлаа хандуулцгаая.

Хэрэв бид Холбоо барих A шилжилт бүрийн дараа В контактийг түүвэрлэн авч үзвэл дараахь зүйлийг анхаарна уу.

  • Контактын А ба Контактын В нь кодлогчыг CW эргүүлэх үед эсрэг логик төлөвтэй байдаг
  • Кодлогчийг CCW эргүүлэх үед А холбоо ба В холбоо нь ижил логик төлөвтэй байна

Бодит код:

// ----- Шилжилтийг тоолох

CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }

Энэ арга нь дараахь давуу талуудыг санал болгодог.

  • хайлтын хүснэгт шаардлагагүй
  • зөвхөн нэг тасалдлын шугам шаардлагатай

Татгалзах

Бүх механик кодлогч нь "холбоо барих үсрэлт" -ээс болж зовдог.

Хэрэв унтраалгын контакт цэвэрхэн хийгдэхгүй/эвдэрч чадахгүй байвал түүний логик төлөв нь шилжих контакт суух хүртэл HIGH -аас LOW хүртэл хурдан хэлбэлзэх болно. Үүний үр дүнд хуурамч тооллого хийдэг.

Холбоо барих үсрэлтийг дарах нэг арга бол шилжүүлэгч контакт бүрт жижиг конденсатор нэмэх явдал юм. Конденсатор ба түүнтэй холбоотой татах эсэргүүцэл нь өндөр давтамжийг үр дүнтэй богиносгодог интеграторыг бүрдүүлдэг бөгөөд унтраалгын хүчдэлийг аятайхан өсгөж/бууруулдаг.

Энэхүү аргын сул тал нь кодлогч босоо амыг хурдан эргүүлэх тохиолдолд шилжилтийг орхигдуулж болзошгүй юм.

Програм хангамжийн дебютээ хийх

Энэ арга нь тэг гэж тохируулсан хоёр тоолуур (Нээлттэй, Хаалттай) ашигладаг. [2]

Холбоо барих А дээр шилжилт илэрсэн бол:

  • А -тай холбоо бариарай.
  • Нээлттэй тоолуурыг нэмэгдүүлж, А контакт өндөр байх үед Хаалттай тоолуурыг дахин тохируулна уу.
  • Хаалттай тоолуурыг нэмэгдүүлж, А контактын хэмжээ бага байх үед Нээлттэй тоолуурыг дахин тохируулна уу.
  • Тоолуурын аль нэг нь урьдчилан тогтоосон тоонд хүрэх үед давталтаас гарна уу. Бид ямар ч холбоо барих үсрэлтийн дараах тогтвортой байдлын хугацааг үр дүнтэй хайж байна.

Бодит код:

// ----- Холбоо барихыг хасах А.

while (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0; // Хоосон эсрэг интегратор Нээлттэй ++; // Хэрэв (Нээлттэй> MaxCount) HIGH буцаах бол нэгтгэх; } else {// ----- ContactA хаалттай байна = 0; // Хоосон эсрэг интегратор Хаалттай ++; // Хэрэв (Closed> MaxCount) LOW буцаах бол нэгтгэх; }}

Холбоо барих А ба В контактын шилжилт давхцахгүй байгаа тул В контактыг хасах шаардлагагүй болно.

Тоолж байна

Механик "саатуулах" нь товчлууруудын хооронд хоёр тооллого бүртгэгдсэн тул таны тоог хоёр дахин нэмэгдүүлнэ (Зураг 1 -ийг үзнэ үү).

"Хоригдсон" хүмүүсийн тоог доор үзүүлсэн шиг модуль 2 арифметик ашиглан тодорхойлж болно.

Бодит код:

// ----- "саатуулсан" хүмүүсийг тоол

if (Count % 2 == 0) {Serial.print ("Count:"); Serial.println (Count / 2); }

Ашигласан материал

Нэмэлт мэдээллийг дараахь хаягаар авах боломжтой.

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

Алхам 4: Програм хангамж

Энэ төсөлд https://www.arduino.cc/en/main/software дээрээс авах боломжтой Ardino Uno R3 IDE (хөгжлийн нэгдсэн орчин) сүүлийн үеийн хувилбар шаардлагатай.

Дараах хоёр Arduino ноорог тус бүрийг татаж авна уу (хавсаргасан болно)

  • rotary_encoder_1.ino (санал асуулгын хувилбар)
  • rotary_encoder_2. үгүй (тасалдсан хувилбар)

Өөрт таалагдсан хувилбар дээрээ давхар товшоод дэлгэц дээрх зааврыг дагана уу.

Сайхан амраарай…

Миний бусад зааварчилгааг үзэх бол энд дарна уу.

Зөвлөмж болгож буй: