Sisukord:

Lihtne pöörddekooder: 4 sammu
Lihtne pöörddekooder: 4 sammu

Video: Lihtne pöörddekooder: 4 sammu

Video: Lihtne pöörddekooder: 4 sammu
Video: Nmap.exe Demystified: The Ultimate Network Discovery Tool Part 1 2024, November
Anonim
Image
Image
Lihtne pöörddekooder
Lihtne pöörddekooder

See juhend kirjeldab lihtsat meetodit järjestikuse pöörleva kodeerija dekodeerimiseks, kasutades Arduino Uno R3.

Kompaktseid tarkvaraprogramme kasutatakse üleminekute arvu loendamiseks, kontakti põrkumise kõrvaldamiseks ja pöörlemissuuna määramiseks. Lisakomponente ja otsingulaudu pole vaja.

Pakutakse koodi katkematut ja katkematut versiooni.

Koodi katkestusversioon nõuab ainult ühte katkestusnõela.

Pildid:

  • Avafotol on kokku pandud kodeerija.
  • Ekraanipilt näitab katkestusversiooni koodi ja arvu, kui kodeerimisvõlli pööratakse päripäeva ja vastupäeva.
  • Video näitab loendamist kiire pöörlemise ajal.

Samm: vooluahela skeem

Lülitusskeem
Lülitusskeem

Koodri ühendusskeem on näidatud joonisel 1.

Džemprijuhtmed on joodetud otse kodeerija tihvtide külge.

Vahetage kaks sinist juhet, kui loendussuund on vastupidine.

Samm: osade loend

Järgmised osad saadi saidilt

  • 1 ainult Arduino UNO R3 koos USB -kaabliga.
  • 1 ainult järjestikune pöörlev kooder (EC11 või samaväärne) koos lülitiga.
  • 1 ainult võllile sobiv nupp.
  • 3 ainult Arduino mees-mees džemprijuhet.

3. samm: teooria

Teooria
Teooria

Järjestikused pöörlevad kodeerijad genereerivad kaks ruutlainet, millest igaüks on nihutatud 90 kraadi, nagu on näidatud joonisel 1.

Loogika mustrid kontaktis A ja kontaktis B on erinevad, kui võlli pööratakse päripäeva (CW) ja vastupäeva (CCW) läbi positsioonide 1 kuni 6.

Tavalised pöörlemissuuna määramise meetodid on järgmised:

  • riistvara
  • katkestab kaksik
  • mustri otsingulauad

See projekt kasutab tarkvaralist meetodit, mis ei nõua otsingutabeleid. [1]

Suund

Selle asemel, et vaadata kontakti A ja kontakti B väljundmustreid, keskendume kontaktile A.

Kui proovime kontakti B pärast iga A -kontakti üleminekut, märgime, et:

  • Kontaktil A ja kontaktil B on vastupidised loogikaseisundid, kui kodeerijat pööratakse CW
  • Kontaktil A ja kontaktil B on sama loogiline olek, kui kodeerijat pööratakse CCW

Tegelik kood:

// ----- Üleminekute loendamine

CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = Praegune riik; }

See meetod pakub järgmisi eeliseid:

  • otsingulauad pole vajalikud
  • vaja on ainult ühte katkestusliini

Debounce

Kõik mehaanilised kodeerijad kannatavad „kontakti põrkumise” all.

Kui lülitikontakt ei teki/puruneb puhtalt, võngub selle loogiline olek kiiresti kõrgelt madalale, kuni lüliti kontakt rahuneb. Selle tulemuseks on valearvestus.

Üks meetod kontakti põrgatamise pärssimiseks on väikese lüliti lisamine igale lüliti kontaktile. Kondensaator ja sellega seotud tõmbetakistus moodustavad integraatori, mis lühistab tõhusalt kõrgeid sagedusi ja võimaldab lüliti pingel graatsiliselt tõusta/langeda.

Selle lähenemise negatiivne külg on see, et anduri võlli kiire pööramise korral võivad üleminekud vahele jääda.

Tarkvara väljalülitamine

See meetod kasutab kahte loendurit (avatud, suletud), mis on seatud nulli. [2]

Kui kontaktis A on tuvastatud üleminek:

  • Pidev küsitlus Võtke ühendust A.
  • Suurendage avatud loendurit ja lähtestage suletud loendur, kui kontakt A on HIGH.
  • Suurendage suletud loendurit ja lähtestage avatud loendur, kui kontakt A on madal.
  • Väljuge tsüklist, kui üks loenduritest jõuab etteantud arvuni. Otsime tõhusalt püsikontsentratsiooni perioodi pärast iga kontakti põrkumist.

Tegelik kood:

// ----- Debounce Contact A

samas (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0; // Tühi vastupidine integraator Open ++; // Integreeri, kui (avatud> MaxCount) tagastab HIGH; } else {// ----- ContactA is Closed Open = 0; // Tühi vastupidine integraator Suletud ++; // Integreeri, kui (suletud> MaxCount) tagastab LOW; }}

Kontakti B ei ole vaja tühistada, kuna kontakti A ja kontakti B üleminekud ei lange kokku.

Loendamine

Mehaaniline "kinnipidamine" kahekordistab teie arvu tõhusalt, kuna klõpsude vahel registreeritakse kaks loendust (vt joonis 1).

„Kinnipidamiste” arvu võib määrata modulo 2 aritmeetika abil, nagu allpool näidatud.

Tegelik kood:

// ----- loendage "kinnipidamised"

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

Viited

Lisateavet leiate aadressilt:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

4. samm: tarkvara

Selle projekti jaoks on vaja Ardino Uno R3 IDE (integreeritud arenduskeskkond) viimast versiooni, mis on saadaval aadressil

Laadige alla kõik järgmised kaks Arduino visandit (lisatud)

  • rotary_encoder_1.ino (küsitlusversioon)
  • rotary_encoder_2.no (katkestusversioon)

Topeltklõpsake soovitud versiooni ja järgige ekraanil kuvatavaid juhiseid.

Nautige…

Muude juhendite vaatamiseks klõpsake siin.

Soovitan: