Мазмұны:

Arduino көмегімен айналмалы кодер оқулығы: 6 қадам
Arduino көмегімен айналмалы кодер оқулығы: 6 қадам
Anonim
Arduino көмегімен ротациялық кодердің оқулығы
Arduino көмегімен ротациялық кодердің оқулығы

Айналмалы кодер - бұл айналу кезінде қозғалысты және орынды бақылауға қабілетті электронды компонент. Айналмалы кодерде айналмалы кодер айналған кезде импульстарды тудыратын оптикалық сенсорлар қолданылады. Айналмалы кодерді әдетте механикалық немесе роботты қозғалыс мониторы ретінде қолдану дисплейдегі мәзірді таңдау үшін де қолданыла алады. Айналмалы кодердің екі шығысы бар, ол теріс (CW) және оң (CCW) айналуды ажырата алады, сонымен қатар бір түйме бар.

1 -қадам: Айналмалы кодердің импульстік ағыны

Айналмалы кодердің импульстік ағыны
Айналмалы кодердің импульстік ағыны

Келесі айналмалы кодер шығаратын импульстік ағын жоғарыдағы суретке ұқсас.

2 -қадам: Ротари -кодерді бекіту

Айналмалы кодердің бекітілуі
Айналмалы кодердің бекітілуі

Түсіндіру:

  • 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 2 PIN коды пайдаланылады, ал PIN 3 тек тұрақты енгізу ретінде қолданылады.

#анықтаушы0PinA 2 #анықтаушы0PinB 3 #анықтаушы0Btn 4 int encoder0Pos = 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 ++; } басқа {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 -ке бөліңіз.

19 - 25 -жолда - айналмалы кодты CW немесе CCW екенін анықтауға арналған бағдарлама. 19 - 25 жолдардың түсіндірмесі - кодердің ағымдағы оқылуы алдыңғы айналу деректерінен үлкен болған кезде, содан кейін CW түрінде көрсетіледі. Егер ағымдағы көрсеткіш алдыңғы оқудан кіші болса, онда ол CCW деп белгіленеді.

6 -қадам: Шығару

Шығу
Шығу

1 = ротордың басылмаған кездегі іске қосу түймесінің мәні

Ұсынылған: