Talaan ng mga Nilalaman:

Rotary Encoder - Maunawaan at Gamitin Ito (Arduino / iba pang ΜController): 3 Mga Hakbang
Rotary Encoder - Maunawaan at Gamitin Ito (Arduino / iba pang ΜController): 3 Mga Hakbang

Video: Rotary Encoder - Maunawaan at Gamitin Ito (Arduino / iba pang ΜController): 3 Mga Hakbang

Video: Rotary Encoder - Maunawaan at Gamitin Ito (Arduino / iba pang ΜController): 3 Mga Hakbang
Video: Lesson 97: Controlling Servo Motor using Rotary Encoder and Display Angle On LCD 2024, Hulyo
Anonim
Rotary Encoder - Unawain at Gamitin Ito (Arduino / iba pang ΜController)
Rotary Encoder - Unawain at Gamitin Ito (Arduino / iba pang ΜController)

Ang isang rotary encoder ay isang electro-mechanical device na nag-convert ng rotational na galaw sa digital o analog na impormasyon. Maaari itong lumiko sa pakanan o sa counter. Mayroong dalawang uri ng rotary encoder: Ganap at kamag-anak (incremental) na mga encoder.

Habang ang isang ganap na encoder ay naglalabas ng isang proporsyonal na halaga sa kasalukuyang anggulo ng baras, ang isang incremental encoder ay naglalabas ng hakbang ng baras at ng direksyon nito. (Sa kasong ito mayroon kaming isang incremental encoder)

Ang mga rotary encoder ay naging mas tanyag dahil nagamit mo ang dalawang pag-andar sa isang de-koryenteng module: Isang simpleng switch para sa kumpirmasyon ng mga opperation at ang rotary encoder upang mag-navigate, hal. sa pamamagitan ng isang menu.

Ang isang incremental rotary encoder ay bumubuo ng dalawang output signal habang ang baras nito ay umiikot. Nakasalalay sa direksyon, ang isa sa mga signal ay humahantong sa isa pa. (tingnan sa ibaba)

Hakbang 1: Pag-unawa sa Data ng Output

Pag-unawa sa Data ng Output
Pag-unawa sa Data ng Output

Tulad ng nakikita mo kapag ang encoder shaft ay nagsisimulang paikutin nang pakanan, ang Output A ay babagsak sa LOW muna at sinusundan ito ng Output B. Sa isang direksyon na pabalik-pabalik na direksyon ang operasyon ay lumiliko sa tapat.

Ngayon ay ipapatupad lamang namin ito sa aming µController (Gumamit ako ng isang Arduino Nano).

Hakbang 2: Buuin ang Circuit

Buuin ang Circuit
Buuin ang Circuit
Buuin ang Circuit
Buuin ang Circuit

Tulad ng inilarawan ko bago ang mga output ay lumikha ng isang TAAS at isang LABANG flank. Upang makakuha ng malinis na TAAS sa data pin A at B ng µController kailangan naming magdagdag ng mga resistors na Pull-Up. Ang karaniwang Pin C ay dumidiretso sa lupa para sa LOW flank.

Upang makakuha ng impormasyon tungkol sa panloob na switch (push-button) gagamitin namin ang iba pang dalawang mga pin. Ang isa sa kanila ay pupunta sa VCC at ang isa pa sa isang data Pin ng µController. Kailangan din naming magdagdag ng isang Pull-Down Resistor sa pin ng data upang makakuha ng isang malinis na LOW.

Posible rin na gumamit ng panloob na mga pull na Pull-Up at Pull-Down resistors ng iyong µController!

Sa aking kaso ang pinout ay katulad ng:

  • +3, 3V => +3, 3V (Arduino) (posible + 5V din)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Pin

    11

  • C => GND
  • SW =>

    Pin

    12

Hakbang 3: Pagsulat ng Code

int pinA = 10; // internal switch A int pinB = 11; // internal switch B int pinSW = 12; // switch (pinindot Encoder) int encoderPosCount = 0; // nagsisimula sa zero, baguhin kung nais mo

int posisyonval;

bool switchval; int mrotateLast; int mrotate;

walang bisa ang pag-setup () {

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

void loop () {readencoder (); kung (readswitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); kung (mrotate! = mrotateLast) {// knob ay umiikot kung (digitalRead (pinB)! = mrotate) {// switch A ay nagbago muna -> umiikot na clockwise encoderPosCount ++; Serial.println ("pinaikot nang pakanan"); } iba pa {// switch B ay nagbago muna -> umiikot ng pakaliwa na encoderPosCount--; Serial.println ("pinaikot na pakaliwa"); }

Serial.print ("Posisyon ng Encoder:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; ibalik ang encoderPosCount; } bool readswitch () {

kung (digitalRead (pinSW)! = 0) {// switch ay pinindot

habang (digitalRead (pinSW)! = 0) {} // switch ay kasalukuyang pinindot switchval = 1; } iba pa {switchval = 0;} // switch ay hindi naka-compress na return switch; }

Ngayon ay maaari mong buksan ang encoder at ang variable encoderPosCount ay bibilangin kung paikutin mo pakanan at bibilangin kung paikutin mo ang counter ng pakaliwa.

Ayan yun! Simple at kapaki-pakinabang.

Huwag mag-atubiling baguhin at isagawa ang code. Maaari mo itong ipatupad sa iyong proyekto.

Mag-a-upload din ako ng isang proyekto sa LED kung saan ginamit ko ang encoder upang maitakda ang ningning ng aking mga LED.

Inirerekumendang: