Componente · Driver

L298N Motor Driver

El L298N es el controlador de motores más común en Arduino: controla dos motores de CC o un paso a paso bipolar. Ventajas, límites y caída de tensión.

Qué es

El L298N es un controlador de motores de puente H dual: el músculo que hay entre los delicados pines lógicos de un microcontrolador y un motor que quiere mucha más corriente de la que esos pines pueden dar. Un pin de microcontrolador solo puede dar unas pocas decenas de miliamperios; hasta un motorreductor de CC pequeño consume cientos. El L298N toma de la placa las señales de dirección y velocidad, de baja potencia, y conmuta una alimentación de motor separada y de mayor corriente para hacerlas caso. Maneja dos motores de forma independiente, que es justo lo que necesita un robot de dos ruedas.

Está anticuado: un controlador MOSFET eficiente como el TB6612FNG o el DRV8833 funciona más frío y desperdicia menos tensión, pero el L298N está en todas partes, es barato, es robusto, y es el módulo que incluye la mayoría de los kits de robótica, así que merece la pena entenderlo bien.

Esquema de un puente H: cuatro conmutadores alrededor de un motor de CC entre un riel de alimentación positivo y masa. Cerrar el conmutador superior izquierdo y el inferior derecho envía la corriente en un sentido por el motor, hacia delante; el par opuesto lo invierte.
Un puente H son cuatro conmutadores alrededor del motor. Cierra S1 y S4 para avanzar, S2 y S3 para retroceder: el L298N hace esto para dos motores a la vez. Descargar SVG

Cómo funciona un puente H

Un puente H son cuatro conmutadores dispuestos alrededor del motor en forma de «H». Cierra el superior izquierdo y el inferior derecho y la corriente fluye en un sentido: el motor gira hacia delante. Cierra el par opuesto y la corriente se invierte: el motor gira hacia atrás. Ese es todo el truco: un puente H te permite invertir un motor sin recablearlo.

Controlas cada motor con tres señales:

  • Dos pines de dirección (IN1/IN2) eligen avance, retroceso o frenada.
  • Un pin de habilitación (ENA), alimentado con una señal PWM, fija la velocidad conmutando el puente rápido. PWM al máximo es velocidad máxima; un duty del 50 % es más o menos la mitad.

Si alimentas el pin de habilitación con la salida de un lazo de control, puedes mantener una velocidad objetivo o dirigir un robot con suavidad en lugar de dar tirones entre parada y máxima.

Cuándo usarlo

Recurre a un L298N —o a cualquier puente H— siempre que un microcontrolador deba manejar un motor de CC con escobillas, que es casi cualquier robot con ruedas. Sus 2 A por canal manejan de sobra los pequeños motores amarillos usados en seguidores de línea y rovers.

Elige un controlador basado en MOSFET en su lugar cuando importen la eficiencia y la autonomía, cuando tus motores sean pequeños (la caída de tensión del L298N se come mucho en un motor de 6 V) o cuando quieras que el controlador funcione frío sin disipador.

Cableado y errores comunes

  • Dos alimentaciones, una masa. La batería de motores alimenta el pin de alimentación de motor; la lógica de 5 V alimenta la parte lógica. Sus masas deben estar unidas o las señales de control no tienen referencia: un fallo silencioso clásico.
  • Roba ~2 V. La etapa de salida bipolar más antigua pierde unos 2 V antes de que el motor vea nada. Dale unos 8 V de alimentación a un motor de 6 V para que vaya a plena velocidad.
  • Se calienta. Con corriente sostenida el chip necesita su disipador. Si los motores se debilitan durante una tanda, comprueba la temperatura.
  • Cuidado con el jumper del regulador de 5 V de a bordo. Muchos módulos pueden alimentar la parte lógica desde la alimentación de motores, lo cual es cómodo, pero solo hasta unos 12 V. Por encima de eso, quita el jumper y alimenta los 5 V por separado o te cocerás el regulador.

Patillaje

El módulo rojo L298N al que todo el mundo se refiere tiene tres bloques de terminales y dos cabeceras de pines.

Grupo Marca Qué hace
Alimentación +12V Alimentación de motores, 5–35 V. El nombre engaña: es lo que quieras que necesiten tus motores
Alimentación GND Masa. Debe ser compartida con el microcontrolador
Alimentación +5V Salida cuando el jumper del regulador está puesto; entrada cuando no lo está
Motor A OUT1, OUT2 Los dos terminales del canal A
Motor B OUT3, OUT4 Los dos terminales del canal B
Control ENA Habilitación del canal A. Con jumper a alto por defecto: quítalo para hacer PWM
Control IN1, IN2 Dirección del canal A
Control IN3, IN4 Dirección del canal B
Control ENB Habilitación del canal B. El mismo jumper

