Ir al contenido

Puente H

Módulo Puente H de frente: ESP32-C3, MOSFETs con disipador, capacitor de filtrado y borneras

El Puente H es la placa que mueve los motores de tracción del robot. Recibe una consigna de velocidad y la convierte en la potencia que llega al motor. El robot lleva dos, uno por motor.

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 que gestiona los modos de comunicación.

Características eléctricas
ParámetroValorUnidad
Alimentación de potencia12–24V DC nominal
Corriente continua deseada4–5A
Corriente pico máxima8A
MicrocontroladorESP32-C3 SuperMini—
Aislamiento lógica/potenciaOptoacopladores 4N25—
MOSFETs alto ladoIRF9540Ncanal P, 117 mΩ
MOSFETs bajo ladoIRF540Ncanal N, 44 mΩ
Esquema de bloques funcionales del puente H
Etapa de potencia, aislamiento óptico, control embebido, expansión I²C y protección.
  1. Etapa de potencia — puente H con MOSFETs IRF540N (N) e IRF9540N (P).
  2. Aislamiento de control — optoacopladores 4N25 que separan la lógica del circuito de conmutación.
  3. Control embebido — el ESP32-C3 administra modos de comunicación, lógica de mando y estados.
  4. Interfaz de expansión — conectores I²C de entrada y salida para la arquitectura maestro-esclavo.
  5. Protección e indicación — fusible de entrada, capacitor de filtrado, LEDs de estado, botón local.

Al encender, la placa lee su DIP switch una sola vez, y esa lectura fija por dónde recibe las órdenes: I²C como maestro o esclavo, WiFi, BLE o Bluetooth clásico. En el robot, un módulo arranca como maestro y el otro como esclavo. Por USB-C acepta órdenes siempre, sea cual sea el modo.

SW3SW2SW1ModoDescripción
000Prueba localValidación interna; rutina activable por botón
001WiFiRecibe comandos por red inalámbrica
010BLEBluetooth Low Energy
011HC-05Bluetooth clásico por UART externo
100I²C MaestroNodo maestro en arquitectura distribuida
101I²C Slave 1Esclavo 1 (dirección reservada)
110I²C Slave 2Esclavo 2 (dirección reservada)
111I²C Slave 3Esclavo 3 (dirección reservada)

La placa arranca con la salida al motor deshabilitada, y solo la habilita tras una orden explícita de armado. Para mover el motor activa una de las dos diagonales del puente con PWM: una diagonal gira en un sentido, la otra en el contrario.

PWM_0 = 1 y PWM_1 = 1 simultáneamente está prohibido: provoca cortocircuito entre rieles de potencia.

PWM_0PWM_1EstadoDescripción
00Libre / deshabilitadoAmbos caminos apagados
10Giro AActiva diagonal A; combinable con PWM
01Giro BActiva diagonal B; combinable con PWM
11ProhibidoRiesgo de cortocircuito

De la NUC a las ruedas. El maestro recibe las órdenes por USB y reenvía la suya al esclavo por I²C; cada módulo mueve su propio motor.

  1. NUCPython 3.12
  2. USB-CDC · COM4
  3. Puente H maestroESP32-C3 · DIP 100
  4. I²C 0x08 · tramas binarias
  5. Puente H esclavoESP32-C3 · I²C 0x08
  6. Salida al motor · uno por módulo
  7. Motores DC de tracciónbase diferencial · 12–24 V
Conectores de la placa
ConectorPinesDescripción
Entrada de potencia2Entrada principal de 12–24 V DC
Salida al motor2Terminales del puente H hacia la carga
Data_in I²C4+5V, SDA, SCL, GND — recibe el bus desde el maestro
Data_out I²C4Réplica del bus para encadenar el siguiente módulo
Header HC-056+5V, GND, RX, TX — Bluetooth clásico o debug UART
USB-C (ESP32-C3)—Programación, alimentación digital y debug prioritario
Interior de la caja de elevación con los módulos Puente H montados
Los dos módulos alojados dentro de la estructura metálica que eleva el manipulador, sobre soportes impresos y sin cajas externas.

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.

Especificación de fabricación
ParámetroValorUnidadNotas
Dimensiones80,6 × 73,4mm
Capas de cobre2F.Cu / B.Cu
Espesor de placa1,6mm
Vías14—
Ancho de pista — potencia2,0mmDiagonales del puente y rieles de alimentación
Ancho de pista — señal0,3 – 1,0mm
Esquemático del Puente H en KiCad
ESP32-C3, optoacopladores 4N25, MOSFETs IRF540N/IRF9540N, conectores de potencia e I²C.
Layout PCB de dos capas del Puente H
El ruteo separa los planos de potencia —pistas de 2,0 mm— de las señales lógicas del microcontrolador.

Para 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.

Cifras reales de JLCPCB para un lote de 10 piezas de dos capas, sin ensamble de fábrica. El Controlador CL57T cae en el mismo rango.

ConceptoCosto aproximado
Producción5,00 USD
Envío17,50 USD
Derechos de importación130 MXN

El envío pesa más del triple que la producción. Por eso conviene pedir el Puente H y el Controlador CL57T en el mismo lote, y pedir diez piezas cuando hacen falta dos.

54 componentes en 21 referencias distintas, ordenados por función: el orden que importa al replicar es el de la compra.

Lista de materiales — módulo Puente H
DesignadoresCant.ValorEncapsulado
U11ESP32-C3 SuperMiniMódulo SMD
Q1, Q22IRF9540N (canal P)TO-220-3 vertical
Q3, Q42IRF540N (canal N)TO-220-3 vertical
U2–U544N25DIP-6, paso 7,62 mm
D4–D741N47xxA (Zener — ver nota)DO-41 horizontal
D11LED indicador1206
D21LED de datos1206
D31LED de potencia1206
C1, C3, C43100 nF1206
C212200 µF 50 VRadial D16 mm, paso 7,5 mm
R1–R4, R14, R156330 Ω1206
R7, R8, R10, R11, R16–R19810 kΩ1206
R6, R9, R12, R1342,2 kΩ1206
R20, R2124,7 kΩ1206
R513,3 kΩ1206
F11Portafusible 5 × 20 mmClip inline horizontal
SW31DIP switch 4 posicionesSlide, paso 2,54 mm
SW21PulsadorRS-032G05A3-SMRT
M11Bornera salida a motorMX126-5.0, 2 P
VP_IN1, VP_OUT12Bornera de potenciaMX126-5.0, 2 P
DATA_IN1, DATA_OUT12Conector I²CJST EH 4 P vertical
CONN01X061Header HC-05JST EH 6 P vertical
J1–J44Puente de alambre0,5 mm²

Dos advertencias antes de comprar:

  • Los Zener D4–D7 no tienen valor cerrado. El esquemático usa el símbolo genérico 1N47xxA de 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.

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 va de menor a mayor altura, para que un componente alto no estorbe el acceso a uno bajo:

  1. Resistencias y capacitores 1206, y los LED.
  2. Optoacopladores 4N25 en sus zócalos DIP-6. Respeta la marca de pin 1.
  3. Zener D4–D7 y los puentes J1–J4.
  4. Módulo ESP32-C3 SuperMini.
  5. DIP switch y pulsador.
  6. MOSFETs TO-220 — los cuatro van verticales.
  7. 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.

Detalle de la PCB del Puente H con ESP32-C3, DIP switch y conectores I²C
ESP32-C3 SuperMini, conector I²C etiquetado (5 V, SDA, SCL, GND), borneras y DIP switch de selección de modo.
SeñalGPIOFunción
PWM_0GPIO6Salida de mando — diagonal A del puente H
PWM_1GPIO7Salida de mando — diagonal B del puente H
SDAGPIO8Datos del bus I²C
SCLGPIO9Reloj del bus I²C
LEDGPIO10LED de usuario / depuración
RX / TXGPIO20 / GPIO21UART para módulo HC-05
S0, S1, S2GPIO1, GPIO3, GPIO4Lectura del DIP switch
BTNGPIO5Botón local (pull-up interno)

MicroPython sobre el ESP32-C3. Acepta comandos por USB-C —canal prioritario, siempre activo— o por el medio seleccionado con el DIP switch.

Para 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.

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 checksum

La 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.

En los modos maestro y esclavo, todos los comandos al Puente H viajan como paquetes binarios de 7 bytes. El maestro construye la trama; los esclavos la validan antes de ejecutar.

ByteCampoDescripción
0PREAMBLESiempre 0xA5 — marca de sincronía
1SEQNúmero de secuencia 0–255 para detección de duplicados
2CMD_MODE0 STOP, 1 TARGET, 2 TEST
3–4LO, HIConsigna con signo como int16 little-endian
5FLAGSBitmask: ARMED (0x01), FAULT (0x02), TEST (0x04)
6CHECKSUMXOR 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.

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.

El techo del 70 % es una decisión de seguridad de la plataforma móvil: con el manipulador montado, acelerar a fondo compromete la estabilidad.

Parámetros de tracción, leídos del firmware
ParámetroValorUnidadNotas
Frecuencia PWM1000Hz
Tiempo muerto entre diagonales300µsEvita el cortocircuito de puente
Techo de velocidad70% de duty
Rampa1 % cada 20ms1,4 s de 0 % al techo
Timeout de comunicación2500msSin comando, vuelve a DISARMED
Refresco maestro → esclavo80ms
Baudios del enlace serie115200bps
Prioridad de USB8000msVentana en que USB desplaza al medio del DIP switch

El maestro acepta por USB los mismos comandos de texto que le manda la NUC, así que se prueba conectándolo directo a una PC. El script consulta la placa y el bus I²C y, si se lo pides, mueve los dos motores unos segundos, reenviando la orden a 15 Hz como la NUC para que no salte el timeout de 2,5 s.

  1. Pon el DIP switch en 100 (maestro) antes de alimentar la placa.
  2. Conecta el USB-C del ESP32-C3 a la PC. Para mover, conecta también la potencia y deja las ruedas en el aire.
  3. Instala la dependencia: pip install pyserial.
  4. Corre la prueba:
Ventana de terminal
python prueba_puente_h.py --puerto COM4
python prueba_puente_h.py --puerto COM4 --mover --consigna 80 --segundos 3
python prueba_puente_h.py --puerto COM4 --consola

La placa debe responder PONG, su estado, y I2C_SCAN:0x8,0xb si el esclavo y el controlador CL57T están conectados al bus. Con --consola puedes escribir cualquier comando; HELP los lista.