Kazalo:

Preprost rotacijski dekoder: 4 koraki
Preprost rotacijski dekoder: 4 koraki

Video: Preprost rotacijski dekoder: 4 koraki

Video: Preprost rotacijski dekoder: 4 koraki
Video: CS50 2013 - Week 2, continued 2024, Julij
Anonim
Image
Image
Preprost rotacijski dekoder
Preprost rotacijski dekoder

Ta navodila opisujejo preprosto metodo dekodiranja zaporednega rotacijskega dajalnika z uporabo Arduino Uno R3.

Kompaktne programske rutine se uporabljajo za štetje števila prehodov, odpravo odklona stikov in določanje smeri vrtenja. Dodatne komponente in iskalne tabele niso potrebne.

Na voljo sta različici kode s prekinitvami in neprekinjeno.

Prekinitvena različica kode zahteva le en prekinitveni zatič.

Slike:

  • Odprta fotografija prikazuje sestavljen kodirnik.
  • Posnetek zaslona prikazuje kodo za različico prekinitve in štetje, ko se gred kodirnika vrti v smeri urinega kazalca in v nasprotni smeri urinega kazalca.
  • Videoposnetek prikazuje štetje med hitrim vrtenjem.

1. korak: Shema vezja

Shema vezja
Shema vezja

Shema ožičenja dajalnika je prikazana na sliki 1.

Mostične žice so spajkane neposredno na zatiče dajalnika.

Zamenjajte dve modri žici, če je smer štetja obratna.

2. korak: Seznam delov

Naslednji deli so bili pridobljeni s spletnega mesta

  • 1 samo Arduino UNO R3 s kablom USB.
  • 1 samo zaporedni vrtljivi dajalnik (EC11 ali enakovreden) s stikalom.
  • 1 samo gumb, ki ustreza gredi.
  • 3 samo Arduino moške žice za moške.

3. korak: Teorija

Teorija
Teorija

Zaporedni rotacijski dajalniki ustvarjajo dva kvadratna vala, od katerih se vsak premakne za 90 stopinj, kot je prikazano na sliki 1.

Logični vzorci na kontaktu A in kontaktu B so različni, če se gred obrača v smeri urinega kazalca (CW) in v nasprotni smeri urinega kazalca (CCW) skozi položaje od 1 do 6.

Skupne metode določanja smeri vrtenja vključujejo:

  • strojna oprema
  • dvojček prekine
  • tabele za iskanje vzorcev

Ta projekt uporablja programsko metodo, ki ne zahteva iskalnih tabel. [1]

Smer

Namesto da bi gledali izhodne vzorce iz stikov A in kontakta B, se osredotočimo na stik A.

Če vzorec stika B po vsakem prehodu stika A opazimo, da:

  • Stik A in kontakt B imata nasprotna logična stanja, ko je dajalnik zasukan CW
  • Stik A in kontakt B imata enako logično stanje, ko dajalnik zavrtite CCW

Dejanska koda:

// ----- Štej prehode

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

Ta metoda ima naslednje prednosti:

  • iskalne tabele niso potrebne
  • potrebna je samo ena prekinitvena linija

Debounce

Vsi mehanski dajalniki trpijo zaradi "odboja stika".

Če stikalni kontakt ne naredi/prekine čisto, bo njegovo logično stanje hitro nihalo od VISOKEGA do NIZKEGA, dokler se stikalni stik ne ustali. To povzroči napačno štetje.

Eden od načinov za preprečevanje odklona stika je, da se čez vsak stikalni kontakt doda majhen kondenzator. Kondenzator in z njim povezan vlečni upor tvorita integrator, ki učinkovito skrajša visoke frekvence in omogoča prefinjeno naraščanje/padanje napetosti stikala.

Slaba stran tega pristopa je, da lahko prehodi zamudimo, če se gred dajalnika hitro vrti.

Razveljavitev programske opreme

Ta metoda uporablja dva števca (odprta, zaprta), ki sta nastavljena na nič. [2]

Ko zaznate prehod na stiku A:

  • Nenehno anketirajte stik A.
  • Povečajte odprti števec in ponastavite zaprti števec, kadar koli je kontakt A VISOK.
  • Povečajte zaprti števec in ponastavite odprti števec, kadar je kontakt A NIZK.
  • Zapustite zanko, ko eden od števcev doseže vnaprej določeno število. Učinkovito iščemo obdobje dinamičnega ravnovesja po vsakem odklonu stikov.

Dejanska koda:

// ----- Odpravite stik A

while (1) {if (digitalRead (ContactA)) {// ----- ContactA je odprto zaprto = 0; // Prazen nasprotni integrator Open ++; // Integriraj if (Open> MaxCount) return HIGH; } else {// ----- ContactA je zaprta Odprta = 0; // Prazen nasprotni integrator Zaprto ++; // Integriraj if (Zaprto> MaxCount) vrne LOW; }}

Kontakta B ni treba odvrniti, saj prehoda kontakta A in kontakta B ne sovpadata.

Štetje

Mehanski "zapor" učinkovito podvoji vaše število, saj sta med kliki zabeležena dva štetja (glej sliko 1).

Število "detentov" se lahko določi z aritmetiko po modulu 2, kot je prikazano spodaj.

Dejanska koda:

// ----- Štej "detente"

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

Reference

Dodatne informacije so na voljo na:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

4. korak: Programska oprema

Ta projekt zahteva najnovejšo različico Ardino Uno R3 IDE (integrirano razvojno okolje), ki je na voljo na

Prenesite vsako od naslednjih dveh skic Arduino (priloženo)

  • rotary_encoder_1.ino (različica za glasovanje)
  • rotary_encoder_2.no (prekinitvena različica)

Dvokliknite želeno različico in sledite navodilom na zaslonu.

Uživajte…

Kliknite tukaj, če si želite ogledati moja druga navodila.

Priporočena: