Мазмуну:

Жөнөкөй Ротари декодер: 4 кадам
Жөнөкөй Ротари декодер: 4 кадам

Video: Жөнөкөй Ротари декодер: 4 кадам

Video: Жөнөкөй Ротари декодер: 4 кадам
Video: Дат баскан айланма соконун бычагынан кемпинг бычагын жасоо 2024, Июль
Anonim
Image
Image
Жөнөкөй Ротари декодер
Жөнөкөй Ротари декодер

Бул көрсөтмө Arduino Uno R3 менен ырааттуу айлануучу коддогучту чечүүнүн жөнөкөй ыкмасын сүрөттөйт.

Компакт программалык процедуралар өткөөлдөрдүн санын эсептөө, контактты секирүүнү жок кылуу жана айлануу багытын аныктоо үчүн колдонулат. Кошумча компоненттер жана издөө таблицалары талап кылынбайт.

Коддун үзгүлтүксүз жана үзгүлтүксүз версиялары берилет.

Коддун үзгүлтүккө учуроо версиясы бир гана үзгүлтүк пинин талап кылат.

Сүрөттөр:

  • Ачылган сүрөттө чогултулган кодер көрсөтүлгөн.
  • Скриншот үзгүлтүккө учуроочу версиянын кодун жана коддогучтун огу саат жебеси боюнча жана сааттын жебесине каршы бурулганда көрсөтөт.
  • Видеодо ылдам айлануу учурунда эсептөө көрсөтүлгөн.

1 -кадам: Райондук диаграмма

Райондук диаграмма
Райондук диаграмма

Коддогучтун туташуу схемасы fig.1де көрсөтүлгөн.

Өткөргүч зымдар түздөн -түз коддогуч казыктарына ширетилет.

Эгерде эсептөө багыты тескери болсо, эки көк зымды алмаштырыңыз.

2 -кадам: Бөлүктөрдүн тизмеси

Төмөнкү бөлүктөр https://www.aliexpress.com/ сайтынан алынды

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

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

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

Кезектүү айлануучу коддогучтар ар бири 90 градуска жылдырылган эки чарчы толкунду пайда кылат.

Байланыш А менен Б байланыштын логикалык үлгүлөрү 1ден 6га чейинки позициялар аркылуу вал саат жебеси боюнча (CW) жана саат жебеси боюнча (CCW) бурулганда башкача болот.

Айлануу багытын аныктоонун жалпы методдоруна төмөнкүлөр кирет:

  • аппараттык
  • эгиз үзгүлтүктөр
  • үлгү издөө таблицалары

Бул долбоор издөө столдорун талап кылбаган программалык камсыздоо ыкмасын колдонот. [1]

Багыты

Байланыш А менен Б байланыштарынын чыгуу моделдерин кароонун ордуна, Байланыш Ага көңүл буралы.

Эгерде биз Б контактинин үлгүсүн ар бир Байланыш А өтүүсүнөн кийин белгилесек:

  • Байланыш А менен Б Байланышында кодер CW айландырылганда карама -каршы логикалык абалдары бар
  • Байланыш А менен Б Байланыш кодекси CCW айландырылганда бирдей логикалык абалга ээ

Чыныгы код:

// ----- Саноолордун өтүшү

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

Бул ыкма төмөнкү артыкчылыктарды берет:

  • издөө столдору талап кылынбайт
  • бир гана үзгүлтүк сызыгы талап кылынат

Debounce

Бардык механикалык кодерлер "контакт секирүүдөн" жабыркашат.

Эгерде коммутатордун контакты таза иштебесе/бузулбаса, анда анын логикалык абалы которуштуруучу контакт чечилмейинче ЖОГОРУдан ТӨМӨНГӨ чейин термелет. Бул жалган эсепке алып келет.

Байланыштын секирүүсүн басуунун бир жолу - ар бир которуштуруучу контактка кичинекей конденсатор кошуу. Конденсатор жана аны менен байланышкан тартуучу резистор жогорку жыштыктарды эффективдүү кыскартуучу жана которгучтун чыңалуусунун кооз көтөрүлүшүнө/түшүшүнө мүмкүндүк берген интеграторду түзөт.

Бул ыкманын кемчилиги, эгерде коддогучтун огу тез бурулса, өтмөктөрдү өткөрүп жиберүү мүмкүн.

Программалык камсыздандыруу

Бул ыкма нөлгө коюлган эки эсептегичти (Ачык, Жабык) колдонот. [2]

Байланышта өтүү аныкталгандан кийин:

  • Үзгүлтүксүз сурамжылоо Байланыш А.
  • Ачык эсептегичти көбөйтүп, Байланыш А ЖОГОРУ болгондо, Жабык эсептегичти кайра коюңуз.
  • Жабык эсептегичти көбөйтүп, А контакт АРЫЛГАНДА Ачык эсептегичти баштапкы абалга келтириңиз.
  • Эсептегичтердин бири алдын ала белгиленген санга жеткенде циклден чыгыңыз. Биз кандайдыр бир байланыш секиргенден кийин туруктуу абал мезгилин натыйжалуу издеп жатабыз.

Чыныгы код:

// ----- Байланыштан чыгуу А.

while (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0; // Бош карама -каршы интегратор Open ++; // Эгерде интеграциялоо (Ачуу> MaxCount) ЖОГОРУ кайтарылса; } else {// ----- ContactA жабык ачык = 0; // Бош карама -каршы интегратор Жабык ++; // Эгерде интеграциялоо (Жабык> MaxCount) ТӨМӨН кайтса; }}

Contact B менен Contact B өтмөлөрү дал келбегендиктен, В Байланышынан чыгуунун кажети жок.

Саноо

Механикалык "кармоо" сиздин эсебиңизди эффективдүү түрдө эки эсеге көбөйтөт, анткени эки чыкылдатуу ортосунда катталган (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.no (үзгүлтүккө учураган версия)

Сиз каалаган версияны эки жолу чыкылдатыңыз жана экрандын көрсөтмөлөрүн аткарыңыз.

Ырахат…

Менин башка көрсөтмөлөрүмдү көрүү үчүн бул жерди басыңыз.

Сунушталууда: