- Inicio
- El sistema
- Robot
- Sistemas embebidos
- Electrónica — Módulo Puente H
Electrónica — Módulo Puente H
En este artículo
- Requisitos de diseño
- Arquitectura del circuito
- Tabla funcional del puente H
- Fabricación de la PCB
- Lista de materiales
- Ensamble
- Configuración
- Modos de operación (DIP switch)
- Asignación de pines ESP32-C3
- Conectores externos
- Firmware
- Máquina de estados
- Protocolo I²C binario — tramas de 7 bytes
- Deadtime y rampas
- Verificación
El módulo Puente H es una tarjeta de control de motor DC de diseño propio. Usa una topología de puente H discreto, con aislamiento óptico entre la lógica y la potencia, y un ESP32-C3 embebido que gestiona los modos de comunicación. El robot lleva dos, uno por motor de tracción.
Nivel de replicación
ConstruibleEstá la geometría acotada y el procedimiento. Tendrás que adaptarlos a tus herramientas y materiales.
Lo que encuentras aquí
- Gerbers verificados (13 archivos, incluye taladros PTH) listos para pedido
- Proyecto KiCad 9 completo: esquemático, layout y librerías
- Lista de materiales con designadores, cantidades y encapsulados
- Archivo de posiciones y designadores para ensamble automatizado
- Firmware MicroPython funcional y protocolo de comando documentado
- Datasheet propio de la placa
Lo que falta para llegar a «Reproducible»
- Valor exacto de los diodos Zener D4–D7: el diseño usa el símbolo genérico 1N47xxA y no fija la tensión (ver «Lista de materiales»)
- Números de parte de proveedor: la columna LCSC del BOM está vacía, así que la compra hay que resolverla por encapsulado y valor
- Plantilla de stencil para pasta de soldadura, si se quiere ensamblar por reflow en vez de a mano
Requisitos de diseño
Sección titulada «Requisitos de diseño»El driver de motor debía:
- Controlar motores DC de 12–24 V, corriente continua ~4 A.
- Soportar modos de comunicación múltiples (I²C, WiFi, BLE, UART).
- Encadenarse en arquitectura maestro-esclavo (daisy chain I²C).
- Arrancar en estado seguro (
DISARMED) para evitar movimientos no deseados. - Ser compacto y replicable con componentes de catálogo.
Arquitectura del circuito
Sección titulada «Arquitectura del circuito»| Parámetro | Valor | Unidad |
|---|---|---|
| Alimentación de potencia | 12–24 | V DC nominal |
| Corriente continua deseada | 4–5 | A |
| Corriente pico máxima | 8 | A |
| Microcontrolador | ESP32-C3 SuperMini | — |
| Aislamiento lógica/potencia | Optoacopladores 4N25 | — |
| MOSFETs alto lado | IRF9540N | canal P, 117 mΩ |
| MOSFETs bajo lado | IRF540N | canal N, 44 mΩ |

- Etapa de potencia — puente H con MOSFETs IRF540N (N) e IRF9540N (P).
- Aislamiento de control — optoacopladores 4N25 que separan la lógica del circuito de conmutación.
- Control embebido — el ESP32-C3 administra modos de comunicación, lógica de mando y estados.
- Interfaz de expansión — conectores I²C de entrada y salida para la arquitectura maestro-esclavo.
- Protección e indicación — fusible de entrada, capacitor de filtrado, LEDs de estado, botón local.
Tabla funcional del puente H
Sección titulada «Tabla funcional del puente H»PWM_0 = 1 y PWM_1 = 1 simultáneamente está prohibido: provoca
cortocircuito entre rieles de potencia.
| PWM_0 | PWM_1 | Estado | Descripción |
|---|---|---|---|
| 0 | 0 | Libre / deshabilitado | Ambos caminos apagados |
| 1 | 0 | Giro A | Activa diagonal A; combinable con PWM |
| 0 | 1 | Giro B | Activa diagonal B; combinable con PWM |
| 1 | 1 | Prohibido | Riesgo de cortocircuito |
Fabricación de la PCB
Sección titulada «Fabricación de la PCB»La placa se diseñó en KiCad 9 y se fabricó en JLCPCB. Los valores de abajo están leídos del archivo de layout, no transcritos: son los que hay que declarar al pedir la placa.
| Parámetro | Valor | Unidad | Notas |
|---|---|---|---|
| Dimensiones | 80,6 × 73,4 | mm | |
| Capas de cobre | 2 | F.Cu / B.Cu | |
| Espesor de placa | 1,6 | mm | |
| Vías | 14 | — | |
| Ancho de pista — potencia | 2,0 | mm | Diagonales del puente y rieles de alimentación |
| Ancho de pista — señal | 0,3 – 1,0 | mm |
Artefacto
Gerbers de fabricación — Puente HArtefacto
Proyecto KiCad completo — Puente HArtefacto
Datasheet Puente H ESP32-C3Para pedir la placa basta subir gerbers.zip tal cual al fabricante y dejar
los parámetros por defecto de dos capas: el espesor de 1,6 mm y el acabado
estándar son los que se usaron. El ZIP incluye los taladros PTH, así que no
hay que exportar nada aparte.


Lista de materiales
Sección titulada «Lista de materiales»54 componentes en 21 referencias distintas. La tabla está ordenada por función, no por designador, porque el orden que importa al replicar es el de la compra.
Artefacto
BOM — Puente H (CSV)Artefacto
Posiciones para ensamble — Puente H (CSV)| Designadores | Cant. | Valor | Encapsulado |
|---|---|---|---|
| U1 | 1 | ESP32-C3 SuperMini | Módulo SMD |
| Q1, Q2 | 2 | IRF9540N (canal P) | TO-220-3 vertical |
| Q3, Q4 | 2 | IRF540N (canal N) | TO-220-3 vertical |
| U2–U5 | 4 | 4N25 | DIP-6, paso 7,62 mm |
| D4–D7 | 4 | 1N47xxA (Zener — ver nota) | DO-41 horizontal |
| D1 | 1 | LED indicador | 1206 |
| D2 | 1 | LED de datos | 1206 |
| D3 | 1 | LED de potencia | 1206 |
| C1, C3, C4 | 3 | 100 nF | 1206 |
| C2 | 1 | 2200 µF 50 V | Radial D16 mm, paso 7,5 mm |
| R1–R4, R14, R15 | 6 | 330 Ω | 1206 |
| R7, R8, R10, R11, R16–R19 | 8 | 10 kΩ | 1206 |
| R6, R9, R12, R13 | 4 | 2,2 kΩ | 1206 |
| R20, R21 | 2 | 4,7 kΩ | 1206 |
| R5 | 1 | 3,3 kΩ | 1206 |
| F1 | 1 | Portafusible 5 × 20 mm | Clip inline horizontal |
| SW3 | 1 | DIP switch 4 posiciones | Slide, paso 2,54 mm |
| SW2 | 1 | Pulsador | RS-032G05A3-SMRT |
| M1 | 1 | Bornera salida a motor | MX126-5.0, 2 P |
| VP_IN1, VP_OUT1 | 2 | Bornera de potencia | MX126-5.0, 2 P |
| DATA_IN1, DATA_OUT1 | 2 | Conector I²C | JST EH 4 P vertical |
| CONN01X06 | 1 | Header HC-05 | JST EH 6 P vertical |
| J1–J4 | 4 | Puente de alambre | 0,5 mm² |
Dos advertencias antes de comprar:
- Los Zener D4–D7 no tienen valor cerrado. El esquemático usa el símbolo
genérico
1N47xxAde la librería de KiCad, cuyo datasheet por defecto apunta al 1N4728A (3,3 V, 1 W). Ese enlace viene de la librería, no de una elección registrada en el diseño, así que hay que confirmar la tensión contra la placa física antes de pedir. - La columna
LCSC Part #del BOM está vacía. No hay números de parte de proveedor, así que la compra se resuelve por valor y encapsulado. Para el ensamble automatizado de JLCPCB habría que rellenarla primero.
Ensamble
Sección titulada «Ensamble»La placa mezcla SMD 1206 con componentes de orificio pasante voluminosos —MOSFETs TO-220, capacitor radial de 16 mm, borneras—, así que el ensamble manual es viable y fue el que se usó.



El orden de montaje va de menor a mayor altura, que es la práctica estándar para soldadura manual y la que evita que un componente alto estorbe el acceso a uno bajo:
- Resistencias y capacitores 1206, y los LED. Son los más planos.
- Optoacopladores 4N25 en sus zócalos DIP-6. Respeta la marca de pin 1.
- Zener D4–D7 y los puentes J1–J4.
- Módulo ESP32-C3 SuperMini.
- DIP switch y pulsador.
- MOSFETs TO-220 — los cuatro van verticales.
- Portafusible, borneras, conectores JST y el capacitor de 2200 µF.
Antes de aplicar potencia por primera vez conviene verificar continuidad entre los rieles de alimentación y masa: un corto ahí es el fallo que la topología de puente H castiga más rápido.

Configuración
Sección titulada «Configuración»Modos de operación (DIP switch)
Sección titulada «Modos de operación (DIP switch)»
El estado del DIP switch se lee únicamente al encender y fija el modo de operación.
| SW3 | SW2 | SW1 | Modo | Descripción |
|---|---|---|---|---|
| 0 | 0 | 0 | Prueba local | Validación interna; rutina activable por botón |
| 0 | 0 | 1 | WiFi | Recibe comandos por red inalámbrica |
| 0 | 1 | 0 | BLE | Bluetooth Low Energy |
| 0 | 1 | 1 | HC-05 | Bluetooth clásico por UART externo |
| 1 | 0 | 0 | I²C Maestro | Nodo maestro en arquitectura distribuida |
| 1 | 0 | 1 | I²C Slave 1 | Esclavo 1 (dirección reservada) |
| 1 | 1 | 0 | I²C Slave 2 | Esclavo 2 (dirección reservada) |
| 1 | 1 | 1 | I²C Slave 3 | Esclavo 3 (dirección reservada) |
Asignación de pines ESP32-C3
Sección titulada «Asignación de pines ESP32-C3»| Señal | GPIO | Función |
|---|---|---|
PWM_0 | GPIO6 | Salida de mando — diagonal A del puente H |
PWM_1 | GPIO7 | Salida de mando — diagonal B del puente H |
SDA | GPIO8 | Datos del bus I²C |
SCL | GPIO9 | Reloj del bus I²C |
LED | GPIO10 | LED de usuario / depuración |
RX / TX | GPIO20 / GPIO21 | UART para módulo HC-05 |
S0, S1, S2 | GPIO1, GPIO3, GPIO4 | Lectura del DIP switch |
BTN | GPIO5 | Botón local (pull-up interno) |
Conectores externos
Sección titulada «Conectores externos»| Conector | Pines | Descripción |
|---|---|---|
| Entrada de potencia | 2 | Entrada principal de 12–24 V DC |
| Salida al motor | 2 | Terminales del puente H hacia la carga |
| Data_in I²C | 4 | +5V, SDA, SCL, GND — recibe el bus desde el maestro |
| Data_out I²C | 4 | Réplica del bus para encadenar el siguiente módulo |
| Header HC-05 | 6 | +5V, GND, RX, TX — Bluetooth clásico o debug UART |
| USB-C (ESP32-C3) | — | Programación, alimentación digital y debug prioritario |
Firmware
Sección titulada «Firmware»MicroPython sobre el ESP32-C3. Acepta comandos por USB-C (canal prioritario siempre activo) o por el medio seleccionado con el DIP switch.
Artefacto
main_movil_final.pyPara cargarlo: instala el intérprete de MicroPython para ESP32-C3 en el
módulo, copia el archivo como main.py en su sistema de archivos y
reinicia. El firmware arranca leyendo el DIP switch, así que hay que fijar el
modo antes de alimentar la placa.
Máquina de estados
Sección titulada «Máquina de estados» BOOT │ lee DIP switch (solo una vez) ▼DISARMED ──── ARM explícito o botón largo ────► ARMED ▲ │ └─── timeout 2 500 ms sin comando ────────────┘ │FAULT ◄─── cortocircuito / error de checksumLa salida al motor permanece deshabilitada en DISARMED. Pasar a ARMED
exige un comando explícito, así que el robot no puede moverse por accidente
al encenderse ni al reconectarse.
Protocolo I²C binario — tramas de 7 bytes
Sección titulada «Protocolo I²C binario — tramas de 7 bytes»En los modos maestro/esclavo, todos los comandos al Puente H viajan como paquetes binarios de longitud fija. El maestro construye la trama; los esclavos la validan antes de ejecutar.
| Byte | Campo | Descripción |
|---|---|---|
| 0 | PREAMBLE | Siempre 0xA5 — marca de sincronía |
| 1 | SEQ | Número de secuencia 0–255 para detección de duplicados |
| 2 | CMD_MODE | 0 STOP, 1 TARGET, 2 TEST |
| 3–4 | LO, HI | Consigna con signo como int16 little-endian |
| 5 | FLAGS | Bitmask: ARMED (0x01), FAULT (0x02), TEST (0x04) |
| 6 | CHECKSUM | XOR de los bytes 0–5 |
Si el checksum no coincide, el paquete se descarta silenciosamente y el motor permanece en su último estado: nunca se ejecuta un movimiento con datos corruptos.
Deadtime y rampas
Sección titulada «Deadtime y rampas»Conmutar ambas diagonales del puente H a la vez provoca cortocircuito. Para
evitarlo, apply_bridge_local_safe() impone 300 µs de tiempo muerto
entre cambios de diagonal.
Ningún cambio de velocidad es instantáneo. El duty cycle sube o baja 1 % cada 20 ms hasta alcanzar la consigna, con un techo de 70 %. Pasar de 0 % a velocidad máxima toma por tanto 1,4 s como mínimo, y esa rampa es la que limita las corrientes de arranque y el estrés mecánico sobre los motores DC.
Verificación
Sección titulada «Verificación»El módulo pasó por dos etapas físicas antes de la versión final: prototipo en protoboard y placa fabricada.


El módulo acumula cinco resultados de prueba: temperatura de los MOSFETs en protoboard y bajo carga continua, movimiento diferencial en superficie plana, respuesta a los comandos de dirección y control remoto extremo a extremo. El detalle de cada uno está en Verificación del robot móvil.