Turinys:

Paprastas rotacinis dekoderis: 4 žingsniai
Paprastas rotacinis dekoderis: 4 žingsniai

Video: Paprastas rotacinis dekoderis: 4 žingsniai

Video: Paprastas rotacinis dekoderis: 4 žingsniai
Video: Который? Zoom H4n Pro, H5 или H6? Сравнение портативных рекордеров Zoom 2024, Lapkritis
Anonim
Image
Image
Paprastas rotacinis dekoderis
Paprastas rotacinis dekoderis

Š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

Grandinės schema
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

Teorija
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.

Rekomenduojamas: