Мазмұны:

Қарапайым айналмалы декодер: 4 қадам
Қарапайым айналмалы декодер: 4 қадам

Бейне: Қарапайым айналмалы декодер: 4 қадам

Бейне: Қарапайым айналмалы декодер: 4 қадам
Бейне: Добавляем блютуз модуль в активные колонки | Adding the Bluetooth module to active speakers 2024, Қараша
Anonim
Image
Image
Қарапайым айналмалы декодер
Қарапайым айналмалы декодер

Бұл нұсқаулық Arduino Uno R3 көмегімен реттік айналмалы кодерді декодтаудың қарапайым әдісін сипаттайды.

Шағын бағдарламалық қамтамасыз ету процедуралары ауысулар санын санау, контактілерден секіруді жою және айналу бағытын анықтау үшін қолданылады. Қосымша компоненттер мен іздеу кестелері қажет емес.

Кодтың үзіліссіз және үзіліссіз нұсқалары берілген.

Кодтың үзіліс нұсқасы тек бір үзу түйреуішін қажет етеді.

Суреттер:

  • Ашылатын фотода жиналған кодер көрсетілген.
  • Скриншот үзіліс нұсқасының кодын және кодер білігі сағат тілімен және сағат тіліне қарсы бұрылған кездегі санды көрсетеді.
  • Бейне жылдам айналу кезіндегі санауды көрсетеді.

1 -қадам: схема

Схема диаграммасы
Схема диаграммасы

Кодердің қосылу схемасы 1 суретте көрсетілген.

Өткізгіш сымдар тікелей кодер түйреуіштеріне дәнекерленген.

Егер санау бағыты кері болса, екі көк сымды ауыстырыңыз.

2 -қадам: бөлшектер тізімі

Келесі бөліктер https://www.aliexpress.com/ сайтынан алынды.

  • USB кабелі бар тек 1 Arduino UNO R3.
  • 1 коммутатормен тек реттік айналмалы кодер (EC11 немесе эквиваленті).
  • Білікке сәйкес келетін 1 ғана тұтқа.
  • 3 Arduino еркек-еркек қосқыш сымдары.

3 -қадам: Теория

Теория
Теория

Реттік айналмалы кодерлер екі шаршы толқын жасайды, олардың әрқайсысы 1-суретте көрсетілгендей 90 градусқа ығысады.

Білік 1 -ден 6 -позицияға қарай сағат тілінің бағытымен (CW) және сағат тіліне қарсы (CCW) айналғанда A контактісіндегі және В контактісіндегі логикалық үлгілер әр түрлі болады.

Айналу бағытын анықтаудың жалпы әдістеріне мыналар жатады:

  • аппараттық құрал
  • егіз үзулер
  • үлгіні іздеу кестелері

Бұл жоба іздеу кестелерін қажет етпейтін бағдарламалық қамтамасыз ету әдісін қолданады. [1]

Бағыт

Контакт A мен В контактілерінің шығыс үлгілерін қараудың орнына А контактісіне назар аударайық.

Егер біз әр контакті ауысудан кейін В контактісінің үлгісін алсақ, мынаны ескереміз:

  • А контактісі мен В контактісінің кодер CW айналған кезде қарама -қарсы логикалық күйлері бар
  • А контактісі мен В контактісінің кодтаушы CCW айналған кезде бірдей логикалық күйі болады

Нақты код:

// ----- Ауысуларды санау

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

Бұл әдіс келесі артықшылықтарды ұсынады:

  • іздеу кестелері қажет емес
  • тек бір үзіліс жолы қажет

Шығу

Барлық механикалық кодерлер «контактілі секіруден» зардап шегеді.

Егер коммутатор контактісі таза болмаса/үзілмесе, оның логикалық күйі коммутатор контактісі орныққанша жоғарыдан төменге дейін тез ауытқиды. Бұл жалған есептеулерге әкеледі.

Байланыстың секірілуін басудың бір әдісі - әрбір қосқыш контактісіне кішкене конденсаторды қосу. Конденсатор мен ілеспе тартқыш резистор жоғары жиілікті тиімді түрде қысқартатын және ажыратқыш кернеуінің керемет көтерілуіне/төмендеуіне мүмкіндік беретін интеграторды құрайды.

Бұл тәсілдің кемшілігі - егер кодер білігі жылдам айналса, өтулерді жіберіп алу мүмкін.

Бағдарламалық жасақтаманы жою

Бұл әдіс нөлге орнатылған екі есептегішті (Ашық, Жабық) қолданады. [2]

A контактісінде ауысу анықталғаннан кейін:

  • Үздіксіз сауалнама A.
  • А контактісі жоғары болса, Ашық есептегішті көбейтіңіз және жабық есептегішті қалпына келтіріңіз.
  • Жабық есептегішті көбейтіңіз және А контактісі ТӨМЕН болған кезде Ашық есептегішті қалпына келтіріңіз.
  • Есептегіштердің бірі алдын ала белгіленген санға жеткенде циклден шығыңыз. Біз кез келген байланыс үзілісінен кейін тұрақты күй кезеңін тиімді түрде іздейміз.

Нақты код:

// ----- Байланысты жою A

while (1) {if (digitalRead (ContactA)) {// ----- ContactA ашық жабық = 0; // Бос қарама -қарсы интегратор Open ++; // Егер біріктіру (Open> MaxCount) HIGH қайтарса; } else {// ----- ContactA жабық ашық = 0; // Бос қарама -қарсы интегратор Жабық ++; // Егер біріктіру (Жабық> 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/kz/main/software сайтынан қол жетімді Ardino Uno R3 IDE (интеграцияланған әзірлеу ортасы) соңғы нұсқасы қажет.

Келесі екі Arduino эскизінің әрқайсысын жүктеңіз (қоса берілген)

  • rotary_encoder_1.ino (сұрау нұсқасы)
  • rotary_encoder_2.no (үзіліс нұсқасы)

Сізге ұнайтын нұсқаны екі рет нұқыңыз және экрандағы нұсқауларды орындаңыз.

Ләззат алыңыз…

Менің басқа нұсқауларды көру үшін мына жерді басыңыз.

Ұсынылған: