Cuprins:
Video: Decodor rotativ simplu: 4 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Această instrucțiune descrie o metodă simplă de decodare a unui codificator rotativ secvențial folosind un Arduino Uno R3.
Rutinele software compacte sunt utilizate pentru a număra numărul de tranziții, a elimina săriturile de contact și a determina direcția de rotație. Nu sunt necesare componente suplimentare și tabele de căutare.
Sunt furnizate versiuni de întrerupere și fără întrerupere ale codului.
Versiunea de întrerupere a codului necesită doar un singur pin de întrerupere.
Imagini:
- Fotografia de deschidere prezintă codificatorul asamblat.
- Captura de ecran arată codul pentru versiunea de întrerupere și numărul când arborele codificatorului este rotit în sensul acelor de ceasornic și în sens invers acelor de ceasornic.
- Videoclipul arată numărul în timpul rotației rapide.
Pasul 1: Diagrama circuitului
Schema de conectare a codificatorului este prezentată în fig.1.
Firele jumper sunt lipite direct la pinii codificatorului.
Schimbați cele două fire albastre dacă direcția de numărare este inversată.
Pasul 2: Lista pieselor
Următoarele părți au fost obținute de la
- 1 numai Arduino UNO R3 cu cablu USB.
- 1 numai codificator rotativ secvențial (EC11 sau echivalent) cu comutator.
- 1 buton numai pentru a se potrivi arborelui.
- 3 numai fire jumper Arduino de la bărbat la bărbat.
Pasul 3: Teorie
Codificatoarele rotative secvențiale generează două unde pătrate, fiecare dintre ele fiind deplasate cu 90 de grade, așa cum se arată în Fig.1.
Modelele logice la contactul A și contactul B sunt diferite atunci când arborele este rotit în sensul acelor de ceasornic (CW) și în sens invers acelor de ceasornic (CCW) prin pozițiile de la 1 la 6.
Metodele comune de determinare a direcției de rotație includ:
- hardware
- gemene întrerupe
- tabele de căutare a modelelor
Acest proiect utilizează o metodă software care nu necesită tabele de căutare. [1]
Direcţie
În loc să ne uităm la modelele de ieșire de la contactul A și contactul B, să ne concentrăm asupra contactului A.
Dacă eșantionăm contactul B după fiecare tranziție a contactului A, observăm că:
- Contactul A și Contactul B au stări logice opuse atunci când codificatorul este rotit CW
- Contactul A și Contactul B au aceeași stare logică atunci când codificatorul este rotit CCW
Codul actual:
// ----- Numărați tranzițiile
CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }
Această metodă oferă următoarele avantaje:
- tabelele de căutare nu sunt necesare
- este necesară doar o singură linie de întrerupere
Debounce
Toate codificatoarele mecanice suferă de „sărituri de contact”.
Dacă un contact de comutare nu face / rupe curat starea sa logică va oscila rapid de la HIGH la LOW până când contactul switch-ului se instalează. Acest lucru duce la numărări false.
O metodă de suprimare a săriturilor de contact este să adăugați un condensator mic la fiecare contact de comutare. Condensatorul și rezistorul de tracțiune asociat formează un integrator care scurtcircuită în mod eficient frecvențele înalte și permite ca tensiunea comutatorului să crească / să cadă grațios.
Dezavantajul acestei abordări este că tranzițiile pot fi ratate dacă arborele codificatorului este rotit rapid.
Software Debouncing
Această metodă utilizează două contoare (Deschis, Închis) care au fost setate la zero. [2]
După detectarea unei tranziții la contactul A:
- Sondaj continuu Contactați A.
- Măriți contorul Deschis și resetați contorul Închis, ori de câte ori Contactul A este ÎNALT.
- Măriți contorul Închis și resetați Contorul Deschis, ori de câte ori Contactul A este LOW.
- Ieșiți din buclă când unul dintre contoare atinge un număr predeterminat. Căutăm efectiv perioada de echilibru care urmează oricărui salt de contact.
Codul real:
// ----- Contact de retragere A
while (1) {if (digitalRead (ContactA)) {// ----- ContactA este deschis închis = 0; // Integrator opus gol Open ++; // Integrare dacă (Open> MaxCount) returnează HIGH; } else {// ----- ContactA este închis deschis = 0; // Integrator opus gol Închis ++; // Integrare dacă (Închis> MaxCount) revine LOW; }}
Nu este nevoie să renunțați la contactul B, deoarece tranzițiile contactului A și contactului B nu coincid.
Socoteală
O „reținere” mecanică vă dublează efectiv numărul, deoarece se înregistrează două numărări între clicuri (vezi fig. 1).
Numărul de „rețele” poate fi determinat folosind modul aritmetic 2 așa cum se arată mai jos.
Codul real:
// ----- Numărați „rețelele”
if (Count% 2 == 0) {Serial.print ("Count:"); Serial.println (Count / 2); }
Referințe
Informații suplimentare pot fi găsite la:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Pasul 4: Software
Acest proiect necesită o versiune recentă a Ardino Uno R3 IDE (mediu de dezvoltare integrat) care este disponibil de la
Descărcați fiecare dintre următoarele două schițe Arduino (atașate)
- rotary_encoder_1.ino (versiunea de votare)
- rotary_encoder_2.no (versiune de întrerupere)
Faceți dublu clic pe versiunea preferată și urmați instrucțiunile de pe ecran.
Bucurați-vă de …
Faceți clic aici pentru a vedea celelalte instructabile ale mele.
Recomandat:
Decodor RC5 Control de la distanță fără bibliotecă: 4 pași
RC5 Remote Control Protocol Decoder Fără bibliotecă: înainte de a decodifica rc5 discutăm mai întâi ce este comanda rc5 și care este structura acesteia. deci, practic, comanda rc5 utilizată în telecomenzile care sunt utilizate în televizoare, cd playere, d2h, sisteme home theater etc. are 13 sau 14 biți aranjați într-un
Cum se programează un decodor IR pentru controlul motorului cu curent alternativ cu mai multe viteze: 7 pași
Cum se programează un decodor IR pentru controlul motorului cu curent alternativ cu mai multe viteze: motoarele cu curent alternativ monofazate se găsesc în mod obișnuit în articolele de uz casnic, cum ar fi ventilatoarele, iar viteza lor poate fi controlată cu ușurință atunci când se utilizează un număr de înfășurări discrete pentru turațiile setate. În acest Instructable construim un controler digital care
Decodor IR cu telecomandă folosind Arduino: 7 pași
Decodor pentru telecomandă IR folosind Arduino: Hello Makers, Acesta este un tutorial complet despre cum să decodăm orice telecomandă IR. Urmează pașii mei de mai jos
Decodor senzor RF Arduino: 5 pași
Arduino RF Sensor Decoder: Casa mea anterioară a venit cu un sistem de securitate preinstalat care avea senzori de ușă, un senzor de mișcare și un panou de control. Totul era conectat la o cutie electronică mare dintr-un dulap și erau instrucțiuni pentru conectarea unui telefon fix la automat
Cum se utilizează receptorul IR (Decodor iR): 6 pași
Cum se utilizează receptorul IR (iR Decoder): În acest tutorial vă voi arăta pas cu pas cum să utilizați receptorul iR de la arduino. vă va arăta cum să instalați biblioteca, să primiți semnalul telecomenzii TV și să decodificați acest semnal. Receptorul iR poate fi folosit pentru a construi un contor infraroșu