- Codificador rotatorio y sus tipos
- Pinout y descripción del codificador rotatorio KY-040
- Cómo funciona el codificador rotatorio
- Componentes requeridos
- Diagrama del circuito de interfaz del codificador rotatorio PIC16F877A
- Explicación del código
Un codificador rotatorio es un dispositivo de entrada que ayuda al usuario a interactuar con un sistema. Se parece más a un potenciómetro de radio, pero emite un tren de pulsos que hace que su aplicación sea única. Cuando se gira la perilla del codificador, gira en forma de pequeños pasos, lo que ayuda a que se use para controlar el motor paso a paso / servomotor, navegar a través de una secuencia del menú y aumentar / disminuir el valor de un número y mucho más.
En este artículo, aprenderemos sobre los diferentes tipos de codificadores rotatorios y cómo funcionan. También lo conectaremos con el microcontrolador PIC PIC16F877A y controlaremos el valor de un número entero girando el codificador y mostraremos su valor en una pantalla LCD de 16 * 2. Al final de este tutorial, se sentirá cómodo utilizando un codificador rotatorio para sus proyectos. Entonces empecemos…
Codificador rotatorio y sus tipos
Codificador rotatorio a menudo llamado codificador de eje. Es un transductor electromecánico, lo que significa que convierte los movimientos mecánicos en pulsos electrónicos o, en otras palabras, convierte la posición angular o el movimiento o la posición del eje en una señal digital o analógica. Consiste en una perilla que cuando gira se moverá paso a paso y producirá una secuencia de trenes de pulsos con un ancho predefinido para cada paso.
Hay muchos tipos de codificadores rotativos en el mercado, el diseñador puede elegir uno según su aplicación. Los tipos más comunes se enumeran a continuación
- Codificador incremental
- Codificador absoluto
- Codificador magnético
- Codificador óptico
- Codificador láser
Estos codificadores se clasifican en función de la señal de salida y la tecnología de detección, el codificador incremental y los codificadores absolutos se clasifican en función de la señal de salida y los codificadores magnéticos, ópticos y láser se clasifican en función de la tecnología de detección. El codificador utilizado aquí es un codificador de tipo incremental.
El codificador absoluto almacena la información de posición incluso después de que se desconecta la energía, y la información de posición estará disponible cuando le volvamos a aplicar energía.
El otro tipo básico, el codificador incremental, proporciona datos cuando el codificador cambia de posición. No pudo almacenar la información de posición.
Pinout y descripción del codificador rotatorio KY-040
A continuación se muestran los pines del codificador rotatorio de tipo incremental KY-040. En este proyecto, conectaremos este codificador rotatorio con el popular microcontrolador PIC16F877A de microchip.
Los dos primeros pines (tierra y Vcc) se utilizan para alimentar el codificador, normalmente se utiliza una fuente de + 5V. Además de girar la perilla en sentido horario y antihorario, el codificador también tiene un interruptor (Activo bajo) que se puede presionar presionando la perilla en el interior. La señal de este interruptor se obtiene a través del pin 3 (SW). Finalmente tiene los dos pines de salida (DT y CLK) que producen las formas de onda como ya se discutió a continuación. Hemos interconectado este codificador rotatorio previamente con Arduino.
Cómo funciona el codificador rotatorio
La salida depende completamente de las almohadillas de cobre internas que proporcionan la conexión con GND y VCC con el eje.
Hay dos partes del codificador rotatorio. Eje Rueda que se conecta con el eje y gira en sentido horario o antihorario según la rotación del eje, y la base donde se realiza la conexión eléctrica. La base tiene puertos o puntos que están conectados a DT o CLK de tal manera que cuando la rueda del eje gira, conectará los puntos de la base y proporcionará una onda cuadrada en los puertos DT y CLK.
La salida será como cuando el eje gira-
Dos puertos proporcionan la onda cuadrada, pero hay una ligera diferencia en la sincronización. Debido a esto, si aceptamos la salida como 1 y 0, solo puede haber cuatro estados, 0 0, 1 0, 1 1, 0 1. La secuencia de la salida binaria determina el giro en sentido horario o antihorario. Como, por ejemplo, si el codificador rotatorio proporciona 1 0 en estado inactivo y proporciona 1 1 después de eso, eso significa que el codificador cambia su posición un solo paso en el sentido de las agujas del reloj, pero si proporciona 0 0 después del 1 0 inactivo, significa que el eje está cambiando sus posiciones en sentido antihorario con un paso.
Componentes requeridos
Es el momento de identificar lo que necesitamos para conectar el codificador rotatorio con el microcontrolador PIC,
- PIC16F877A
- Resistencia de 4.7k
- Resistencia de 1k
- Bote de 10k
- Condensador de disco cerámico 33pF - 2 piezas
- Cristal de 20Mhz
- Pantalla 16x2
- Codificador rotatorio
- Adaptador de 5V.
- Tabla de pan
- Cables de conexión.
Diagrama del circuito de interfaz del codificador rotatorio PIC16F877A
A continuación se muestra la imagen de la configuración final después de conectar los componentes de acuerdo con el diagrama de circuito:
Hemos utilizado una sola resistencia de 1K para el contraste de la pantalla LCD en lugar de utilizar un potenciómetro. Además, consulte el video de trabajo completo que se encuentra al final.
Explicación del código
El código PIC completo se proporciona al final de este proyecto con un video de demostración, aquí estamos explicando algunas partes importantes del código. Si es nuevo con el microcontrolador PIC, siga nuestros tutoriales PIC desde el principio.
Como discutimos antes, necesitamos verificar la salida y diferenciar la salida binaria tanto para DT como para CLK, así que creamos una parte if-else para la operación.
if (Encoder_CLK! = position) { if (Encoder_DT! = position) { // lcd_com (0x01); contador ++; // Incrementa el contador que se imprimirá en la pantalla lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, contador); } más { // lcd_com (0x01); lcd_com (0xC0); mostrador--; // disminuir el contador lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, contador); // lcd_puts ("Izquierda"); } }
También necesitamos almacenar la posición en cada paso. Para hacer esto, usamos una variable "posición" que almacena la posición actual.
posición = Encoder_CLK; // Es para almacenar la posición del reloj del codificador en la variable. Puede ser 0 o 1.
Aparte de esto, se proporciona una opción para notificar sobre la presión del interruptor en la pantalla LCD.
if (Encoder_SW == 0) { sw_delayms (20); // retardo de rebote if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("interruptor presionado"); // itoa (contador, valor, 10); // lcd_puts (valor);
La función system_init se utiliza para inicializar la operación de E / S del pin, la pantalla LCD y para almacenar la posición del codificador rotatorio.
vacío system_init () { TRISB = 0x00; // PUERTO B como salida, este puerto se utiliza para LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Esto inicializará la posición LCD = Encoder_CLK; // Sotred la posición CLK en el sistema init, antes del inicio del ciclo while. }
La función LCD está escrita en la biblioteca lcd.cy lcd.h donde se declaran lcd_puts (), lcd_cmd ().
Para la declaración de variables, los bits de configuración y otros fragmentos de código, encuentre el código completo a continuación.