Los dos pequeños jumpers de ENA y ENB son la razón de que tantos primeros intentos tengan control de dirección pero no de velocidad: mientras estén puestos, el canal está permanentemente habilitado y el PWM no hace nada. Quítalos y cablea esos pines a salidas capaces de PWM.

El tercer jumper, junto al bloque de alimentación, habilita el regulador de 5 V de a bordo.

La tabla de verdad

Tres señales por motor, y seis combinaciones con sentido. Esta tabla es toda la interfaz de control.

ENA IN1 IN2 Qué hace el motor A Notas
LOW × × Rueda libre Las salidas quedan de alta impedancia; el motor gira por inercia
PWM HIGH LOW Avance al duty indicado El estado normal de marcha
PWM LOW HIGH Retroceso al duty indicado
HIGH HIGH HIGH Frena Los dos terminales a alto: el motor se cortocircuita consigo mismo
HIGH LOW LOW Frena Los dos a bajo: el mismo efecto
HIGH HIGH LOW Avance a plena velocidad Lo que te da el jumper ENA puesto

Frenar y dejar rodar son realmente distintos, y la diferencia importa más de lo que la gente espera. Dejar rodar deja que el robot avance por inercia; frenar cortocircuita la fuerza contraelectromotriz del propio motor a través del puente, lo que disipa la energía rotacional como calor y lo detiene mucho más de golpe. Un seguidor de línea que se pasa de largo en cada bifurcación es a menudo uno que deja rodar cuando debería frenar.

Cablearlo a un Arduino

L298N Arduino Uno Nota
ENA Pin 9 Debe admitir PWM (3, 5, 6, 9, 10, 11 en un Uno)
IN1 Pin 8 Cualquier pin digital
IN2 Pin 7 Cualquier pin digital
IN3 Pin 5 Cualquier pin digital
IN4 Pin 4 Cualquier pin digital
ENB Pin 3 Debe admitir PWM
GND GND La conexión de la que depende todo
+12V + de la batería de motores No el Vin del Arduino
+5V — Solo si alimentas el Arduino desde el L298N

El jumper del regulador de 5 V, decidido bien

Jumper El pin +5V es Úsalo cuando
Puesto Una salida: el regulador de a bordo hace 5 V desde la alimentación de motores La alimentación de motores es de 7–12 V y quieres una sola batería para todo
Quitado Una entrada: debes alimentarlo con 5 V La alimentación de motores está por encima de 12 V, o por debajo de unos 7 V

Por encima de unos 12 V el regulador lineal tiene que quemar la diferencia como calor y se cocerá. Por debajo de unos 7 V no puede mantener 5 V, y la lógica se queda sin tensión cuando los motores cargan el paquete. Los dos fallos parecen reinicios aleatorios.

Código mínimo funcional

const int ENA = 9, IN1 = 8, IN2 = 7;
const int ENB = 3, IN3 = 5, IN4 = 4;

void setup() {
  for (int p : {ENA, IN1, IN2, ENB, IN3, IN4}) pinMode(p, OUTPUT);
}

// speed: -255..255. Negative is reverse, 0 coasts.
void driveA(int speed) {
  digitalWrite(IN1, speed > 0);
  digitalWrite(IN2, speed < 0);
  analogWrite(ENA, abs(constrain(speed, -255, 255)));
}

void brakeA() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, HIGH);
  analogWrite(ENA, 255);
}

void loop() {
  driveA(180); delay(1500);   // forward
  brakeA();    delay(500);    // stop hard
  driveA(-180); delay(1500);  // reverse
  driveA(0);   delay(500);    // coast
}

Fíjate en que driveA(0) deja rodar en lugar de frenar: poner el duty a cero deshabilita el puente. Si quieres una parada brusca tienes que pedirla.

El problema de los 2 V, cuantificado

La etapa de salida del L298N está construida con transistores bipolares, y cada par en conducción pierde tensión. La ficha técnica da una caída de saturación total de unos 1,8 V a 1 A y de hasta unos 2,7 V a 2 A. Esa tensión nunca llega al motor; se convierte en calor en el chip.

Las consecuencias conviene verlas como números:

Alimentación de motores Lo que ve el motor realmente Fracción perdida
6 V ~4 V 33%
7.4 V (2S Li-ion) ~5.4 V 27%
9 V ~7 V 22%
12 V ~10 V 17%

Con un motor de 6 V alimentado a 6 V, un tercio de tu batería está calentando un chip. Esta es toda la razón por la que el L298N parece flojo en robots pequeños, y por la que un motor de 6 V quiere aproximadamente 8 V de alimentación detrás de este controlador.

Es además un problema térmico. A 1 A por canal con los dos motores en marcha, el chip está disipando alrededor de 4 W. El pequeño disipador solo aguanta eso con flujo de aire, y un bloqueo limitado por corriente lo empuja a la protección térmica, lo que se manifiesta como motores que se apagan a media tanda y se recuperan tras una pausa.

Resolución de problemas

Síntoma Causa probable Solución
No se mueve nada, el cableado parece correcto Sin masa común Une el GND del L298N al GND del Arduino: este es el fallo silencioso clásico
La dirección funciona, la velocidad no Los jumpers ENA/ENB siguen puestos Quítalos y cablea los pines a salidas PWM
El control de velocidad es solo on/off El pin de habilitación no está en un pin con PWM Usa el 3, 5, 6, 9, 10 u 11 en un Uno
Motores flojos, controlador caliente La caída de ~2 V más la carga térmica Sube la alimentación, o pásate a un controlador MOSFET
Los motores se apagan durante una tanda Protección térmica Disipador y flujo de aire; reduce la corriente continua
El Arduino se reinicia al arrancar los motores Alimentación compartida que se desploma Batería de motores aparte; solo la masa es común
El regulador se pone muy caliente Alimentación de motores por encima de ~12 V con el jumper puesto Quita el jumper y alimenta los 5 V por separado
Un motor gira al revés Hilos del motor invertidos Cambia OUT1/OUT2, o arréglalo por software, que queda más limpio
Los dos motores dan tirones a la vez La alimentación de motores no puede dar la corriente de bloqueo Paquete mayor; comprueba su resistencia interna

¿L298N o TB6612FNG?

L298N TB6612FNG
Etapa de salida Bipolar MOSFET
Caída de tensión ~1.8–2.7 V ~0.5 V en total
Corriente continua 2 A por canal (con refrigeración) 1.2 A por canal
Corriente de pico 3 A 3.2 A
Alimentación de motores 5–35 V 2.5–13.5 V
Calor Necesita disipador Funciona frío
Tamaño y peso Módulo grande Tamaño de un sello
Pines de control 2 de dirección + 1 PWM por motor Los mismos, más un pin de espera compartido

Elige el TB6612FNG para prácticamente cualquier robot pequeño: dos motores amarillos, un seguidor de línea, un resolutor de laberinto. La diferencia de eficiencia no es marginal: en un sistema de 6 V es un tercio de tu batería.

Elige el L298N cuando la alimentación de motores supere los 13,5 V, cuando necesites más de unos 1,2 A continuos por canal, o cuando simplemente sea lo que venía en el kit. Es robusto, tolerante al abuso, y entenderlo te enseña el puente H como es debido.

Para diseños más nuevos también conviene conocer el DRV8833 (parecido al TB6612FNG, con limitación de corriente) y el BTS7960 (43 A, para motores realmente grandes).

Explora el grafo

Se usa en estos montajes

Proyectos, rutas de aprendizaje y simuladores que incluyen L298N Motor Driver.

Comparar

Alternativas

Preguntas

Preguntas frecuentes sobre L298N Motor Driver

¿Qué es el driver de motores L298N?

El L298N es un módulo driver de motores con doble puente H. Se coloca entre un microcontrolador y tus motores: recibe señales de dirección y velocidad de baja potencia y conmuta una alimentación aparte, de mayor corriente, para mover dos motores de CC (o un paso a paso) de forma independiente.

¿Para qué se usa el L298N?

Permite que un microcontrolador como un Arduino mueva motores que nunca podría alimentar directamente. Un pin de microcontrolador solo suministra decenas de miliamperios, mientras que incluso un pequeño motorreductor necesita cientos, así que el L298N pone el músculo —avance, retroceso y control de velocidad— en los robots con ruedas.

¿Cómo se conecta un L298N a un Arduino?

Conecta la batería de los motores a la alimentación de motores del L298N, une la masa del L298N con la masa del Arduino (esta masa compartida es imprescindible), conecta cada motor a los terminales OUT y lleva los pines de dirección IN1/IN2 y los pines de habilitación ENA/ENB a pines digitales y PWM del Arduino.

¿Cómo se controla la velocidad del motor con el L298N?

Aplica una señal PWM al pin de habilitación (ENA o ENB) en lugar de mantenerlo en HIGH. El ciclo de trabajo del PWM enciende y apaga rápidamente el puente H, y el motor responde al promedio, así que un ciclo de trabajo del 50% equivale más o menos a media velocidad. Los pines de dirección fijan el avance o el retroceso.

¿Por qué mi motor va lento con el L298N?

La anticuada etapa de salida de transistores del L298N se come unos 2 V antes de que lleguen al motor. Un motor de 6 V con una alimentación de 6 V se notará flojo; dale unos 8 V de alimentación, o cambia a un driver MOSFET eficiente como el TB6612FNG para motores pequeños.

Lecturas adicionales

Referencias