Skip to Content

Cómo conectar un codificador rotativo de cuadratura con Arduino

Cómo conectar un codificador rotativo de cuadratura con Arduino

Uno de los HMI (Human Machine Interface) básicos es un codificador. Con un solo codificador, se pueden manejar múltiples menús y navegar hacia adelante y hacia atrás por la lista que se muestra en la pantalla LCD. 

El codificador rotativo es muy fácil de aprender y entender. No necesita energía adicional ni un software complejo para decodificar la posición.

Al tratarse de un codificador de 360 grados, la interacción con el usuario será perfecta.

En este artículo, compartiré con usted todos los detalles necesarios para entender el codificador rotatorio.

Le proporcionaré el principio básico de funcionamiento de un codificador rotativo de cuadratura y las instrucciones paso a paso para conectarlo a una placa Arduino. 

También obtendrá un código de ejemplo para que pueda utilizarlo en su propio proyecto de codificador rotativo de cuadratura y Arduino. 

¡Comencemos!

Componentes necesarios para construir un proyecto de codificador rotativo en cuadratura y Arduino

Componentes de hardware 

Software

Makerguides.com participa en el Programa de Asociados de Amazon Services LLC, un programa de publicidad de afiliados diseñado para proporcionar un medio para que los sitios ganen honorarios de publicidad mediante la publicidad y los enlaces a productos en Amazon.com.

¿Qué es un codificador rotativo en cuadratura?

Los codificadores rotatorios convierten el movimiento angular en señales digitales equivalentes. Puede encontrar los codificadores en diversas aplicaciones como placas HMI, cámaras, volumen multimedia, sintonizadores de canales y mucho más. 

Encontrará varios codificadores, como los lineales, los incrementales y los absolutos.

El codificador de cuadratura, que estamos usando en este artículo, produce señales digitales que deben ser procesadas usando el software en el Arduino. 

En las próximas secciones, explicaré el principio de funcionamiento de un codificador de cuadratura junto con las formas de onda.

Al final de esta sección, estarás seguro de construir tu software para detectar tanto la dirección de la rotación como el número de pasos. 

Vamos a sumergirnos en los fundamentos.

Pinouts de un codificador rotativo de cuadratura

El codificador rotativo de cuadratura produce ondas rectangulares cuando se gira el mando. Hay tres señales/pines esenciales presentes.

En la siguiente tabla, puede encontrar la terminología de las clavijas más utilizadas y su descripción. 

Número de pinEtiqueta de la clavijaDefinición de la clavija
1A / DTClavija de salida de cuadratura A
2B / CLKClavija de salida de cuadratura B
3CClavija común
4SWSalida del pulsador

En algunos codificadores de cuadratura, la SALIDA A y la SALIDA B tienen nombres alternativos DT (Datos) y CLK (Reloj).

Así que ya sabes cómo manejar codificadores con diferentes nombres, como el de la imagen de abajo.

saber cómo manejar codificadores con diferentes nombres

Comprensión de las señales de salida de un codificador rotativo en cuadratura

Voy a compartir los fundamentos de la interpretación de la señal digital del codificador y ejemplos. Para la discusión, estoy usando una parte de Bourns.

El número de pieza del codificador es PEC11L-4120F-S0020. Puede encontrar la hoja de datos de la pieza desde el enlace aquí

El codificador puede girar en el sentido de las agujas del reloj o en sentido contrario.

Dependiendo del sentido de giro, la señal digital del pin A o la señal digital del pin B dirigirán la salida. 

A continuación se muestra una imagen que muestra la relación entre el sentido de giro y las señales digitales en A y B

imagen que muestra la relación entre el sentido de giro y las señales digitales en A y B
Fuente: https://www.bourns.com/docs/Product-Datasheets/PEC11L.pdf

Al girar el mando en el sentido de las agujas del reloj (CW), la señal en A cambia primero, seguida de la señal B.

Si gira el codificador en el sentido contrario a las agujas del reloj (CCW), la señal B cambiará primero, seguida de la señal A.

El orden de llegada de las señales a los pines del puerto del MCU es fundamental para entender e implementar la lógica del software.

El orden de llegada de las señales a los pines del puerto de la MCU
Source: By Sagsaw at English Wikipedia

En la imagen anterior, se pueden ver cuatro fases correspondientes a los niveles de señal digital en los pines A y B. El orden de estas fases depende del sentido de giro. 

Pueden ser 4-3-2-1 o 1-2-3-4, dependiendo de si se gira el codificador en sentido CW o CCW. 

Si utilizas una placa ya preparada con un codificador montado en ella, no tienes que hacer nada más para completar el circuito del codificador.

En la siguiente sección, verás qué circuito eléctrico debes construir alrededor de los pines de la señal digital del codificador para que el circuito funcione.

circuito eléctrico que debes construir

El codificador es sólo una pequeña parte representada por la línea de puntos en el circuito completo. El terminal C suele estar conectado directamente a tierra. Las señales A y B se conectan a 5 V mediante resistencias de diez kΩ. 

Se denominan resistencias pull-up. Estas resistencias ayudan a que la señal alcance los 5 V para representar la lógica 1.

Los condensadores son opcionales, pero ayudan a filtrar el ruido de conmutación y rebote del codificador.

Entender los parámetros del codificador

El número de retenciones - Cada vez que gire un codificador con un ligero ángulo, sentirá un "tick". El tic marca la posición estable del codificador.

También proporciona una buena información al usuario que trabaja con su proyecto.

Puede haber diez retenciones para una rotación de 360 grados de un codificador. El número de retenciones varía de 6 a 60. Consulte la hoja de datos de la pieza para conocer el número correcto de retenciones.

Interruptor - Algunos codificadores vienen con un interruptor incorporado. Se trata de una función muy útil. El usuario puede utilizar este interruptor para confirmar su selección en el menú. 

Ruido de rebote - El codificador es una pieza electromecánica. Dado que las señales A y B se generan utilizando dos interruptores en el codificador, se encontrará con el ruido de conmutación.

La hoja de datos suele mencionar la duración del ruido.

El algoritmo de software debería tener que rebotar la lógica implementada para asegurar que el ruido se filtre completamente.

Instrucciones paso a paso para conectar un codificador de cuadratura a un Arduino

En la siguiente sección le mostraré cómo conectar el codificador rotativo en el Arduino. La conención rotativa es fácil de hacer.

¡Empecemos!

Cómo conectar el codificador rotativo a Arduino

Aquí están los detalles de conexión necesarios para completar el Arduino y el codificador rotativo de cuadratura

Paso 1: Empezar con el codificador

Empezar con el codificador

Las tres conexiones básicas necesarias son OUTPUT A, B y COMMON. Si estás usando una placa ya hecha, tendrás que conectar además una línea de 5 V. Empecemos.

Paso 2: Realice primero la conexión a tierra

Realice primero la conexión a tierra

Conecta cualquiera de los pines GND del Arduino al pin común del encoder.

Siempre recomiendo empezar con la conexión GND primero.

Paso 3: Conectar la clavija OUTPUT A

Conecte la clavija OUTPUT A

Conecta el pin del codificador etiquetado como "OUTPUT A" o "DT " al pin 4 del Arduino. Puedes elegir cualquiera de los pines de entrada digital.

Usando el codificador sin la placa, debes habilitar pullups internos para ambos GPIOs. Los pull-ups son imprescindibles. 

Paso 4: Conectar la clavija de salida B

Conecte la clavija OUTPUT B

Conecta el pin etiquetado como "CLK" o SEÑAL B" al pin 5 del Arduino. Debes habilitar el pull-up interno para el Pin 5 del Arduino. 

Si estás usando una placa como la KY040, no necesitas usar pull-ups internos ya que la placa ya tiene los pull-ups requeridos externamente. 

La conexión final se parecerá a la imagen que se muestra a continuación

Arduino Pin 5

Si no quieres usar los pull-ups incorporados o si necesitas tener también filtros de rebote, puedes construirlos de la forma que se muestra a continuación.

pin etiquetado "CLK" o SEÑAL B" al pin 5 del Arduino

He utilizado resistencias de valor diez kΩ. Puedes utilizar los condensadores de 0,1 nF. También puede modificar su código para conducir dos LEDs.

Opcionalmente, se pueden utilizar los LEDs para indicar el sentido de giro (horario o antihorario).

¡Felicidades! Las conexiones ya están completas.

Código Arduino para el proyecto de codificador rotativo de cuadratura

Aquí está el código de trabajo para un codificador rotativo de tipo cuadratura conectado a los pines 4 y 5 de Arduino. La atribución del código se mantiene en los comentarios.

 // Rotary Encoder Inputs
 #define inputCLK 4
 #define inputDT 5
 
 // LED Outputs
 #define ledCW 8
 #define ledCCW 9
 
 int counter = 0;
 int currentStateCLK;
 int previousStateCLK;
 
 String encdir ="";
 
 void setup() {
   // Set encoder pins as inputs  
   pinMode (inputCLK,INPUT);
   pinMode (inputDT,INPUT);
   
   // Set LED pins as outputs
   pinMode (ledCW,OUTPUT);
   pinMode (ledCCW,OUTPUT);
   
   // Setup Serial Monitor
   Serial.begin (9600);
   
   // Read the initial state of inputCLK
   // Assign to previousStateCLK variable
   previousStateCLK = digitalRead(inputCLK);
 
 }
 
 void loop() {
  // Read the current state of inputCLK
   currentStateCLK = digitalRead(inputCLK);
   
   // If the previous and the current state of the inputCLK are different then a pulse has occurred
   if (currentStateCLK != previousStateCLK){
       
     // If the inputDT state is different than the inputCLK state then
     // the encoder is rotating counterclockwise
     if (digitalRead(inputDT) != currentStateCLK) {
       counter--;
       encdir ="CCW";
       digitalWrite(ledCW, LOW);
       digitalWrite(ledCCW, HIGH);
       
     } else {
       // Encoder is rotating clockwise
       counter++;
       encdir ="CW";
       digitalWrite(ledCW, HIGH);
       digitalWrite(ledCCW, LOW);
       
     }
     Serial.print("Direction: ");
     Serial.print(encdir);
     Serial.print(" -- Value: ");
     Serial.println(counter);
   }
   // Update previousStateCLK with the current state
   previousStateCLK = currentStateCLK;
 }

Repasemos las secciones clave del código para entender la lógica.

#define inputCLK 4
#define inputDT 5

Estás definiendo los GPIOs que están conectados al codificador. Puedes cambiar los pines si has conectado el codificador a algunos otros pines.

Asegúrate de que los pines conectados al hardware coinciden con los pines definidos en el boceto.

 #define ledCW 8
 #define ledCCW 9

Las dos líneas de código anteriores son opcionales. Si quieres depurar tu código, te facilitarán el acceso. Puedes usar un multímetro o simplemente conectar un LED a estos pines.

Tenga cuidado de limitar la corriente a través del LED (220 ohmios o 470 ohmios). La parte anterior es opcional.

pinMode (inputCLK,INPUT);
pinMode (inputDT,INPUT);

En las líneas anteriores, se declaran dos pines de entrada variable como entradas. Si no estás usando pullups externos para la Señal A y la Señal B, entonces puedes usar las dos líneas de abajo en lugar de las de arriba.

pinMode (inputCLK,INPUT_PULLUP);
pinMode (inputDT,INPUT_PULLUP);

El código siguiente define variables para mantener el estado del contador y del pin CLK. Estas ayudan a detectar las transiciones de borde en los pines del codificador de forma sencilla.

 int contador = 0;
 int currentStateCLK;
 int previousStateCLK;

A continuación viene la función loop() donde se implementa el corazón de la lógica. Comprobamos la entrada CLK y la comparamos con el valor previousStateCLK. Si ha cambiado, entonces se ha producido un pulso.

Ahora se controlará el estado de la entrada CLK y se comparará continuamente con su valor anterior.

Si el estado actual es diferente del estado anterior, significa que ha habido una rotación y que se ha producido la transición de borde, 

En la siguiente sección, identificarás la dirección de rotación del codificador. En función del estado del pin DT y del pin CLK, decidirás el sentido de la rotación. 

Además, se puede decidir el accionamiento de LEDs o la impresión de mensajes personalizados en el terminal para mostrar el sentido de giro y el valor del contador.

Preguntas frecuentes sobre el codificador de cuadratura rotativo y el proyecto Arduino

He recopilado las respuestas a las preguntas más frecuentes sobre los proyectos relacionados con el codificador de Rotary.

Si su pregunta no ha sido respondida aquí, por favor deje un comentario en la sección de comentarios. 

1) ¿Cómo puedo utilizar un codificador rotativo con Arduino?

Puedes utilizar fácilmente un codificador rotativo con un Arduino. Sólo necesitarás dos GPIOs para detectar el sentido de giro y las cuentas.

Puedes consultar en las secciones anteriores la guía paso a paso para aprender a conectar un codificador rotativo al Arduino.

2) ¿Qué hace un codificador rotatorio?

Un codificador rotativo convierte el movimiento de rotación dado por el usuario en señales digitales, que un Arduino puede procesar. Hay varios tipos de codificadores rotativos. 

Algunos codificadores proporcionan la posición precisa de la rotación, mientras que los otros proporcionan el movimiento relativo. 

Los encoders de cuadratura le permiten girar más allá de 360 grados. Tienes que elegir un encoder que sea más adecuado para tu aplicación.

3) ¿Qué proporciona el codificador rotatorio como salidas?

El codificador rotativo proporciona dos señales como salida. La señal A y la señal B son dos señales digitales que representan el sentido de giro.

Algunos codificadores tendrán un interruptor incorporado. Puedes procesar estas señales usando cualquiera de los tres GPIOs.

Conclusión

En este artículo, te he presentado los principios del codificador rotativo de cuadratura junto con las conexiones terminadas para construir tu propio proyecto. 

Espero que hayas encontrado todos los detalles básicos necesarios para comprender y construir proyectos emocionantes incluyendo el codificador pronto.

Me alegrará conocer su opinión sobre este artículo. Sus comentarios sinceros me ayudarán a traer más artículos útiles en el estilo que te gusta.