Talaan ng mga Nilalaman:

Simpleng Rotary Decoder: 4 na Hakbang
Simpleng Rotary Decoder: 4 na Hakbang

Video: Simpleng Rotary Decoder: 4 na Hakbang

Video: Simpleng Rotary Decoder: 4 na Hakbang
Video: Professional Sound Mixer Circuit - Homemade 2024, Nobyembre
Anonim
Image
Image
Simpleng Rotary Decoder
Simpleng Rotary Decoder

Ang itinuturo na ito ay naglalarawan ng isang simpleng pamamaraan ng pag-decode ng isang sunud-sunod na rotary encoder gamit ang isang Arduino Uno R3.

Ginagawa ang mga regular na gawain ng software upang mabilang ang bilang ng mga paglipat, alisin ang contact bounce, at matukoy ang direksyon ng pag-ikot. Ang mga karagdagang bahagi at talahanayan ng paghahanap ay hindi kinakailangan.

Nakagambala at hindi nagagambala na mga bersyon ng code ay ibinigay.

Ang nakakaabala na bersyon ng code ay nangangailangan lamang ng isang solong pag-abala ng pin.

Mga Larawan:

  • Ipinapakita ng pambungad na larawan ang naka-assemble na encoder.
  • Ipinapakita ng shot ng screen ang code para sa nakagambalang bersyon at ang bilang kapag ang encoder shaft ay pinaikot pakanan at kontra sa pakaliwa.
  • Ipinapakita ng video ang bilang sa mabilis na pag-ikot.

Hakbang 1: Diagram ng Circuit

Diagram ng Circuit
Diagram ng Circuit

Ang diagram ng mga kable ng encoder ay ipinapakita sa fig.1.

Ang mga jumper wires ay solder na direkta sa mga encoder pin.

Palitan ang dalawang asul na mga wire kung ang direksyon ng bilang ay baligtad.

Hakbang 2: Listahan ng Mga Bahagi

Ang mga sumusunod na bahagi ay nakuha mula sa

  • 1 lang ang Arduino UNO R3 na may USB Cable.
  • 1 lamang ang sunud-sunod na rotary encoder (EC11 o katumbas) na may switch.
  • 1 isang knob lamang upang umangkop sa baras.
  • 3 lamang ang Arduino male-to-male jumper wires.

Hakbang 3: Teorya

Teorya
Teorya

Ang mga sunud-sunod na rotary encoder ay bumubuo ng dalawang square-waves na ang bawat isa ay na-displaced ng 90 degree tulad ng ipinakita sa Fig.1.

Ang mga pattern ng lohika sa Makipag-ugnay sa A at Makipag-ugnay sa B ay magkakaiba kapag ang baras ay pinaikot paikot (CW) at counter ng pakaliwa (CCW) sa pamamagitan ng mga posisyon 1 hanggang 6.

Ang mga karaniwang pamamaraan ng pagtukoy ng direksyon ng pag-ikot ay kinabibilangan ng:

  • hardware
  • nakakagambala ang kambal
  • mga talahanayan ng paghahanap ng pattern

Gumagamit ang proyektong ito ng isang pamamaraan ng software na hindi nangangailangan ng mga talahanayan ng paghahanap. [1]

Direksyon

Sa halip na tingnan ang mga pattern ng output mula sa Makipag-ugnay sa A at Makipag-ugnay sa B mag-focus tayo sa Makipag-ugnay sa A.

Kung natitikman namin ang pakikipag-ugnay sa B pagkatapos ng bawat paglipat ng Isang Pakikipag-ugnay na tandaan namin na:

  • Ang contact A at contact B ay may kabaligtaran na estado ng lohika kapag ang encoder ay pinaikot CW
  • Ang contact A at contact B ay may parehong estado ng lohika kapag ang encoder ay pinaikot CCW

Tunay na code:

// ----- Bilangin ang mga pagbabago

CurrentStateA = stateContactA (); kung (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); kung (CurrentStateA == CurrentStateB) Bilang ++; kung (CurrentStateA! = CurrentStateB) Bilangin--; LastStateA = CurrentStateA; }

Nag-aalok ang pamamaraang ito ng mga sumusunod na kalamangan:

  • hindi kinakailangan ang mga talahanayan ng paghahanap
  • iisang linya ng paggambala lamang ang kinakailangan

Pagbulalas

Ang lahat ng mga mechanical encoder ay nagdurusa mula sa "contact bounce".

Kung ang isang contact sa switch ay hindi gagawa / masira nang malinis ang estado ng lohika ay mabilis na mag-oscillate mula SA Mataas hanggang sa Mababa hanggang sa mag-ayos ang contact sa switch. Nagreresulta ito sa maling bilang.

Ang isang pamamaraan para sa pagpigil sa bounce ng contact ay upang magdagdag ng isang maliit na capacitor sa bawat contact ng switch. Ang capacitor at nauugnay na pull-up risistor ay bumubuo ng isang integrator na kung saan ay mabisa ang mataas na frequency at pinapayagan ang boltahe ng switch na tumaas / mahulog nang kaaya-aya.

Ang downside sa diskarte na ito ay ang mga paglipat ay maaaring napalampas kung ang encode shaft ay mabilis na pinaikot.

Pag-utos ng Software

Gumagamit ang pamamaraang ito ng dalawang mga counter (Buksan, Isara) na itinakda sa zero. [2]

Kapag nakita ang isang paglipat sa Makipag-ugnay sa A:

  • Patuloy na poll Makipag-ugnay sa A.
  • Palakihin ang Open counter, at i-reset ang Closed counter, tuwing MAKataas ang contact A.
  • Palakihin ang Closed counter, at i-reset ang Open counter, tuwing mababa ang contact A.
  • Lumabas sa loop kapag naabot ng isa sa mga counter ang isang paunang natukoy na bilang. Mabisang hinahanap namin ang matatag na panahon ng estado kasunod ng anumang bounce ng contact.

Tunay na code:

// ----- I-debate ang Pakikipag-ugnay sa A

habang (1) {kung (digitalRead (ContactA)) {// ----- Ang contactA ay Bukas Na Sarado = 0; // Empty kabaligtaran integrator Buksan ++; // Isama kung bumalik ang (Buksan> MaxCount) TAAS; } iba pa {// ----- Ang contactA ay Saradong Bukas = 0; // Empty tapat integrator Sarado ++; // Isama kung (Sarado> MaxCount) ibalik ang LOW; }}

Hindi kailangang i-debounce ang contact B dahil ang mga pakikipag-ugnay sa A at contact B ay hindi magkakasabay.

Nagbibilang

Ang isang mekanikal na "detent" na epektibo na pagdodoble ng iyong bilang bilang dalawang bilang ay nakarehistro sa pagitan ng mga pag-click (tingnan ang fig 1).

Ang bilang ng mga "detent" ay maaaring matukoy gamit ang modulo 2 arithmetic tulad ng ipinakita sa ibaba.

Tunay na code:

// ----- Bilangin ang "mga detenso"

kung (Bilangin ang% 2 == 0) {Serial.print ("Bilang:"); Serial.println (Bilang / 2); }

Mga Sanggunian

Ang karagdagang impormasyon ay maaaring matagpuan sa:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ ButtonorSwitchDebounceinSof…

Hakbang 4: Software

Nangangailangan ang proyektong ito ng isang kamakailang bersyon ng Ardino Uno R3 IDE (integrated environment na pag-unlad) na magagamit mula sa

I-download ang bawat isa sa mga sumusunod na dalawang sketch ng Arduino (nakakabit)

  • rotary_encoder_1.ino (bersyon ng botohan)
  • rotary_encoder_2.no (makagambala na bersyon)

Mag-double click sa iyong ginustong bersyon at sundin ang mga tagubilin sa screen.

Masiyahan…

Mag-click dito upang matingnan ang aking iba pang mga itinuturo.

Inirerekumendang: