Mundarija:

Oddiy aylanadigan dekoder: 4 qadam
Oddiy aylanadigan dekoder: 4 qadam

Video: Oddiy aylanadigan dekoder: 4 qadam

Video: Oddiy aylanadigan dekoder: 4 qadam
Video: DC-DC 5V to 3.5V/12V USB Step Down Power Supply Module Adjustable Boost Buck Converter Out 1.2V-24V 2024, Iyul
Anonim
Image
Image
Oddiy aylanadigan dekoder
Oddiy aylanadigan dekoder

Bu yo'riqnomada Arduino Uno R3 yordamida ketma -ket aylanadigan kodlovchi kodini ochishning oddiy usuli tasvirlangan.

Yilni dasturiy ta'minot dasturlari o'tish sonini hisoblash, kontaktlarning sakrashini yo'q qilish va aylanish yo'nalishini aniqlash uchun ishlatiladi. Qo'shimcha komponentlar va qidirish jadvallari talab qilinmaydi.

Kodning uzilish va uzilishsiz versiyalari taqdim etiladi.

Kodning uzilish versiyasi faqat bitta uzilish pinini talab qiladi.

Rasmlar:

  • Ochilish fotosurati yig'ilgan enkoderni ko'rsatadi.
  • Skrinshotda uzilish versiyasining kodi va enkoder milining soat yo'nalishi bo'yicha va teskari yo'nalishda aylantirilganda hisobi ko'rsatiladi.
  • Videoda tez aylanish paytida hisoblar ko'rsatilgan.

1 -qadam: O'chirish diagrammasi

O'chirish diagrammasi
O'chirish diagrammasi

Enkoderning ulanish sxemasi shakl 1da ko'rsatilgan.

Jumper simlari to'g'ridan -to'g'ri kodlovchi pinlariga lehimlanadi.

Agar hisoblash yo'nalishi teskari bo'lsa, ikkita ko'k simni almashtiring.

2 -qadam: qismlar ro'yxati

Quyidagi qismlar https://www.aliexpress.com/ saytidan olingan.

  • USB kabel bilan faqat 1 Arduino UNO R3.
  • 1 faqat kalitli ketma -ket aylanadigan kodlovchi (EC11 yoki unga teng).
  • Milga mos keladigan 1 ta tugma.
  • 3 faqat Arduino erkak-erkak jumper simlari.

3 -qadam: nazariya

Nazariya
Nazariya

Ketma-ket aylanadigan kodlovchi ikkita kvadrat to'lqinni hosil qiladi, ularning har biri 1-rasmda ko'rsatilgandek 90 gradusga siljiydi.

Kontakt A va B kontaktidagi mantiqiy naqshlar mil 1 dan 6 gacha pozitsiyalar bo'ylab soat yo'nalishi bo'yicha (CW) va soat sohasi farqli o'laroq (CCW) aylantirilganda farq qiladi.

Burilish yo'nalishini aniqlashning keng tarqalgan usullari quyidagilardan iborat:

  • apparat
  • egizak uzilishlar
  • naqsh qidirish jadvallari

Ushbu loyiha qidiruv jadvallarini talab qilmaydigan dasturiy usuldan foydalanadi. [1]

Yo'nalish

A Kontakt va B kontaktlarining chiqish naqshlarini ko'rib chiqish o'rniga, A kontaktiga e'tibor qaratsak.

Agar biz har bir A kontaktli o'tishidan keyin B kontaktini tanlasak, shuni ta'kidlaymiz:

  • A kontakt va B kontaktlari CW kodlovchi aylantirilganda qarama -qarshi mantiqiy holatlarga ega
  • A kodi va B kontaktining kodi CCW aylantirilganda bir xil mantiqiy holatga ega

Haqiqiy kod:

// ----- O'tishlarni hisoblash

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

Bu usul quyidagi afzalliklarga ega:

  • qidirish jadvallari shart emas
  • faqat bitta uzilish liniyasi talab qilinadi

Chiqib ketish

Barcha mexanik kodlovchilar "kontaktdan sakrash" dan aziyat chekishadi.

Agar kontaktlarning zanglashiga olib kelishi aniq bo'lmasa, uning mantiqiy holati yuqori kontaktdan pastgacha o'zgaradi. Bu noto'g'ri hisob -kitoblarga olib keladi.

Kontaktning sakrashini bostirishning bir usuli - har bir kontaktli kontaktga kichik kondansatör qo'shish. Kondensator va u bilan bog'liq tortishish qarshiligi yuqori chastotalarni samarali qisqartiradigan va kalit kuchlanishining oqilona ko'tarilishiga/tushishiga imkon beruvchi integratorni hosil qiladi.

Ushbu yondashuvning salbiy tomoni shundaki, agar kodlovchi o'qi tez aylantirilsa, o'tishni o'tkazib yuborish mumkin.

Dasturiy ta'minotni o'chirish

Bu usulda nolga o'rnatilgan ikkita hisoblagich (ochiq, yopiq) ishlatiladi. [2]

A kontaktida o'tish aniqlangandan so'ng:

  • Kontakt A bilan doimiy ravishda so'rov o'tkazing.
  • Ochiq hisoblagichni ko'paytiring va A kontakti yuqori bo'lsa, Yopiq hisoblagichni qayta o'rnating.
  • Yopiq hisoblagichni oshiring va "A" kontakti past bo'lsa, "ochiq" hisoblagichni qayta o'rnating.
  • Hisoblagichlardan biri oldindan belgilangan songa yetganda, pastadirdan chiqing. Biz har qanday kontaktdan keyin barqaror holatni samarali qidiramiz.

Haqiqiy kod:

// ----- Kontaktni o'chirish A

while (1) {if (digitalRead (ContactA)) {// ----- ContactA ochiq Yopiq = 0; // Bo'sh qarama -qarshi integrator Open ++; // Agar integratsiya qilish (Ochish> MaxCount) HIGH qaytarilsa; } else {// ----- ContactA yopiq ochiq = 0; // Bo'sh qarama -qarshi integrator Yopiq ++; // Integratsiya qilish, agar (Yopiq> MaxCount) LOW past bo'lsa; }}

Kontakt B va Kontakt B o'tishlari bir -biriga to'g'ri kelmagani uchun, B kontaktidan voz kechishning hojati yo'q.

Hisoblash

Mexanik "ushlab turish" sizning hisobingizni ikki baravar oshiradi, chunki bosish o'rtasida ikkita hisob qayd etiladi (1 -rasmga qarang).

"Qo'lga olinmaganlar" sonini quyida ko'rsatilgan modul 2 arifmetikasi yordamida aniqlash mumkin.

Haqiqiy kod:

// ----- "cheklanganlar" ni hisoblang

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

Manbalar

Qo'shimcha ma'lumotni quyidagi manzilda topishingiz mumkin.

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

4 -qadam: dasturiy ta'minot

Bu loyiha Ardino Uno R3 IDE (integratsiyalashgan ishlab chiqish muhiti) ning so'nggi versiyasini talab qiladi, uni https://www.arduino.cc/en/main/software dan olish mumkin.

Quyidagi ikkita Arduino eskizini yuklab oling (ilova qilingan)

  • rotary_encoder_1.ino (ovoz berish versiyasi)
  • rotary_encoder_2.no (uzilish versiyasi)

O'zingiz yoqtirgan versiyani ikki marta bosing va ekrandagi ko'rsatmalarga amal qiling.

Xursand bo'ling…

Boshqa ko'rsatmalarni ko'rish uchun shu erni bosing.

Tavsiya: