Sadržaj:
Video: Jednostavan rotacijski dekoder: 4 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
Ova instrukcija opisuje jednostavnu metodu dekodiranja sekvencijalnog rotacijskog kodera pomoću Arduino Uno R3.
Kompaktne softverske rutine koriste se za brojanje broja prijelaza, uklanjanje odbijanja kontakta i određivanje smjera rotacije. Dodatne komponente i tablice za pretraživanje nisu potrebne.
Dostupne su verzije koda sa prekidom i bez prekida.
Prekidna verzija koda zahtijeva samo jedan pin prekida.
Slike:
- Prva fotografija prikazuje sklopljeni enkoder.
- Snimak ekrana prikazuje kôd za verziju prekida i broj kada se vratilo kodera rotira u smjeru kazaljke na satu.
- Video prikazuje brojanje tokom brze rotacije.
Korak 1: Dijagram kola
Shema ožičenja kodera prikazana je na slici 1.
Žice kratkospojnika lemljene su direktno na pinove davača.
Zamijenite dvije plave žice ako je smjer brojanja obrnut.
Korak 2: Lista dijelova
Sljedeći dijelovi su nabavljeni sa
- 1 samo Arduino UNO R3 sa USB kablom.
- 1 samo sekvencijalni rotacijski davač (EC11 ili ekvivalent) sa prekidačem.
- 1 samo dugme za prilagođavanje vratilu.
- 3 samo Arduino spojne žice muško-muški.
Korak 3: Teorija
Sekvencijalni rotacijski enkoderi generiraju dva kvadratna vala od kojih je svaki pomaknut za 90 stupnjeva kako je prikazano na slici 1.
Logički obrasci na kontaktu A i kontaktu B različiti su kada se vratilo okreće u smjeru kazaljke na satu (CW) i suprotno od smjera kazaljke na satu (CCW) kroz položaje 1 do 6.
Uobičajene metode određivanja smjera rotacije uključuju:
- hardver
- blizanac prekida
- tabele za traženje uzoraka
Ovaj projekt koristi softversku metodu za koju nisu potrebne tabele za pretraživanje. [1]
Smjer
Umjesto da gledamo izlazne obrasce iz kontakta A i kontakta B, fokusirajmo se na kontakt A.
Ako uzorkujemo kontakt B nakon svakog prijelaza kontakta A, primjećujemo da:
- Kontakt A i Kontakt B imaju suprotna logička stanja kada se davač okreće CW
- Kontakt A i Kontakt B imaju isto logičko stanje kada se davač okreće CCW
Stvarni kod:
// ----- Brojanje prijelaza
CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Broj ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }
Ova metoda nudi sljedeće prednosti:
- tabele za traženje nisu potrebne
- potrebna je samo jedna linija prekida
Debounce
Svi mehanički enkoderi pate od „odbijanja kontakta“.
Ako kontakt prekidača ne napravi/prekine čisto, njegovo logičko stanje će brzo oscilirati od VISOKOG do NISKOG dok se kontakt prekidača ne smiri. To dovodi do lažnih brojeva.
Jedna metoda za suzbijanje odbijanja kontakta je dodavanje malog kondenzatora preko svakog kontakta prekidača. Kondenzator i pripadajući pull-up otpornik tvore integrator koji učinkovito skraćuje visoke frekvencije i omogućava da napon prekidača graciozno raste/pada.
Nedostatak ovog pristupa je što se prijelazi mogu propustiti ako se vratilo davača brzo okreće.
Debouncing softvera
Ova metoda koristi dva brojača (otvorena, zatvorena) koja su postavljena na nulu. [2]
Kada se na kontaktu A otkrije prijelaz:
- Stalno anketiranje Kontakt A.
- Povećajte otvoreni brojač i resetirajte zatvoreni brojač, kad god je kontakt A VISOK.
- Povećajte zatvoreni brojač i poništite otvoreni brojač kad god je kontakt A nizak.
- Napustite petlju kada jedan od brojača dosegne unaprijed određeni broj. Efektivno tražimo stacionarno razdoblje nakon svakog odbijanja kontakta.
Stvarni kod:
// ----- Debounce Contact A
while (1) {if (digitalRead (ContactA)) {// ----- ContactA je otvoren Zatvoren = 0; // Prazan suprotni integrator Open ++; // Integriraj if (Otvori> MaxCount) return HIGH; } else {// ----- ContactA je zatvoren Otvoren = 0; // Prazan suprotni integrator Zatvoren ++; // Integriraj if (Zatvoreno> MaxCount) return LOW; }}
Nema potrebe odbacivati kontakt B jer se prijelazi kontakta A i kontakta B ne podudaraju.
Brojanje
Mehaničko “zadržavanje” efektivno udvostručuje vaš broj jer se dva broja registriraju između klikova (vidi sliku 1).
Broj "deteknata" može se odrediti korištenjem modulo 2 aritmetike kao što je prikazano u nastavku.
Stvarni kod:
// ----- Broji "detente"
if (Broj % 2 == 0) {Serial.print ("Broj:"); Serial.println (Broj / 2); }
Reference
Dodatne informacije možete pronaći na:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Korak 4: Softver
Ovaj projekt zahtijeva noviju verziju Ardino Uno R3 IDE (integrirano razvojno okruženje) koja je dostupna na
Preuzmite svaku od sljedeće dvije Arduino skice (u prilogu)
- rotary_encoder_1.ino (verzija za glasanje)
- rotary_encoder_2.no (verzija sa prekidom)
Dvaput kliknite na željenu verziju i slijedite upute na ekranu.
Uživajte…
Kliknite ovdje za pregled ostalih instrukcija.
Preporučuje se:
Još jedan rotacijski prekidač koji je uglavnom štampan 3D: 7 koraka (sa slikama)
Još jedan rotacijski prekidač koji je uglavnom 3D ispisan: Prije nekog vremena stvorio sam uglavnom 3D printani rotacijski prekidač posebno za moj projekt Minivac 601 Replica. Za moj novi Think-a-Tron 2020 projekt, smatram da mi treba još jedan rotacijski prekidač. Tražim prekidač za montiranje ploče SP5T. Dodatak
Linearni i rotacijski pokretač: 11 koraka
Linearni i rotacijski pokretač: Ovo uputstvo govori o tome kako napraviti linearni pogon s rotirajućom osovinom. To znači da možete pomicati objekt naprijed i natrag i rotirati ga u isto vrijeme. Moguće je pomicati objekt 45 mm (1,8 inča) naprijed -natrag i rotirati ga
Pretvorite rotacijski telefon u radio i putujte kroz vrijeme: 5 koraka (sa slikama)
Pretvorite rotacijski telefon u radio i putujte kroz vrijeme: Hakirao sam rotacijski telefon u radio! Podignite telefon, odaberite državu i deceniju i slušajte odličnu muziku! Kako radiOvaj rotacioni telefon ima ugrađeno mikroračunalo (Raspberry Pi), koje komunicira sa radiooooo.com, web radiom
Kako napraviti jednostavan DTMF (tonski) dekoder telefonske linije: 3 koraka
Kako napraviti jednostavan DTMF (tonski) dekoder telefonske linije: Ovo je jednostavan projekt koji vam omogućuje dekodiranje DTMF signala u osnovi bilo koje telefonske linije. U ovom vodiču koristimo dekoder MT8870D. Koristimo unaprijed ugrađeni dekoder tonova jer, vjerujte, bol je straga pokušavati to učiniti s
(Jednostavan) jednostavan način za dobivanje analognog/pwm zvuka s Raspberry PI Zero -a i povezivanje na Crt TV: 4 koraka
(Jednostavan) jednostavan način za dobijanje analognog/pwm zvuka s Raspberry PI Zero -a i povezivanje na Crt TV: Ovdje sam upotrijebio najjednostavniji način za unos zvuka na TV zajedno sa kompim video zapisom