Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Un codificador rotatorio es un dispositivo electromecánico que convierte el movimiento rotatorio en información digital o analógica. Puede girar en sentido horario o antihorario. Hay dos tipos de codificadores rotativos: codificadores absolutos y relativos (incrementales).
Mientras que un codificador absoluto genera un valor proporcional al ángulo actual del eje, un codificador incremental genera el paso del eje y su dirección (en este caso tenemos un codificador incremental).
Los codificadores giratorios se están volviendo más populares porque puede utilizar dos funciones en un módulo eléctrico: un interruptor simple para confirmar las operaciones y el codificador giratorio para navegar, p. Ej. a través de un menú.
Un codificador rotatorio incremental genera dos señales de salida mientras su eje está girando. Dependiendo de la dirección, una de las señales adelanta a la otra. (vea abajo)
Paso 1: comprensión de los datos de salida
Como puede ver, cuando el eje del codificador comienza a girar en el sentido de las agujas del reloj, la salida A cae primero a LOW y la salida B le sigue. En sentido contrario a las agujas del reloj, la operación gira en sentido contrario.
Ahora solo tenemos que implementar esto en nuestro µController (usé un Arduino Nano).
Paso 2: construye el circuito
Como describí antes, las salidas crean un flanco ALTO y uno BAJO. Para obtener un ALTO limpio en los pines de datos A y B del µController, tenemos que agregar resistencias Pull-Up. El pin C común va directo a tierra para el flanco BAJO.
Para obtener información sobre el interruptor interno (pulsador) usaremos los otros dos pines. Uno de ellos va a VCC y el otro a un Pin de datos del µController. También tenemos que agregar una resistencia desplegable al pin de datos para obtener un BAJO limpio.
¡También es posible utilizar resistencias Pull-Up y Pull-Down internas de su µController!
En mi caso, el pinout se ve así:
- +3, 3V => +3, 3V (Arduino) (también es posible + 5V)
- GND => GND (Arduino)
- A => Pin10
-
B =>
Alfiler
11
- C => TIERRA
-
SW =>
Alfiler
12
Paso 3: escribir el código
int pinA = 10; // interruptor interno A int pinB = 11; // interruptor interno B int pinSW = 12; // cambiar (codificador pulsado) int encoderPosCount = 0; // comienza en cero, cambia si quieres
int positionval;
bool switchval; int mrotateLast; int mrotate;
configuración vacía () {
int mrotateLast = digitalRead (pinA); Serial.begin (9600); retraso (50); }
bucle vacío () {codificador de lectura (); if (readswitch () == 1) {Serial.println ("Switch = 1"); }}
int readencoder () {
mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// la perilla está girando if (digitalRead (pinB)! = mrotate) {// el interruptor A cambió primero -> girando en el sentido de las agujas del reloj encoderPosCount ++; Serial.println ("girado en el sentido de las agujas del reloj"); } else {// el interruptor B cambió primero -> girando en sentido antihorario encoderPosCount--; Serial.println ("girado en sentido antihorario"); }
Serial.print ("Posición del codificador:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; return encoderPosCount; } bool readswitch () {
if (digitalRead (pinSW)! = 0) {// se presiona el interruptor
while (digitalRead (pinSW)! = 0) {} // el interruptor está actualmente presionado switchval = 1; } else {switchval = 0;} // switch está sin presionar return switchval; }
Ahora puede girar el codificador y la variable codificador PosCount contará hacia arriba si gira en el sentido de las agujas del reloj y contará hacia atrás si gira en el sentido contrario a las agujas del reloj.
¡Eso es todo! Simple y útil.
Siéntase libre de cambiar y ejecutar el código. Puedes implementarlo en tu proyecto.
También subiré un proyecto de LED donde usé el codificador para configurar el brillo de mis LED.