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

Rotary Encoder- ի ձեռնարկը Arduino- ի հետ. 6 քայլ
Rotary Encoder- ի ձեռնարկը Arduino- ի հետ. 6 քայլ

Video: Rotary Encoder- ի ձեռնարկը Arduino- ի հետ. 6 քայլ

Video: Rotary Encoder- ի ձեռնարկը Arduino- ի հետ. 6 քայլ
Video: Lesson 97: Controlling Servo Motor using Rotary Encoder and Display Angle On LCD 2024, Նոյեմբեր
Anonim
Rotary Encoder- ի ձեռնարկը Arduino- ի հետ
Rotary Encoder- ի ձեռնարկը Arduino- ի հետ

Պտտվող կոդավորիչը էլեկտրոնային բաղադրիչ է, որն ունակ է պտտելիս վերահսկել շարժումն ու դիրքը: Պտտվող կոդավորիչն օգտագործում է օպտիկական տվիչներ, որոնք կարող են իմպուլսներ առաջացնել, երբ պտտվող կոդավորիչը պտտվում է: Պտտվող կոդավորիչի կիրառումը սովորաբար որպես մեխանիկական կամ ռոբոտային շարժման մոնիտոր կարող է օգտագործվել նաև էկրանին ընտրացանկի ընտրության համար: Պտտվող կոդավորիչն ունի երկու ելք, որպեսզի կարողանա տարբերել բացասական (CW) և դրական (CCW) ռոտացիան և ունի նաև մեկ կոճակ:

Քայլ 1. Պտտվող կոդավորիչի իմպուլսային հոսք

Պտտվող կոդավորիչի իմպուլսային հոսք
Պտտվող կոդավորիչի իմպուլսային հոսք

Հետևյալ պտտվող կոդավորիչի կողմից առաջացած զարկերակային հոսքը նման է վերևի նկարին:

Քայլ 2. Պտտվող կոդավորիչի տեղադրում

Պտտվող կոդավորիչի Pinout
Պտտվող կոդավորիչի Pinout

Բացատրություն:

  • GND GND
  • + + 5 Վ
  • Սեղմելիս պտտվող կոդավորիչի SW կոճակը
  • DT Տվյալներ
  • CLK Տվյալներ 2

DT կամ CLK կապումներից մեկը պետք է միացված լինի Arduino Uno- ի ընդհատվող ոտքին, կամ DT- ի և CLK- ի երկուսն էլ միացված են ընդհատման քորոցին:

Քայլ 3: Սխեմատիկ

Սխեմատիկ
Սխեմատիկ
  • GND à GND Arduino Uno
  • + à + 5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK à PIN2 Arduino Uno

Քայլ 4: Կոդ

Կոդ
Կոդ

Հետևյալ ձեռնարկում, որը կօգտագործվի որպես ընդհատում, Arduino Uno- ի PIN 2 -ն է, մինչդեռ PIN 3 -ը օգտագործվում է միայն որպես սովորական մուտքագրում:

#սահմանել կոդավորողին0ՓինԱ 2 #սահմանել ծածկագրողինՊինԲ 3 #սահմանել կոդավորողին 0Btn 4 ինտ կոդավորողին 0Pos = 0; void setup () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {

Serial.print («CCW»);

} lastValRotary = valRotary; Serial.println (""); ուշացում (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = encoder0Pos/2.5; }

Վերոնշյալ ուրվագծի 10 -րդ տողում օգտագործվում է Arduino Uno կապում 2 -ի ընդհատումը միացնելու համար: «DoEncoder» գործառույթում հաշվարկվում է պտտվող կոդավորիչից: Եթե DT- ի և CLK- ի արժեքը (Arduino Uno- ի քորոցային ընդհատում) նույնն է, ապա «encoder0Pos» փոփոխականը կավելանա / կավելացվի, բացի այդ պայմանից, «encoder0Pos» փոփոխականը նվազեցվում է:

Քայլ 5: Բացատրություն

ValRotary արժեքը գործող քայլերի քանակի արժեքն է: ValRotary արժեքը ստացվում է պտտվող սենսորային կոդավորիչի ընթերցման արժեքից `բաժանված 2.5 -ի: Թեստից ստացվում է 2,5 արժեք, քանի որ պտտվող կոդավորիչի մեկ քայլը կարող է գերազանցել 1 -ը, ուստի բաժանեք 2,5 -ի `դրա արժեքի համար` ըստ perstep- ի և նաև ընթերցման հետաձգման ավելացման:

19 - 25 տողերում մի ծրագիր է ՝ որոշելու ՝ պտտվող պտտվող կոդավորիչը CW է, թե՞ CCW: 19 - 25 տողերի բացատրությունն այն է, երբ ընթացիկ պտտվող ծածկագրիչի ընթերցումը ավելի մեծ է, քան այն նախկին պտտվող տվյալները, որոնք այն ժամանակ արտահայտվում էին որպես CW: Եթե ընթացիկ ընթերցումը ավելի փոքր է, քան նախորդ ընթերցումը, ապա այն նշվում է որպես CCW:

Քայլ 6: Արդյունք

Ելք
Ելք

1 = պտտվողի մեկնարկի կոճակի արժեքը, երբ այն սեղմված չէ

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