Բովանդակություն:

Պարզ պտտվող ապակոդավորիչ `4 քայլ
Պարզ պտտվող ապակոդավորիչ `4 քայլ

Video: Պարզ պտտվող ապակոդավորիչ `4 քայլ

Video: Պարզ պտտվող ապակոդավորիչ `4 քայլ
Video: 8 պարզ հնարք միկրոալիքային վառարանով, որոնք, անկասկած, կհեշտացնեն ձեր կյանքը 2024, Նոյեմբեր
Anonim
Image
Image
Պարզ պտտվող ապակոդավորիչ
Պարզ պտտվող ապակոդավորիչ

Այս հրահանգը նկարագրում է Arduino Uno R3- ի միջոցով հաջորդական պտտվող կոդավորիչի վերծանման պարզ մեթոդ:

Կոմպակտ ծրագրերը օգտագործվում են անցումների քանակը հաշվելու, կոնտակտային ցատկումը վերացնելու և պտույտի ուղղությունը որոշելու համար: Լրացուցիչ բաղադրիչներ և որոնման աղյուսակներ չեն պահանջվում:

Տրամադրվում են ծածկագրի ընդհատվող և չընդհատվող տարբերակները:

Կոդի ընդհատվող տարբերակը պահանջում է միայն մեկ ընդհատման քորոց:

Պատկերներ:

  • Բացման լուսանկարը ցույց է տալիս հավաքված կոդավորիչը:
  • Էկրանի կադրը ցույց է տալիս ընդհատված տարբերակի ծածկագիրը և հաշվարկը, երբ կոդավորիչի լիսեռը պտտվում է ժամացույցի սլաքի ուղղությամբ և հակառակ ուղղությամբ:
  • Տեսահոլովակը ցույց է տալիս հաշվարկը արագ պտույտի ժամանակ:

Քայլ 1: Շղթայի դիագրամ

Շղթայի դիագրամ
Շղթայի դիագրամ

Կոդավորիչի միացման դիագրամը ներկայացված է նկ. 1 -ում:

Թռիչքային լարերը ուղղակիորեն կպցվում են կոդավորողի կապում:

Փոխեք երկու կապույտ լարերը, եթե հաշվման ուղղությունը հակադարձվի:

Քայլ 2: Մասերի ցուցակ

Հետևյալ մասերը ստացվել են https://www.aliexpress.com/ կայքից

  • 1 միայն Arduino UNO R3 USB մալուխով:
  • Միայն 1 հաջորդական պտտվող կոդավորիչ (EC11 կամ համարժեք) անջատիչով:
  • Լիսեռին համապատասխան 1 բռնակ:
  • 3 միայն Arduino տղամարդ-արու ցատկող լարեր:

Քայլ 3: Տեսություն

Տեսություն
Տեսություն

Հաջորդական պտտվող կոդավորիչները առաջացնում են երկու քառակուսի ալիք, որոնցից յուրաքանչյուրը տեղաշարժվում է 90 աստիճանով, ինչպես ցույց է տրված Նկար 1-ում:

Կոնտակտ A- ի և B- ի տրամաբանական օրինաչափությունները տարբեր են, երբ լիսեռը պտտվում է ժամացույցի սլաքի ուղղությամբ (CW) և հակառակ ուղղությամբ (CCW) 1 -ից 6 -րդ դիրքերի միջոցով:

Պտտման ուղղությունը որոշելու ընդհանուր մեթոդները ներառում են.

  • ապարատային սարքավորում
  • երկվորյակ ընդհատումներ
  • օրինակի որոնման սեղաններ

Այս նախագիծը օգտագործում է ծրագրային մեթոդ, որը չի պահանջում որոնման աղյուսակներ: [1]

Ուղղություն

Կոնտակտ A- ից և Կոնտակտ B- ից ելքային օրինաչափություններին նայելու փոխարեն կենտրոնանանք A- ի վրա:

Եթե յուրաքանչյուր Կոնտակտ A- ից հետո մենք վերցնում ենք Կոնտակտ B- ն, մենք նշում ենք, որ.

  • Կոնտակտ A- ն և B- ն ունեն հակառակ տրամաբանական վիճակներ, երբ կոդավորիչը պտտվում է CW
  • Կոնտակտ A- ն և B- ն ունեն նույն տրամաբանական վիճակը, երբ ծածկագրիչը պտտվում է CCW

Փաստացի կոդ:

// ----- Հաշվեք անցումները

CurrentStateA = stateContactA (); եթե (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); եթե (CurrentStateA == CurrentStateB) Հաշվել ++; եթե (CurrentStateA! = CurrentStateB) Հաշվել--; LastStateA = CurrentStateA; }

Այս մեթոդը առաջարկում է հետևյալ առավելությունները.

  • որոնման սեղաններ չեն պահանջվում
  • պահանջվում է միայն մեկ ընդհատման գիծ

Դեբոնս

Բոլոր մեխանիկական կոդավորողները տառապում են «շփման ցատկումից»:

Եթե անջատիչի կոնտակտը մաքուր չի/կոտրվում է, նրա տրամաբանական վիճակը արագ տատանվելու է HIGH- ից LOW- ի վրա, մինչև անջատիչի կոնտակտը կարգավորվի: Սա հանգեցնում է կեղծ հաշվարկների:

Կոնտակտային ցատկումը ճնշելու մեկ եղանակ է `յուրաքանչյուր անջատիչ կոնտակտի վրա ավելացնել մի փոքր կոնդենսատոր: Կոնդենսատորը և դրա հետ կապված ձգվող դիմադրությունը կազմում են ինտեգրատոր, որն արդյունավետորեն կարճացնում է բարձր հաճախականությունները և թույլ է տալիս անջատիչի լարումը բարձրանալ/ընկնել նրբագեղ կերպով:

Այս մոտեցման բացասական կողմն այն է, որ անցումները կարող են բաց թողնվել, եթե կոդավորիչի առանցքը արագ պտտվի:

Softwareրագրային ապահովման ապամոնտաժում

Այս մեթոդը օգտագործում է երկու հաշվիչ (բաց, փակ), որոնք զրոյի են դրված: [2]

Երբ անցում է հայտնաբերվում Կոնտակտ A- ում.

  • Շարունակաբար հարցում ՝ Կապ Ա.
  • Բարձրացրեք բաց հաշվիչը և կարգավորեք Փակ հաշվիչը, երբ Կոնտակտ A- ն բարձր է:
  • Բարձրացրեք Փակ հաշվիչը և վերագործարկեք Բաց հաշվիչը, երբ Կոնտակտ A- ն OWԱՐ Է:
  • Դուրս եկեք օղակից, երբ հաշվիչներից մեկը հասնում է կանխորոշված հաշվարկի: Մենք արդյունավետորեն փնտրում ենք կայուն վիճակի ժամանակահատված `ցանկացած շփման ցատկումից հետո:

Իրական կոդ:

// ----- Հրաժարվել Կոնտակտից Ա

while (1) {if (digitalRead (ContactA)) {// ----- ContactA- ն բաց է փակ է = 0; // Դատարկ հակառակ ինտեգրատոր Բաց ++; // Ինտեգրվել, եթե (Բացել> MaxCount) վերադարձնել HIGH; } else {// ----- ContactA փակ է Բաց = 0; // Դատարկ հակառակ ինտեգրատոր Փակ ++; // Ինտեգրվել եթե (Փակ> MaxCount) վերադարձնել LOW; }}

Կապ B- ից դուրս գալու կարիք չկա, քանի որ A և 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: Softwareրագրակազմ

Այս նախագիծը պահանջում է Ardino Uno R3 IDE- ի (ինտեգրված զարգացման միջավայր) վերջին տարբերակը, որը հասանելի է

Ներբեռնեք Arduino- ի հետևյալ երկու ուրվագծերից յուրաքանչյուրը (կցվում է)

  • rotary_encoder_1.ino (հարցման տարբերակ)
  • rotary_encoder_2.no (ընդհատվող տարբերակ)

Կրկնակի սեղմեք ձեր նախընտրած տարբերակի վրա և հետևեք էկրանի հրահանգներին:

Վայելեք…

Կտտացրեք այստեղ ՝ իմ մյուս հրահանգները դիտելու համար:

Խորհուրդ ենք տալիս: