Video: Lihtne pöörddekooder: 4 sammu
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
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
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
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.