Cómo funciona el codificador rotatorio y la interfaz con Arduino

Como Funciona El Codificador Rotatorio Y La Interfaz Con Arduino



El codificador rotatorio es un importante dispositivo electromecánico que tiene diversos usos en el campo de la electrónica. Este artículo explicará los tipos y el funcionamiento del codificador rotatorio junto con su interfaz con Arduino.

¿Qué es un codificador rotatorio?

Un codificador rotatorio es un dispositivo de entrada digital que detecta la posición angular de la perilla rotatoria y envía señales al microcontrolador o cualquier otro dispositivo al que están conectados. Pueden girar 360° sin parar. También se le llama codificador de eje. Se utiliza en impresoras, electrónica de audio, motores y controladores.









Tipos de codificadores rotatorios

Existen principalmente dos tipos de codificadores rotatorios que se deciden en función de la señal de salida generada por ellos. Estos tipos se nombran:



Codificador rotatorio incremental

Este tipo de codificador cuenta las revoluciones del botón giratorio en forma de pulsos. Cuando la perilla se gira una vez, se genera un pulso. Para cada pulso, el contador incrementa para indicar la posición angular del eje.





Codificador rotatorio absoluto

Este tipo de codificador da la posición angular absoluta del eje, ya que tiene un código separado para cada posición del eje y mide el ángulo a través de ese código. No necesita un contador para dar una salida de posición angular. Incluso si el codificador rotatorio absoluto está desenergizado, los valores respectivos para las posiciones angulares se mantienen. También es un codificador de bajo costo.



Funcionamiento del codificador rotatorio

El codificador rotatorio consta de un disco con áreas igualmente espaciadas conectadas a un pin común C que está conectado a tierra. Los otros dos pines A y B son pines de contacto que hacen contacto con C cuando se gira la perilla giratoria. Cuando el pin A o B se conecta a tierra, se genera una señal. Estas señales generadas por los pines de salida están desfasadas 90°. Esto se debe a que el pin A se conecta a tierra cuando la perilla se gira en el sentido de las agujas del reloj, y el pin B se conecta a tierra primero cuando la perilla se gira en el sentido contrario a las agujas del reloj. Por lo tanto, la dirección de rotación de la perilla se determina a través de estas conexiones.

Si el estado de B no es igual a A , entonces la perilla ha girado en el sentido de las agujas del reloj.


Si el estado de B es igual a A, la perilla ha girado en sentido antihorario.

Configuración de pines del codificador rotatorio

El diagrama que se muestra a continuación muestra una distribución de pines del codificador rotatorio que muestra los pines de salida A y B, un interruptor rotatorio que se puede usar como botón pulsador y pines para la fuente de alimentación.

Pin Descripción del codificador rotatorio

La siguiente es la descripción dada de todos los pines del codificador rotatorio.

Salida B o CLK

Este pin da una salida de cuántas veces ha girado la perilla o el codificador giratorio. Cada vez que se gira la perilla, el CLK completa un ciclo de ALTO y BAJO. Se cuenta como una rotación.

Salida A o DT

Este es el segundo pin de salida del codificador rotatorio que determina la dirección de rotación. Tiene un retraso de 90° con respecto a la señal CLK. Por lo tanto, si su estado no es igual al estado de CLK, entonces la dirección de rotación es en el sentido de las agujas del reloj, de lo contrario, en el sentido contrario a las agujas del reloj.

Cambiar

El pin del interruptor se usa para verificar si el botón pulsador está presionado o no.

CCV

Este pin está conectado a un suministro de 5V

TIERRA

Este pin está conectado a tierra.

Codificador rotatorio de interfaz con Arduino

El codificador rotatorio tiene cinco pines. VCC y GND del codificador rotatorio están conectados al de Arduino. Los pines restantes CLK, DT y SW están conectados a los pines de entrada digital de Arduino.

Código Arduino para codificador rotatorio

 

// Entradas de codificador rotatorio
#definir CLK_PIN 2
#definir DT_PIN 3
#definir SW_PIN 4
contador int = 0 ;
int estado CLK actual;
int últimoCLKState;
Dirección de la corriente de la cadena = '' ;
unsigned long lastButtonPressTime = 0 ;
configuración nula ( ) {
    // Establecer pines del codificador como entradas
    modo PIN ( CLK_PIN, ENTRADA ) ;
    modo PIN ( DT_PIN, ENTRADA ) ;
    modo PIN ( SW_PIN, ENTRADA_PULLUP ) ;
    // Configurar monitor serie
Serial.begin ( 9600 ) ;
    // Leer el estado inicial de CLK
lastCLKState = lectura digital ( CLK_PIN ) ;
}
bucle vacío ( ) {
    // Leer el estado actual de CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
    // Si el último y el estado actual de CLK es diferente, entonces se produjo un pulso
    // reaccionar solo 1 cambio de estado para evitar la doble cuenta
    si ( estado CLK actual ! = últimoCLKState && estado CLK actual == 1 ) {
        // Si el estado DT es diferente al estado CLK, entonces
        // El codificador gira en sentido contrario a las agujas del reloj, por lo que el decremento
        si ( lectura digital ( DT_PIN ) ! = estado CLK actual ) {
encimera--;
dirección actual = 'CCW' ;
        } demás {
            // El codificador está girando en el sentido de las agujas del reloj, así que incrementa
contador++;
dirección actual = 'CW' ;
        }
Serial.print ( 'Dirección de rotación:' ) ;
Serial.print ( dirección actual ) ;
Serial.print ( ' | Valor del contador: ' ) ;
Serial.println ( encimera ) ;
    }
    // Recuerda el último estado CLK
lastCLKState = currentCLKState;
    // Leer el estado del botón
int buttonState = lectura digital ( SW_PIN ) ;
    // Si detectamos una señal BAJA, se presiona el botón
    si ( estado del botón == BAJO ) {
        // Si han pasado 50 ms desde la último pulso BAJO, significa que el
        // el botón se ha presionado, soltado y vuelto a presionar
        si ( mili ( ) - lastButtonPressTime > 50 ) {
Serial.println ( '¡Botón presionado!' ) ;
        }
        // Recuerda el último evento de pulsación de botón tiempo
lastButtonPressTime = milisegundos ( ) ;
    }
    // Poner en un ligero retraso en ayuda rebotar la lectura
demora ( 1 ) ;
}

 
En el código anterior, el estado del pin CLK se verifica en la función loop(). Si no es igual a su estado anterior, indica que el botón giratorio ha girado. Ahora, para verificar la dirección de rotación de la perilla, el estado actual de CLK se compara con el estado de DT. Si ambos estados son desiguales, muestra que la perilla ha girado en el sentido de las agujas del reloj y el contador incrementa su valor para mostrar la posición de la perilla giratoria. En caso contrario, el contador decrementa.

Conclusión

Los codificadores rotatorios son sensores de posición avanzados que pueden rotar continuamente. Están disponibles en dos tipos: incrementales y absolutos. El codificador rotatorio funciona contando los pulsos generados debido a la rotación de la perilla. Tiene diversas aplicaciones desde la electrónica de la vida diaria hasta la automatización industrial.