mirror of
https://github.com/marcogll/rotary_cotroller.git
synced 2026-03-15 12:25:21 +00:00
Add drill_vanity.ino and update README
This commit is contained in:
246
README.md
246
README.md
@@ -1,143 +1,189 @@
|
||||
# Proyecto de Control de Motor DC: Consola Digital v1.0
|
||||
|
||||
**Autor:** Marco Gallegos
|
||||
**Fecha:** Enero 2024
|
||||
|
||||
---
|
||||
# Proyecto de Control de Motor DC
|
||||
|
||||
## 1. Descripción General
|
||||
|
||||
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.
|
||||
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:
|
||||
|
||||
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.
|
||||
- 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. Especificaciones de Hardware
|
||||
## 2. Arquitectura del Sistema
|
||||
|
||||
### 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:**
|
||||
### 2.1 Flujo Funcional
|
||||
|
||||
```
|
||||
CON | SDA | SCL | PSH | RTA | TRB | BAK | GND | VCC
|
||||
Usuario (Encoder / Botones)
|
||||
↓
|
||||
ESP8266
|
||||
↓
|
||||
Driver DRV8871
|
||||
↓
|
||||
Motor DC
|
||||
↓
|
||||
OLED (Feedback)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2.2 Driver de Potencia (DRV8871)
|
||||
## 3. Hardware
|
||||
|
||||
* **Voltaje de Motor:** Hasta 45V (fuente externa)
|
||||
* **Corriente:** Pico de 3.6A
|
||||
* **Control:** PWM bidireccional (Puente H)
|
||||
### 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
|
||||
|
||||
---
|
||||
|
||||
## 3. Conexiones y Pinout
|
||||
## 4. Lógica de Control
|
||||
|
||||
### 3.1 Módulo de Interfaz a ESP8266
|
||||
### 4.1 Máquina de Estados
|
||||
|
||||
| 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) | — |
|
||||
| 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
|
||||
|
||||
---
|
||||
|
||||
### 3.2 Driver DRV8871 a ESP8266
|
||||
## 5. Firmware
|
||||
|
||||
| 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 |
|
||||
### 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
|
||||
|
||||
---
|
||||
|
||||
## 4. Lógica de Operación
|
||||
## 6. Interfaz de Usuario
|
||||
|
||||
### 4.1 Máquina de Estados de Seguridad
|
||||
- Flechas grandes indican sentido
|
||||
- Porcentaje central = velocidad real
|
||||
- Indicador secundario = velocidad objetivo
|
||||
|
||||
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
|
||||
Diseño orientado a lectura inmediata.
|
||||
|
||||
---
|
||||
|
||||
### 4.2 Control de Velocidad Adaptativo
|
||||
## 7. Limitaciones Actuales
|
||||
|
||||
* **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
|
||||
- GPIO al límite
|
||||
- Sin indicadores periféricos
|
||||
- Expansión restringida
|
||||
|
||||
---
|
||||
|
||||
## 5. Interfaz de Usuario (HMI)
|
||||
## 8. Versión 2 (V2)
|
||||
|
||||
La pantalla OLED presenta información crítica del sistema:
|
||||
### 8.1 Migración a ESP32
|
||||
|
||||
* **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:**
|
||||
- Mayor número de GPIO
|
||||
- PWM por hardware
|
||||
- Escalabilidad
|
||||
|
||||
* `SISTEMA BLOQUEADO`
|
||||
* `CAMBIANDO GIRO`
|
||||
### 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
|
||||
|
||||
---
|
||||
|
||||
## 6. Hoja de Ruta — Versión 2 (V2)
|
||||
## 9. Conclusión
|
||||
|
||||
### 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
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user