Taula de continguts:
Vídeo: Descodificador rotatiu simple: 4 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
Aquesta instrucció descriu un mètode senzill de descodificació d’un codificador rotatiu seqüencial mitjançant un Arduino Uno R3.
Les rutines de programari compactes s’utilitzen per comptar el nombre de transicions, eliminar el rebot de contacte i determinar el sentit de rotació. No es requereixen components addicionals ni taules de cerca.
Es proporcionen versions d'interrupció i sense interrupció del codi.
La versió d'interrupció del codi només requereix un sol pin d'interrupció.
Imatges:
- La foto inicial mostra el codificador muntat.
- La captura de pantalla mostra el codi de la versió d’interrupció i el recompte quan l’eix del codificador gira en sentit horari i contrari.
- El vídeo mostra el recompte durant la rotació ràpida.
Pas 1: diagrama del circuit
El diagrama de cablejat del codificador es mostra a la figura 1.
Els cables del pont es solden directament als pins del codificador.
Intercanvieu els dos cables blaus si s’inverteix la direcció del recompte.
Pas 2: llista de peces
Les següents parts es van obtenir a
- 1 només Arduino UNO R3 amb cable USB.
- 1 només codificador rotatiu seqüencial (EC11 o equivalent) amb commutador.
- 1 únic pom per adaptar-se a l'eix.
- 3 només cables jumper Arduino entre homes.
Pas 3: teoria
Els codificadors rotatius seqüencials generen dues ones quadrades cada una de les quals es desplacen 90 graus, tal com es mostra a la figura 1.
Els patrons lògics del contacte A i el contacte B són diferents quan l’eix es gira en sentit horari (CW) i en sentit antihorari (CCW) a través de les posicions 1 a 6.
Els mètodes habituals per determinar el sentit de gir inclouen:
- maquinari
- bessons interromp
- taules de cerca de patrons
Aquest projecte utilitza un mètode de programari que no requereix taules de cerca. [1]
Direcció
En lloc de mirar els patrons de sortida del contacte A i del contacte B, centrem-nos en el contacte A.
Si mostrem el contacte B després de cada transició del contacte A, observem que:
- El contacte A i el contacte B tenen estats lògics oposats quan el codificador gira CW
- El contacte A i el contacte B tenen el mateix estat lògic quan es gira el codificador CCW
Codi real:
// ----- Compta les transicions
CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = EstatCurrent; }
Aquest mètode ofereix els següents avantatges:
- les taules de cerca no són necessàries
- només es requereix una única línia d’interrupció
Rebounce
Tots els codificadors mecànics pateixen "rebots de contacte".
Si un contacte de commutador no fa / es trenca netament, el seu estat lògic oscil·larà ràpidament de HIGH a LOW fins que el contacte de commutador es resolgui. Això es tradueix en recompte fals.
Un mètode per suprimir el rebot de contacte és afegir un condensador petit a cada contacte de commutació. El condensador i la resistència de tracció associada formen un integrador que eficaçment fa curtes freqüències i permet que la tensió del commutador pugi / baixi amb gràcia.
L’inconvenient d’aquest enfocament és que es poden perdre transicions si l’eix del codificador gira ràpidament.
Desinformació de programari
Aquest mètode utilitza dos comptadors (oberts, tancats) que s'han establert a zero. [2]
Un cop detectada una transició al contacte A:
- Enquesta contínua Contacte amb A.
- Incrementeu el comptador obert i restabliu el comptador tancat sempre que el contacte A sigui ALT.
- Incrementeu el comptador tancat i restabliu el comptador obert sempre que el contacte A sigui BAIX.
- Sortiu del bucle quan un dels comptadors arriba a un recompte predeterminat. Estem buscant efectivament el període d’equilibri després de qualsevol rebot de contacte.
Codi real:
// ----- Debounce Contact A
while (1) {if (digitalRead (ContactA)) {// ----- ContactA està obert tancat = 0; // Integrador buit oposat Open ++; // Integrar si (Obre> Nombre màxim) retorna ALTA; } else {// ----- ContactA està tancat obert = 0; // Integrador oposat buit Tancat ++; // Integrar si (Tancat> Nombre màxim) torna BAIX; }}
No cal rebutjar el contacte B, ja que les transicions del contacte A i del contacte B no coincideixen.
Comptant
Una “retenció” mecànica duplica efectivament el recompte ja que es registren dos recompte entre clics (vegeu la figura 1).
El nombre de "retencions" es pot determinar mitjançant l'aritmètica del mòdul 2, tal com es mostra a continuació.
Codi real:
// ----- Compta les "retencions"
if (Recompte% 2 == 0) {Serial.print ("Recompte:"); Serial.println (Recompte / 2); }
Referències
Podeu trobar més informació a:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Pas 4: programari
Aquest projecte requereix una versió recent de l’Ardino Uno R3 IDE (entorn de desenvolupament integrat) que està disponible a
Descarregueu cadascun dels dos esbossos Arduino següents (adjunt)
- rotary_encoder_1.ino (versió de votació)
- rotary_encoder_2.no (versió d'interrupció)
Feu doble clic a la versió que preferiu i seguiu les instruccions que apareixen a la pantalla.
Gaudeix …
Feu clic aquí per veure les meves altres instruccions.
Recomanat:
LabDroid: codificador / descodificador de codi Morse: 4 passos
LabDroid: Codificador / descodificador de codi Morse: Nota: Aquesta instrucció no es pot realitzar 1: 1 a la versió més recent de LabDroid. Aviat l’actualitzaré. Aquest projecte us mostrarà què podeu fer amb LabDroid. Com que un Hello World es fa normalment basat en text, llum o so, vaig pensar per LabDr
Descodificador Morse d'arbre binari: 7 passos (amb imatges)
Descodificador Morse d'arbre binari: a.articles {font-size: 110,0%; font-pes: negreta; estil de lletra: cursiva; decoració de text: cap; background-color: red;} a.articles: hover {background-color: black;} Aquesta instrucció explica com descodificar el codi Morse mitjançant un Arduino Uno R3.T
Com fer un descodificador de línia telefònica DTMF (to) simple: 3 passos
Com fer un descodificador de línia telefònica DTMF simple (de to): es tracta d’un projecte senzill que us permet descodificar senyals DTMF bàsicament en qualsevol línia telefònica. En aquest tutorial, fem servir el descodificador MT8870D. Estem utilitzant un descodificador de to preconstruït perquè, creieu-me, és un dolor a la part posterior provar de fer-ho amb el
Descodificador de protocol de control remot RC5 sense biblioteca: 4 passos
Descodificador de protocol de control remot RC5 sense biblioteca: abans de descodificar rc5, primer discutim què és l'ordre rc5 i quina és l'estructura d'aquest. de manera bàsica, l'ordre rc5 que s'utilitza en controls remots que s'utilitzen en televisors, reproductors de CD, d2h, sistemes de cinema a casa, etc., té 13 o 14 bits disposats en un
Com programar el descodificador IR per al control de motors de corrent altern a diverses velocitats: 7 passos
Com programar el descodificador IR per al control de motors de corrent altern múltiples: els motors de corrent altern monofàsics es troben normalment en articles per a la llar, com ara els ventiladors, i la seva velocitat es pot controlar fàcilment quan s’utilitzen diversos bobinatges discrets per a velocitats establertes. En aquest instructiu construïm un controlador digital que