mirror of
https://github.com/marcogll/rotary_cotroller.git
synced 2026-03-15 10:25:20 +00:00
Revise README for DC Motor Control Project
Updated project details and specifications for the DC motor control console, including author information, hardware specifications, and user interface enhancements.
This commit is contained in:
246
README.md
246
README.md
@@ -1,189 +1,143 @@
|
||||
# Proyecto de Control de Motor DC
|
||||
# Proyecto de Control de Motor DC: Consola Digital v1.0
|
||||
|
||||
**Autor:** Marco Gallegos
|
||||
**Fecha:** Enero 2024
|
||||
|
||||
---
|
||||
|
||||
## 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:
|
||||
Este proyecto consiste en una consola de control inteligente para un motor de corriente continua (DC). Utiliza un microcontrolador **ESP8266 (HW-364A)** para gestionar la potencia a través de un driver **DRV8871**, ofreciendo una interfaz de usuario profesional con pantalla **OLED**, encoder rotatorio y botones de dirección.
|
||||
|
||||
- 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**.
|
||||
El sistema prioriza la **seguridad mecánica**, implementando rampas de aceleración y una **máquina de estados** que evita arranques accidentales o cambios de giro bruscos que puedan dañar engranajes o el motor.
|
||||
|
||||
---
|
||||
|
||||
## 2. Arquitectura del Sistema
|
||||
## 2. Especificaciones de Hardware
|
||||
|
||||
### 2.1 Flujo Funcional
|
||||
### 2.1 Módulo de Control (Placa Azul)
|
||||
|
||||
La interfaz de usuario se centraliza en un módulo que incluye un **OLED de 0.96"**, un **encoder con botón** y **dos botones laterales**.
|
||||
|
||||
**Orden físico de los pines:**
|
||||
|
||||
```
|
||||
Usuario (Encoder / Botones)
|
||||
↓
|
||||
ESP8266
|
||||
↓
|
||||
Driver DRV8871
|
||||
↓
|
||||
Motor DC
|
||||
↓
|
||||
OLED (Feedback)
|
||||
CON | SDA | SCL | PSH | RTA | TRB | BAK | GND | VCC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Hardware
|
||||
### 2.2 Driver de Potencia (DRV8871)
|
||||
|
||||
### 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
|
||||
* **Voltaje de Motor:** Hasta 45V (fuente externa)
|
||||
* **Corriente:** Pico de 3.6A
|
||||
* **Control:** PWM bidireccional (Puente H)
|
||||
|
||||
---
|
||||
|
||||
## 4. Lógica de Control
|
||||
## 3. Conexiones y Pinout
|
||||
|
||||
### 4.1 Máquina de Estados
|
||||
### 3.1 Módulo de Interfaz a ESP8266
|
||||
|
||||
| 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 usuario
|
||||
- `currentSpeed` → acción física
|
||||
|
||||
Incremento/decremento: 0.5 % por ciclo (~2.5 s a plena escala).
|
||||
|
||||
### 4.6 Inversión Inteligente
|
||||
|
||||
Secuencia obligatoria:
|
||||
|
||||
1. Rampa descendente hasta 0 %
|
||||
2. Pausa mecánica
|
||||
3. Cambio de polaridad
|
||||
4. Rampa ascendente
|
||||
| Etiqueta PCB | Función | Pin ESP8266 | Observaciones |
|
||||
| ------------ | --------------------- | ----------- | --------------------------------------- |
|
||||
| CON | Confirmar / Adelante | D3 (GPIO0) | Pin de boot. No presionar al encender |
|
||||
| SDA | I2C Data (OLED) | D2 (GPIO4) | — |
|
||||
| SCL | I2C Clock (OLED) | D1 (GPIO5) | — |
|
||||
| PSH | Botón Encoder (Start) | D7 (GPIO13) | — |
|
||||
| RTA | Encoder Fase A | D5 (GPIO14) | — |
|
||||
| TRB | Encoder Fase B | D6 (GPIO12) | — |
|
||||
| BAK | Atrás / Reversa | D8 (GPIO15) | Pin de boot. Debe estar LOW al encender |
|
||||
| GND | Tierra | G (GND) | — |
|
||||
| VCC | Alimentación | 3V (3.3V) | — |
|
||||
|
||||
---
|
||||
|
||||
## 5. Firmware
|
||||
### 3.2 Driver DRV8871 a ESP8266
|
||||
|
||||
### 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 adaptativa
|
||||
- `handleDirectionButtons()` → solicitud de inversión
|
||||
- `updateMotorRamp()` → núcleo de control
|
||||
- `drawInterface()` → visualización
|
||||
| Etiqueta PCB | Función | Pin ESP8266 | Observaciones |
|
||||
| ------------ | ------------- | ----------- | ------------------------- |
|
||||
| IN1 | Entrada PWM A | D0 (GPIO16) | PWM limitado por hardware |
|
||||
| IN2 | Entrada PWM B | D4 (GPIO2) | Comparte LED azul interno |
|
||||
|
||||
---
|
||||
|
||||
## 6. Interfaz de Usuario
|
||||
## 4. Lógica de Operación
|
||||
|
||||
- Flechas grandes indican sentido
|
||||
- Porcentaje central = velocidad real
|
||||
- Indicador secundario = velocidad objetivo
|
||||
### 4.1 Máquina de Estados de Seguridad
|
||||
|
||||
Diseño orientado a lectura inmediata.
|
||||
Para prevenir daños y accidentes, el sistema implementa cuatro estados definidos:
|
||||
|
||||
* **WAITING_START (Armado):**
|
||||
|
||||
* Motor bloqueado
|
||||
* Pantalla solicita pulsar **PSH** para iniciar
|
||||
|
||||
* **SELECT_DIR (Dirección):**
|
||||
|
||||
* Espera selección del sentido
|
||||
* **CON** = Adelante
|
||||
* **BAK** = Reversa
|
||||
|
||||
* **RUNNING (Operación):**
|
||||
|
||||
* Motor en giro
|
||||
* Encoder ajusta `targetSpeed`
|
||||
|
||||
* **CHANGING_DIR (Transición):**
|
||||
|
||||
* Rampa baja progresivamente a 0%
|
||||
* Pausa de seguridad
|
||||
* Rampa sube en el nuevo sentido
|
||||
|
||||
---
|
||||
|
||||
## 7. Limitaciones Actuales
|
||||
### 4.2 Control de Velocidad Adaptativo
|
||||
|
||||
- GPIO al límite
|
||||
- Sin indicadores periféricos
|
||||
- Expansión restringida
|
||||
* **Giro lento:** Ajustes finos de ±1%
|
||||
* **Giro rápido:** Ajustes de ±5% (intervalo entre pulsos < 50 ms)
|
||||
* **Rampa de seguridad:** Incrementos de 0.5% por ciclo
|
||||
|
||||
---
|
||||
|
||||
## 8. Versión 2 (V2)
|
||||
## 5. Interfaz de Usuario (HMI)
|
||||
|
||||
### 8.1 Migración a ESP32
|
||||
La pantalla OLED presenta información crítica del sistema:
|
||||
|
||||
- Mayor número de GPIO
|
||||
- PWM por hardware
|
||||
- Escalabilidad
|
||||
* **Iconos de sentido:** Flechas grandes indicando el giro
|
||||
* **Velocidad real:** Porcentaje actual aplicado por la rampa
|
||||
* **Velocidad objetivo:** Valor configurado por el usuario
|
||||
* **Alertas del sistema:**
|
||||
|
||||
### 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
|
||||
* `SISTEMA BLOQUEADO`
|
||||
* `CAMBIANDO GIRO`
|
||||
|
||||
---
|
||||
|
||||
## 9. Conclusión
|
||||
## 6. Hoja de Ruta — Versión 2 (V2)
|
||||
|
||||
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.
|
||||
### 6.1 Migración a ESP32
|
||||
|
||||
* Sustitución por **ESP32 DevKit V1**
|
||||
* Eliminación de restricciones de GPIO
|
||||
* PWM por hardware con mayor resolución
|
||||
|
||||
### 6.2 Indicadores de Estado Visuales (LED RGB)
|
||||
|
||||
| Color | Estado del sistema |
|
||||
| ------------------ | ----------------------------- |
|
||||
| 🟡 Amarillo | Sistema en espera (0%) |
|
||||
| 🟢 Verde | Motor girando adelante |
|
||||
| 🔴 Rojo | Motor girando en reversa |
|
||||
| 🔵 Azul (parpadeo) | Cambio de dirección / frenado |
|
||||
|
||||
---
|
||||
|
||||
## 7. Limitaciones Técnicas Actuales
|
||||
|
||||
* **D3 / D8:** Pines sensibles al arranque por resistencias internas
|
||||
* **PWM en D0:** Frecuencia no estándar, compensada por software
|
||||
|
||||
---
|
||||
|
||||
**Desarrollado por:** Marco Gallegos
|
||||
|
||||
Reference in New Issue
Block a user