Com funciona el codificador rotatiu i interfícieu-lo amb Arduino

Com Funciona El Codificador Rotatiu I Interficieu Lo Amb Arduino



El codificador rotatiu és un important dispositiu electromecànic que té diversos usos en el camp de l'electrònica. Aquest article explicarà els tipus i el funcionament del codificador rotatiu juntament amb la seva interfície amb Arduino.

Què és un codificador rotatiu

Un codificador rotatiu és un dispositiu d'entrada digital que detecta la posició angular del botó giratori i envia senyals al microcontrolador o qualsevol altre dispositiu al qual estiguin connectats. Poden girar 360° sense aturar-se. També s'anomena codificador d'eix. S'utilitza en impressores, electrònica d'àudio, motors i controladors.









Tipus de codificadors rotatius

Hi ha principalment dos tipus de codificadors rotatius que es decideixen en funció del senyal de sortida generat per ells. Aquests tipus s'anomenen:



Codificador rotatiu incremental

Aquest tipus de codificador compta les revolucions del botó giratori en forma de polsos. Quan es gira el botó, es genera un pols. Per a cada pols, el comptador augmenta per indicar la posició angular de l'eix.





Codificador rotatiu absolut

Aquest tipus de codificador proporciona la posició angular absoluta de l'eix, ja que té un codi separat per a cada posició de l'eix i mesura l'angle a través d'aquest codi. No necessita un comptador per donar una sortida de posició angular. Fins i tot si el codificador rotatiu absolut està desactivat, es mantenen els valors respectius de les posicions angulars. També és un codificador de baix cost.



Funcionament del codificador rotatiu

El codificador rotatiu consta d'un disc amb àrees igualment espaciades connectades a un pin comú C que està connectat a terra. Els altres dos pins A i B són pins de contacte que entren en contacte amb C quan es gira el botó giratori. Quan el pin A o B es connecta a terra, es genera un senyal. Aquests senyals generats a partir dels pins de sortida estan fora de fase 90°. Això es deu al fet que el pin A es connecta a terra quan es gira el botó en el sentit de les agulles del rellotge i el pin B es connecta a terra primer quan el botó es gira en sentit contrari a les agulles del rellotge. Per tant, la direcció de gir del botó es determina mitjançant aquestes connexions.

Si l'estat de B no és igual a A , aleshores el botó ha girat en sentit horari.


Si l'estat de B és igual a A, el botó ha girat en sentit contrari a les agulles del rellotge.

Configuració de pins del codificador rotatiu

El diagrama que es mostra a continuació mostra un pinout del codificador rotatiu que mostra els pins de sortida A i B, un interruptor rotatiu que es pot utilitzar com a polsador i pins per a la font d'alimentació.

Pin Descripció del codificador rotatiu

A continuació es mostra la descripció de tots els pins del codificador rotatiu.

Sortida B o CLK

Aquest pin dóna una sortida de quantes vegades ha girat el botó o el codificador rotatiu. Cada vegada que es gira el botó, el CLK completa un cicle d'ALT i BAIX. Es compta com una rotació.

Sortida A o DT

Aquest és el segon pin de sortida del codificador rotatiu que determina la direcció de gir. Es queda 90° per darrere del senyal CLK. Per tant, si el seu estat no és igual a l'estat de CLK, la direcció de gir és en sentit horari, en cas contrari, en sentit antihorari.

Interruptor

El pin de l'interruptor s'utilitza per comprovar si el polsador està premut o no.

VCC

Aquest pin està connectat a una font de 5 V

GND

Aquest pin està connectat a terra

Interfície de codificador rotatiu amb Arduino

El codificador rotatiu té cinc pins. VCC i GND del codificador rotatiu estan connectats al d'Arduino. Els pins restants CLK, DT i SW estan connectats als pins d'entrada digital d'Arduino.

Codi Arduino per a codificador rotatiu

// Entrades del codificador rotatiu
#definir CLK_PIN 2
#definir DT_PIN 3
#definir SW_PIN 4
int comptador = 0 ;
int currentCLKState;
int lastCLKState;
Direcció del corrent de cadena = '' ;
sense signar llarg lastButtonPressTime = 0 ;
configuració de buit ( ) {
// Estableix els pins del codificador com entrades
    pinMode ( CLK_PIN, ENTRADA ) ;
    pinMode ( DT_PIN, INPUT ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Configura el monitor sèrie
Serial.begin ( 9600 ) ;
// Llegeix l'estat inicial de CLK
lastCLKState = lectura digital ( CLK_PIN ) ;
}
bucle buit ( ) {
// Llegeix l'estat actual de CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
// Si el darrer i l'estat actual de CLK és diferent, aleshores es va produir un pols
// Reacciona només a 1 canvi d'estat per evitar el doble recompte
si ( Estat CLKS actual ! = últimCLKState && currentCLKState == 1 ) {
// Si l'estat DT és diferent de l'estat CLK, aleshores
// El codificador gira en sentit contrari a les agulles del rellotge, de manera que el decrement
si ( lectura digital ( DT_PIN ) ! = Estat CLKS actual ) {
comptador--;
currentDirection = 'CCW' ;
} altra cosa {
// El codificador gira en sentit horari, així que incrementeu-lo
comptador++;
currentDirection = 'CW' ;
}
Impressió.sèria ( 'Direcció de rotació:' ) ;
Impressió.sèria ( Direcció actual ) ;
Impressió.sèria ( ' | Valor del comptador: ' ) ;
Serial.println ( comptador ) ;
}
// Recordeu el darrer Estat CLK
lastCLKState = Estat CLKS actual;
// Llegeix l'estat del botó
int buttonState = digitalRead ( SW_PIN ) ;
// Si detectem un senyal BAIX, es prem el botó
si ( buttonState == BAIX ) {
// Si han passat 50 ms des del darrer Pols BAIX, vol dir que el
// s'ha premut, deixat anar i tornat a prémer el botó
si ( mil·lisos ( ) - LastButtonPressTime > 50 ) {
Serial.println ( 'Botó premut!' ) ;
}
// Recordeu el darrer esdeveniment de premsa de botó temps
lastButtonPressTime = mil·lisos ( ) ;
}
// Posa en un lleuger retard a ajuda desfer la lectura
retard ( 1 ) ;
}


Al codi anterior, l'estat del pin CLK es verifica a la funció loop(). Si no és igual al seu estat anterior, mostra que el botó giratori ha girat. Ara, per comprovar la direcció de gir del botó, es compara l'estat actual de CLK amb l'estat de DT. Si els dos estats són desiguals, mostra que el botó ha girat en sentit horari i el comptador augmenta el seu valor per mostrar la posició del botó giratori. En el cas contrari, el comptador disminueix.

Conclusió

Els codificadors rotatius són sensors de posició avançats que poden girar contínuament. Estan disponibles en dos tipus: incrementals i absoluts. El codificador rotatiu funciona comptant els polsos generats a causa de la rotació del botó. Té diverses aplicacions en l'electrònica de la vida quotidiana fins a l'automatització industrial.