Mündəricat:

Rotary Encoder - Anlayın və İstifadə edin (Arduino/digər ΜController): 3 addım
Rotary Encoder - Anlayın və İstifadə edin (Arduino/digər ΜController): 3 addım

Video: Rotary Encoder - Anlayın və İstifadə edin (Arduino/digər ΜController): 3 addım

Video: Rotary Encoder - Anlayın və İstifadə edin (Arduino/digər ΜController): 3 addım
Video: Lesson 97: Controlling Servo Motor using Rotary Encoder and Display Angle On LCD 2024, Dekabr
Anonim
Rotary Encoder - Anlayın və İstifadə Edin (Arduino/other ΜController)
Rotary Encoder - Anlayın və İstifadə Edin (Arduino/other ΜController)

Rotary encoder, fırlanma hərəkətini rəqəmsal və ya analoq məlumatlara çevirən bir elektro-mexaniki cihazdır. Saat yönünde və ya saat yönünün əksinə dönə bilər. İki növ fırlanan kodlayıcı var: Mütləq və nisbi (artan) kodlayıcılar.

Mütləq bir kodlayıcı cari mil bucağı ilə mütənasib bir dəyər çıxardığı halda, artımlı bir kodlayıcı milin addımını və istiqamətini çıxarır. (Bu halda artımlı bir kodlayıcımız var)

Bir elektrik modulunda iki funksiyadan istifadə edə bildiyiniz üçün fırlanan kodlayıcılar daha populyarlaşır: Fərqləri təsdiqləmək üçün sadə bir keçid və naviqasiya üçün fırlanan kodlayıcı, məsələn. menyu vasitəsilə.

Artan bir fırlanan kodlayıcı, mili dönərkən iki çıxış siqnalı yaradır. İstiqamətdən asılı olaraq siqnallardan biri digərini aparır. (aşağıya baxın)

Addım 1: Çıxış Məlumatlarını Anlamaq

Çıxış məlumatlarını anlamaq
Çıxış məlumatlarını anlamaq

Gördüyünüz kimi, enkoder şaftı saat əqrəbi istiqamətində dönməyə başladıqda, A Çıxışı əvvəl LOW -a düşür və B Çıxışı onu izləyir. Əks istiqamətdə saat əqrəbinin əksinə hərəkət edir.

İndi bunu yalnız µController -də tətbiq etməliyik (Arduino Nano istifadə etdim).

Addım 2: Dövrə qurun

Dövrə qurun
Dövrə qurun
Dövrə qurun
Dövrə qurun

Daha əvvəl təsvir etdiyim kimi, çıxışlar YÜKSƏK və DÜŞÜK cinah yaradır. ΜController-in A və B pinlərində təmiz bir YÜKS əldə etmək üçün Pull-Up rezistorları əlavə etməliyik. Ümumi Pin C, LOW cinah üçün birbaşa yerə gedir.

Daxili keçid (düymə) haqqında məlumat əldə etmək üçün digər iki sancağı istifadə edəcəyik. Onlardan biri VCC -yə, digəri isə µController -in məlumat pininə gedir. Təmiz LOW əldə etmək üçün məlumat pininə Pull-Down Resistor da əlavə etməliyik.

ΜController-in daxili Pull-Up və Pull-Down rezistorlarından da istifadə etmək mümkündür!

Mənim vəziyyətimdə pinout belə görünür:

  • +3, 3V => +3, 3V (Arduino) (həmçinin +5V mümkündür)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Pin

    11

  • C => GND
  • SW =>

    Pin

    12

Addım 3: Kod yazmaq

int pinA = 10; // daxili keçid A int pinB = 11; // daxili keçid B int pinSW = 12; // keçid (Encoder basıldı) int encoderPosCount = 0; // sıfırdan başlayır, istəsən dəyişdir

int mövqeyi;

bool keçid; int mrotateSon; int mrotate;

boş quraşdırma () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); gecikmə (50); }

void loop () {readencoder (); if (readwitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// düyməsi dönərsə if (digitalRead (pinB)! = mrotate) {// keçid A əvvəl dəyişdi -> saat yönünde dönən encoderPosCount ++; Serial.println ("saat yönünde döndərilir"); } başqa {// keçid B əvvəl dəyişdirildi-> saat əqrəbinin əksinə fırlanan encoderPosCount--; Serial.println ("saat əqrəbinin əksinə döndərilir"); }

Serial.print ("Encoder Position:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; encoderPosCount qaytarın; } bool oxuyucusu () {

if (digitalRead (pinSW)! = 0) {// açarı sıxılır

while (digitalRead (pinSW)! = 0) {} // açarı hazırda switchval = 1; } başqa {switchval = 0;} // keçid sıxılmamış qayıtma keçididir; }

İndi kodlayıcını çevirə bilərsiniz və saat yönünün əksinə dönsəniz encoderPosCount sayılacaq və saat əqrəbinin əksinə döndərsəniz geri sayacaqsınız.

Bu belədir! Sadə və faydalı.

Kodu dəyişdirmək və yerinə yetirməkdən çekinmeyin. Layihənizdə tətbiq edə bilərsiniz.

LED -lərimin parlaqlığını təyin etmək üçün kodlayıcıdan istifadə etdiyim bir LED layihəsi də yükləyəcəyəm.

Tövsiyə: