Turinys:
Video: Paprastas rotacinis dekoderis: 4 žingsniai
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Šioje instrukcijoje aprašomas paprastas nuoseklaus sukamojo kodavimo įrenginio dekodavimo metodas naudojant „Arduino Uno R3“.
Kompaktiška programinė įranga naudojama skaičiuojant perėjimų skaičių, pašalinant kontaktinį atšokimą ir nustatant sukimosi kryptį. Papildomi komponentai ir peržiūros lentelės nereikalingi.
Pateikiamos nepertraukiamos ir nepertraukiamos kodo versijos.
Norint pertraukti kodo versiją, reikia tik vieno pertraukimo kaiščio.
Vaizdai:
- Atidarymo nuotraukoje parodytas surinktas kodavimo įrenginys.
- Ekrano nuotraukoje rodomas pertraukimo versijos kodas ir skaičius, kai kodavimo velenas pasukamas pagal laikrodžio rodyklę ir prieš laikrodžio rodyklę.
- Vaizdo įraše rodomas skaičius greito sukimosi metu.
1 žingsnis: grandinės schema
Kodavimo įrenginio prijungimo schema parodyta 1 pav.
Perjungimo laidai yra lituojami tiesiai prie kodavimo kaiščių.
Pakeiskite du mėlynus laidus, jei skaičiavimo kryptis pasikeičia.
2 žingsnis: dalių sąrašas
Šios dalys buvo gautos iš
- 1 tik „Arduino UNO R3“su USB kabeliu.
- 1 tik nuoseklusis sukamasis kodavimo įrenginys (EC11 arba lygiavertis) su jungikliu.
- 1 tik rankenėlė, tinkanti velenui.
- 3 tik „Arduino“jungiamieji laidai.
3 žingsnis: teorija
Nuoseklūs sukamieji kodavimo įrenginiai sukuria dvi kvadratines bangas, kurių kiekviena pasislenka 90 laipsnių, kaip parodyta 1 pav.
A ir B kontaktų loginiai modeliai skiriasi, kai velenas pasukamas pagal laikrodžio rodyklę (CW) ir prieš laikrodžio rodyklę (CCW) per 1–6 pozicijas.
Įprasti sukimosi krypties nustatymo metodai yra šie:
- aparatinė įranga
- - pertraukia dvyniai
- modelio paieškos lentelės
Šiame projekte naudojamas programinės įrangos metodas, kuriam nereikia peržvalgos lentelių. [1]
Kryptis
Užuot žiūrėję į kontaktų A ir B kontaktų išvesties modelius, sutelkime dėmesį į kontaktą A.
Jei po kiekvieno „A“kontakto perėjimo imame B kontakto pavyzdį, pastebime, kad:
- Kontaktas A ir kontaktas B turi priešingas logines būsenas, kai kodavimo įrenginys pasukamas CW
- Kontaktas A ir kontaktas B turi tą pačią loginę būseną, kai kodavimo įrenginys yra pasuktas CCW
Tikrasis kodas:
// ----- Skaičiuokite perėjimus
CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }
Šis metodas suteikia šiuos privalumus:
- paieškos lentelių nereikia
- reikia tik vienos pertraukos linijos
Debounce
Visi mechaniniai kodavimo įrenginiai kenčia nuo „kontaktinio atšokimo“.
Jei jungiklio kontaktas nesigauna/nesuyra švariai, jo loginė būsena greitai svyruos nuo HIGH iki LOW, kol jungiklio kontaktas nusistovės. Dėl to gaunami klaidingi skaičiavimai.
Vienas iš kontaktų atšokimo slopinimo būdų yra pridėti mažą kondensatorių prie kiekvieno jungiklio kontakto. Kondensatorius ir su juo susijęs traukiamasis rezistorius sudaro integratorių, kuris efektyviai sutrumpina aukštus dažnius ir leidžia jungiklio įtampai grakščiai kilti/kristi.
Šio metodo trūkumas yra tas, kad perėjimai gali būti praleisti, jei kodavimo velenas greitai pasukamas.
Programinės įrangos išjungimas
Šis metodas naudoja du skaitiklius (atidaryti, uždaryti), kurie buvo nustatyti į nulį. [2]
Kai kontaktas A aptinka perėjimą:
- Nuolatinė apklausa Susisiekite su A.
- Padidinkite atidarymo skaitiklį ir iš naujo nustatykite uždarytą skaitiklį, kai kontaktas A yra AUKŠTAS.
- Padidinkite uždarytą skaitiklį ir iš naujo nustatykite atidarymo skaitiklį, kai kontaktas A yra žemas.
- Išeikite iš ciklo, kai vienas iš skaitiklių pasiekia iš anksto nustatytą skaičių. Mes efektyviai ieškome pastovios būsenos laikotarpio po bet kokio kontakto atmetimo.
Tikrasis kodas:
// ----- Debounce Contact A
nors (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0; // Tuščias priešingas integratorius Open ++; // Integruoti, jei (Open> MaxCount) return HIGH; } else {// ----- ContactA is Closed Open = 0; // Tuščias priešingas integratorius Uždarytas ++; // Integruoti, jei (uždaryta> MaxCount) grąžina LOW; }}
Nereikia atjungti B kontakto, nes kontaktai A ir B kontaktai nesutampa.
Skaičiavimas
Mechaninis „sulaikymas“efektyviai padvigubina jūsų skaičių, nes tarp paspaudimų registruojami du skaičiai (žr. 1 pav.).
„Sulaikymų“skaičius gali būti nustatytas naudojant 2 modulio aritmetiką, kaip parodyta žemiau.
Tikrasis kodas:
// ----- suskaičiuokite „sulaikymus“
if (Count % 2 == 0) {Serial.print ("Count:"); Serial.println (Count / 2); }
Nuorodos
Daugiau informacijos galima rasti adresu:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
4 žingsnis: programinė įranga
Šiam projektui reikalinga naujausia „Ardino Uno R3 IDE“(integruotos kūrimo aplinkos) versija, kurią galima rasti adresu
Atsisiųskite kiekvieną iš šių dviejų „Arduino“eskizų (pridedama)
- rotary_encoder_1.ino (apklausos versija)
- rotary_encoder_2.no (pertraukimo versija)
Dukart spustelėkite norimą versiją ir vykdykite ekrane pateikiamas instrukcijas.
Mėgautis …
Spustelėkite čia, jei norite peržiūrėti kitus mano nurodymus.