Orodha ya maudhui:

Decoder rahisi ya Rotary: Hatua 4
Decoder rahisi ya Rotary: Hatua 4

Video: Decoder rahisi ya Rotary: Hatua 4

Video: Decoder rahisi ya Rotary: Hatua 4
Video: Cheki jama alivyo paa na ndege ya kichawi utashangaa 2024, Novemba
Anonim
Image
Image
Decoder rahisi ya Rotary
Decoder rahisi ya Rotary

Hii inaelezea njia rahisi ya kusimbua encoder inayofuatana ya rotary ukitumia Arduino Uno R3.

Taratibu za programu thabiti hutumiwa kuhesabu idadi ya mabadiliko, kuondoa kukatika kwa mawasiliano, na kuamua mwelekeo wa mzunguko. Vipengele vya ziada na meza za kutafuta hazihitajiki.

Matoleo ya usumbufu na yasiyo ya kukatiza ya nambari hutolewa.

Toleo la usumbufu la nambari linahitaji tu pini moja ya kukatiza.

Picha:

  • Picha ya kufungua inaonyesha encoder iliyokusanyika.
  • Picha ya skrini inaonyesha nambari ya toleo la kukatiza na hesabu wakati shaft ya encoder inazungushwa sawa na saa na kukabiliana na saa.
  • Video inaonyesha hesabu wakati wa mzunguko wa haraka.

Hatua ya 1: Mchoro wa Mzunguko

Mchoro wa Mzunguko
Mchoro wa Mzunguko

Mchoro wa wodi ya encoder umeonyeshwa kwenye mtini. 1.

Waya za kuruka zinauzwa moja kwa moja kwenye pini za encoder.

Badilishana waya mbili za bluu ikiwa mwelekeo wa hesabu umebadilishwa.

Hatua ya 2: Orodha ya Sehemu

Sehemu zifuatazo zilipatikana kutoka

  • 1 tu Arduino UNO R3 na Kebo ya USB.
  • Msimbo 1 tu wa mtiririko wa mzunguko (EC11 au sawa) na swichi.
  • Knob 1 tu inayofaa shimoni.
  • 3 tu waya za kuruka za kiume-kwa-kiume za Arduino.

Hatua ya 3: Nadharia

Nadharia
Nadharia

Usimbuaji wa mzunguko unaofanana hutengeneza mawimbi mawili ya mraba ambayo kila moja huhamishwa na digrii 90 kama inavyoonyeshwa kwenye Mtini. 1.

Mifumo ya mantiki katika Mawasiliano A na Mawasiliano B ni tofauti wakati shimoni inazungushwa kwa saa (CW) na kukabiliana na saa (CCW) kupitia nafasi ya 1 hadi 6.

Njia za kawaida za kuamua mwelekeo wa mzunguko ni pamoja na:

  • vifaa
  • mapacha hukatiza
  • mfano wa kutafuta meza

Mradi huu unatumia njia ya programu ambayo haiitaji meza za kutafuta. [1]

Mwelekeo

Badala ya kuangalia mifumo ya pato kutoka kwa Mawasiliano A na Mawasiliano B wacha tuangalie Mawasiliano A.

Ikiwa tutatoa mfano wa Mawasiliano B baada ya kila Mawasiliano Mpito tunaona kuwa:

  • Wasiliana na A na Mawasiliano B wana hali tofauti za mantiki wakati encoder inazungushwa CW
  • Wasiliana na A na Mawasiliano B wana hali sawa ya mantiki wakati encoder inapozungushwa CCW

Msimbo halisi:

// ----- Hesabu mabadiliko

HaliStateA = haliContactA (); ikiwa (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); ikiwa (CurrentStateA ==StateStateB) Hesabu ++; ikiwa (CurrentStateA! = CurrentStateB) Hesabu--; LastStateA = SasaStateA; }

Njia hii inatoa faida zifuatazo:

  • meza za kutafuta hazihitajiki
  • laini moja tu ya usumbufu inahitajika

Mjadala

Wasimbuaji wote wa mitambo wanakabiliwa na "mawasiliano ya baunt".

Ikiwa mawasiliano ya kubadili hayafanyi / kuvunja kwa busara hali yake ya mantiki itateleza kwa kasi kutoka JUU hadi LOW hadi mawasiliano ya swichi yatakapokaa. Hii inasababisha hesabu za uwongo.

Njia moja ya kukandamiza mwanya wa mawasiliano ni kuongeza kiboreshaji kidogo kwenye kila mawasiliano ya swichi. Kikaidi na kipinzani kinachohusiana cha kuvuta hutengeneza kiunganishi ambacho hupunguza masafa mafupi sana na inaruhusu voltage ya kuinuka kuinuka / kushuka kwa uzuri.

Ubaya wa njia hii ni kwamba mabadiliko yanaweza kukosa ikiwa shimoni ya encoder inazungushwa haraka.

Kutengua Programu

Njia hii hutumia kaunta mbili (Fungua, Ilifungwa) ambazo zimewekwa sifuri. [2]

Mara tu mpito unapogunduliwa kwenye Mawasiliano A:

  • Endelea kupiga kura Mawasiliano A.
  • Ongeza kaunta iliyofunguliwa, na weka upya kaunta iliyofungwa, wakati wowote Mawasiliano A iko juu.
  • Ongeza kaunta iliyofungwa, na weka upya kaunta iliyofunguliwa, wakati wowote Mawasiliano A iko chini.
  • Toka kitanzi wakati moja ya kaunta inapofikia hesabu iliyotanguliwa. Tunatafuta kwa ufanisi kipindi cha hali thabiti kufuatia bounce yoyote ya mawasiliano.

Msimbo halisi:

// ----- Ondoa Mawasiliano A

wakati (1) {if (digitalRead (ContactA)) {// ----- ContactA imefunguliwa wazi = 0; // Kitambulisho tupu cha wazi Fungua ++; // Unganisha ikiwa (Fungua> MaxCount) kurudi juu; } mwingine {// ----- MawasilianoA imefungwa wazi = 0; // Kitambulisho tupu cha wazi Kimefungwa ++; // Unganisha ikiwa (Imefungwa> MaxCount) kurudi CHINI; }}

Hakuna haja ya kufuta Mawasiliano B kwani mabadiliko ya Mawasiliano A na Mawasiliano B hayafanani.

Kuhesabu

"Uchafu" wa kiufundi unazidisha hesabu yako kwani hesabu mbili zimesajiliwa kati ya mibofyo (angalia tini 1).

Idadi ya "kizuizi" inaweza kuamua kutumia moduli 2 hesabu kama inavyoonyeshwa hapa chini.

Msimbo halisi:

// ----- Hesabu "detents"

ikiwa (Hesabu% 2 == 0) {Serial.print ("Hesabu:"); Serial.println (Hesabu / 2); }

Marejeo

Habari zaidi inaweza kupatikana kwa:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

Hatua ya 4: Programu

Mradi huu unahitaji toleo la hivi karibuni la Ardino Uno R3 IDE (mazingira jumuishi ya maendeleo) ambayo inapatikana kutoka

Pakua kila moja ya michoro mbili zifuatazo za Arduino (zilizoambatishwa)

  • Rotary_encoder_1.ino (toleo la kupigia kura)
  • Rotary_encoder_2.no (sumbua toleo)

Bonyeza mara mbili kwenye toleo unalopendelea na ufuate maagizo kwenye skrini.

Furahiya…

Bonyeza hapa kuona maelekezo yangu mengine.

Ilipendekeza: