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.
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.
- ProyectoConstruya un robot seguidor de línea: simulación a pista
- ProyectoConstruye un robot controlado por móvil con Bluetooth o Wi-Fi
- ProyectoConstruye un robot esquivador de obstáculos autónomo
- ProyectoRobot seguidor de línea con microcontrolador 8051
- Ruta de aprendizajeControl de motores en robótica: ruta de aprendizaje
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