4.0 KiB
Proyecto de Control de Motor DC
1. Descripción General
Este proyecto implementa una consola digital de control para un motor de corriente continua (DC), orientada a operación segura, control fino de velocidad y protección mecánica/eléctrica. A diferencia de un control directo con potenciómetro, el sistema introduce:
- Máquina de estados para evitar arranques accidentales.
- Aceleración y desaceleración progresiva (rampa).
- Inversión de giro con secuencia controlada.
- Interfaz hombre–máquina con encoder rotatorio, botones y pantalla OLED.
El sistema se desarrolla inicialmente sobre HW-364A (ESP8266), con una ruta clara de migración a ESP32 DevKit V1.
2. Arquitectura del Sistema
2.1 Flujo Funcional
Usuario (Encoder / Botones)
↓
ESP8266
↓
Driver DRV8871
↓
Motor DC
↓
OLED (Feedback)
3. Hardware
3.1 Controlador Principal
- Placa: HW-364A
- MCU: ESP8266
- Lógica: 3.3 V
- Limitación crítica: GPIO reducidos
3.2 Sistema de Energía
- Tierra común (GND) para todo el sistema
- Motor alimentado por fuente externa independiente
- Electrónica alimentada a 3.3 V
3.3 Asignación de Pines
| Función | Señal | Pin |
|---|---|---|
| OLED SDA | Datos I2C | D2 |
| OLED SCL | Reloj I2C | D1 |
| Encoder A | Giro A | D5 |
| Encoder B | Giro B | D6 |
| Botón Centro | Start | D7 |
| Botón Back | Reversa | D8 |
| Botón Confirm | Adelante | D3 |
| Driver IN1 | Motor A | D0 |
| Driver IN2 | Motor B | D4 |
3.4 Driver de Potencia
- Modelo: DRV8871
- Control PWM bidireccional
- Polaridad definida por IN1 / IN2
4. Lógica de Control
4.1 Máquina de Estados
| Estado | Descripción |
|---|---|
| WAITING_START | Sistema armado, motor bloqueado |
| SELECT_DIR | Selección explícita de sentido |
| RUNNING | Operación normal |
| CHANGING_DIR | Inversión controlada |
4.2 Arranque Seguro
El motor permanece apagado hasta confirmación explícita del usuario. Previene reinicios peligrosos tras fallas de energía.
4.3 Selección de Sentido
- BACK → Reversa
- CONFIRM → Adelante
No existe sentido por defecto.
4.4 Control de Velocidad Adaptativo
- Giro lento → ±1 %
- Giro rápido (< 50 ms) → ±5 %
- Rango: 0–100 %
4.5 Rampa de Aceleración
Variables desacopladas:
targetSpeed→ intención del usuariocurrentSpeed→ acción física
Incremento/decremento: 0.5 % por ciclo (~2.5 s a plena escala).
4.6 Inversión Inteligente
Secuencia obligatoria:
- Rampa descendente hasta 0 %
- Pausa mecánica
- Cambio de polaridad
- Rampa ascendente
5. Firmware
5.1 Inicialización (setup())
- Configuración de GPIO
- Motor apagado por defecto
- Botones con pull-up interno
- Inicialización OLED
5.2 Bucle Principal (loop())
- Lectura del encoder
- Ejecución de máquina de estados
- Control de rampa
- Render de interfaz
5.3 Funciones Críticas
readEncoderSpeed()→ velocidad adaptativahandleDirectionButtons()→ solicitud de inversiónupdateMotorRamp()→ núcleo de controldrawInterface()→ visualización
6. Interfaz de Usuario
- Flechas grandes indican sentido
- Porcentaje central = velocidad real
- Indicador secundario = velocidad objetivo
Diseño orientado a lectura inmediata.
7. Limitaciones Actuales
- GPIO al límite
- Sin indicadores periféricos
- Expansión restringida
8. Versión 2 (V2)
8.1 Migración a ESP32
- Mayor número de GPIO
- PWM por hardware
- Escalabilidad
8.2 LED RGB de Estado
| Color | Significado |
|---|---|
| Amarillo | Standby / 0 % |
| Verde | Adelante |
| Rojo | Reversa |
| Rojo/Verde | Inversión |
8.3 Cambios en Firmware
- Nueva función
updateLeds() - GPIO dedicados (25, 26, 27)
- Mezcla de color por PWM
9. Conclusión
El sistema establece una base sólida para control seguro y profesional de motores DC, con una arquitectura preparada para evolucionar hacia una solución embebida más robusta en ESP32.