Control de Motor Paso a Paso Unipolar con NodeMCU/Arduino - Secuencia Wave Drive y Display de Estados
Control de Motor Paso a Paso Unipolar con NodeMCU/Arduino - Secuencia Wave Drive y Display de Estados
En esta práctica daremos un paso importante en el control de actuadores de precisión, implementando el manejo de un motor paso a paso unipolar mediante una secuencia de activación de bobina individual (Wave Drive). Reutilizaremos el módulo driver de potencia discreto ensamblado en la clase anterior e incorporaremos en protoboard un indicador visual de estados con LEDs para monitorear la secuencia de conmutación en tiempo real.
1. Descripción General del Driver de Potencia y Display de Estados
Debido a que las salidas del microcontrolador no disponen de la capacidad de corriente suficiente para conmutar directamente las bobinas de un motor paso a paso, se emplea una etapa intermedia basada en transistores NPN 2N2222:
Conmutación por Transistores: Cada una de las 4 entradas de control (A, B, C, D) activa la base de un transistor a través de una resistencia limitadora de 330 ohms. Al enviar un nivel ALTO (HIGH) desde el microcontrolador, el transistor entra en saturación y conecta la bobina correspondiente a GND, cerrando el circuito de corriente.
Protección Inductiva: Cada transistor cuenta con un diodo de rueda libre (1N4007) en paralelo con la carga. Estos diodos disipan los picos de tensión destructivos inducidos cuando la corriente de las bobinas se interrumpe de forma drástica.
Display de Estados con LEDs en Protoboard: Para visualizar el avance de la secuencia paso a paso, los estudiantes deberán armar en su protoboard un banco de 4 LEDs con sus respectivas resistencias limitadoras de 330 ohms (R1, R7, R8, R9), conectados en paralelo a las líneas de control A, B, C y D. Cada LED se encenderá cuando la fase correspondiente se encuentre activa (nivel 1 lógico).
2. Guía de Conexión en Laboratorio y Mapeo de Colores
Para garantizar el correcto funcionamiento del sistema, realizaremos las conexiones siguiendo la serigrafía de la placa PCB y los indicadores del circuito:
Señales de Control y Display de LEDs: Conectar en el protoboard 4 LEDs desde las salidas del microcontrolador hacia masa (GND), pasando por resistencias de 330 ohms. Desde estos mismos puntos de derivación en las líneas A, B, C y D, conectar cables puente hacia el conector etiquetado como CONTROL en la placa PCB.
Conexión del Motor Paso a Paso: Conectar el motor al puerto MOTOR en la PCB, respetando la secuencia de colores habitual de sus terminales:
R: Red (Rojo - Común de alimentación)
O: Orange (Naranja - Fase A)
Y: Yellow (Amarillo - Fase B)
P: Pink (Rosa - Fase C)
B: Blue (Azul - Fase D)
Alimentación de Potencia: La energía requerida por el motor se suministra externamente mediante la bornera azul señalizada (+5V / VCC y GND).
Masa Común (Common Ground): Es estrictamente obligatorio unir el terminal GND del microcontrolador, el GND del indicador de LEDs en el protoboard y el terminal GND de la bornera azul del driver. Utilizar preferentemente cable de color Negro para todas las líneas de tierra.
3. Código Fuente en Arduino IDE (Secuencia Wave Drive)
El algoritmo implementa la secuencia Wave Drive (un solo paso o bobina activa a la vez), ofreciendo un consumo de corriente reducido y una rotación continua paso a paso:
// Pines de salida digitales para Arduino Uno (D2, D3, D4, D5)
const int motorPins[4] = {2, 3, 4, 5};
// Matriz de secuencia Wave Drive (1 sola bobina encendida a la vez)
const int waveDrive[4][4] = {
{HIGH, LOW, LOW, LOW}, // Paso 1: Salida A en HIGH
{LOW, HIGH, LOW, LOW}, // Paso 2: Salida B en HIGH
{LOW, LOW, HIGH, LOW}, // Paso 3: Salida C en HIGH
{LOW, LOW, LOW, HIGH} // Paso 4: Salida D en HIGH
};
// Tiempo entre pasos en milisegundos (ajusta la velocidad del motor)
int pasoDelay = 100;
void setup() {
// Configurar los 4 pines como salidas digitales
for (int i = 0; i < 4; i++) {
pinMode(motorPins[i], OUTPUT);
digitalWrite(motorPins[i], LOW); // Iniciar apagados en reposo
}
}
void loop() {
// Recorrer cíclicamente los 4 pasos de la secuencia
for (int paso = 0; paso < 4; paso++) {
for (int i = 0; i < 4; i++) {
digitalWrite(motorPins[i], waveDrive[paso][i]);
}
delay(pasoDelay); // Tiempo de permanencia en cada paso
}
}
4. Verificación del Funcionamiento
Al energizar la bornera azul con +5V y ejecutar el programa:
Se observará un desplazamiento secuencial en el display de LEDs del protoboard (D5, D7, D8 y D9 encendiéndose uno a la vez).
Cada LED encendido corresponderá a la activación de la respectiva fase en el driver (Orange -> Yellow -> Pink -> Blue).
El motor paso a paso avanzará de manera uniforme. Modificando el valor de
pasoDelayen el programa se podrá ajustar la velocidad de rotación.
Comentarios
Publicar un comentario