Buen día Mecatrónic@s! En esta oportunidad compartiremos una breve guía para utilizar el famoso Driver de Motor DC L298N.
Constantemente, en el desarrollo y creación de prototipos es necesario la incorporación de actuadores que trabajan a un voltaje mayor y consuman una gran cantidad de corriente, como un motor, un relé o un solenoide (actuador lineal o electroválvula). Estos dispositivos no podemos conectarlos directamente al microcontrolador, dado que su utilidad es el (valga la redundancia) control y no la potencia, por ende no brindan la energía necesaria su funcionamiento. Es aquí cuando entra el L298N o L298. Este módulo es un puente H dual de bajo costo y muy popular, que se puede controlar fácilmente con una placa Arduino.
Virtudes del Driver L298N
Es una placa que incorpora todos los componentes necesarios para usar el integrado L298N con un Arduino, un PIC o una Raspberry. Entre sus principales características se encuentran:
- Alimentación desde 5V hasta 30 V (dependiendo de la configuración elegida con un Jumper).
- Corriente DC máxima total peak de 3,5
- Protección en caso de sobre-temperatura.
- Bajo voltaje de saturación.
- Diodos en cada canal para proteger el circuito de corrientes externas (girar el motor con la mano puede «introducir» corriente al circuito y quemarlo).
- Regulador de 5V integrado.
- Capacidad de controlar la velocidad de cada motor mediante PWM.
Pinout del Driver L298N
+VCC | Corresponde a la alimentación del motor o carga, puede ser entre 5V y 30VDC. Si la tensión es mayor a 20V, retirar el jumper encerrado en color verde. |
GND | Punto común (Masa o Tierra). |
+5V | Pin de alimentación lógica del integrado. Si el voltaje de VCC es menor o igual a 20V y el jumper encerrado de color verde está insertado, brinda una salida de 5V de máximo 500mA.
Si VCC es mayor a 20V y el jumper no está conectado, se necesita ingresar 5V a este pin para alimentar la etapa lógica del circuito. IMPORTANTE!!! Jamás conectar el jumper verde si VCC es mayor a 20V, sino quemará el regulador interno. |
Salida 1 y 2 | Pines para conectar el motor A |
Salida 3 y 4 | Pines para conectar el motor B |
Habilitador A (ENA) | Pin que habilita las salidas 1 y 2 cuando está en ALTO (5V). Si el jumper azul está conectado, siempre estará a máxima potencia. Si en vez del jumper se conecta a un pin PWM, ser utilizado para controlar la velocidad del motor usando dicho pulso. |
Habilitador B (ENB) | Pin que habilita las salidas 1 y 2 cuando está en ALTO (5V). Si el jumper azul está conectado, siempre estará a máxima potencia. Si en vez del jumper se conecta a un pin PWM, ser utilizado para controlar la velocidad del motor usando dicho pulso. |
IN1 & IN2 | Pines utilizados para controlar la dirección de giro del motor A. Cuando uno de ellos está en ALTO y el otro en BAJO, el motor girará. Si se energizan de manera inversa, el motor girará en sentido contrario. |
IN3 & IN4 | Pines utilizados para controlar la dirección de giro del motor A. Cuando uno de ellos está en ALTO y el otro en BAJO, el motor girará. Si se energizan de manera inversa, el motor girará en sentido contrario. |
El comportamiento lógico del Driver L298N como controlador de motor puede resumirse en la siguiente tabla:
Entrada 1/3 | Entrada 2/4 | Habilitador A/B | Estado del motor |
Bajo (0v) | Bajo(0v) | Alto(5v) o PWM | Detenido (frenado dinámico en caso de que el motor estuviese en movimiento) |
Alto(5V) | Bajo(0V) | Alto(5V) o PWM | Giro en un sentido |
Bajo(0V) | Alto(5V) | Alto(5V) o PWM | Gira en sentido contrario |
Alto(5V) | Alto(5V) | Alto(5V) o PWM | Detenido (frenado dinámico en caso de que el motor estuviese en movimiento) |
Alto o Bajo) | Alto o Bajo | Bajo(0V) | Las salidas son deshabilitadas |
IMPORTANTE: El sentido de giro de los motores dependerán de como los hayas conectado. Recordemos que si conectamos el motor dc en un sentido girará en una dirección y si lo conectas al revés girará en sentido opuesto. Debes encontrar que configuración es la que requieres para tu proyecto.
NOTA: El frenado dinámico funciona como una especie de “corto circuito”, donde el L298N establece una ruta para la energía generada por el motor cuando continúa girando por inercia, pero este efecto no es muy evidente en motores DC pequeños.
Ejemplo de conexión del Driver L298N con Arduino
En este punto, ya contamos con el conocimiento para conectar el módulo L298N a la placa Arduino. Podremos la dirección de giro y velocidad de un motor de forma independiente, en este caso utilizaremos un potenciómetro. Necesitaremos los siguientes materiales que puedes conseguir en nuestra tienda:
- Inicia conectando la fuente de alimentación para los motores, cuidando de no conectar de forma invertida hacia el módulo y verificando que el jumper CON5 (el indicado de color verde en las imágenes del comienzo) esté colocado. Aquí aplica dado que la tensión de los motores es menor a 20VDC
- Toma un potenciómetro de cualquier valor entre 1kΩ y 100kΩ. Viéndolo de frente, conecta el pin que se encuentra hacia la izquierda (1) en el GND de la placa Arduino. El pin de en medio en A0 y el de la derecha en 5V.
- Levanta el jumper que se encuentra en el pin ENA y conecta un cable hacia el pin 9 del Arduino, por acá estaremos inyectando una señal PWM para controlar la velocidad del motor. Posteriormente, conecta los pines 3 y 2 a las entradas IN1 e IN2 respectivamente.
Finalmente, conecta un motor entre las salidas 1 y 2. El montaje debe quedar así:
Código para el Arduino
El siguiente sketch nos permitirá lograr el objetivo de controlar un motor con el potenciómetro y puede servir de base para otros proyectos. Es importante saber que para el módulo L298N no es necesario agregar ninguna librería.
El potenciómetro funciona como un divisor de tensión, entregando un rango que va desde 0V hasta 5V aproximadamente, el cual lo capturamos con el conversor análogo-digital del Arduino por el pin A0. Cuando el potenciómetro esté ubicado en el centro del recorrido, el motor se detendrá. A medida que lo movamos a la derecha, comenzará a girar en esa dirección lentamente hasta alcanzar la velocidad máxima al tope de movimiento de potenciómetro.
Si giramos el potenciómetro lentamente hacia la izquierda, se detendrá el motor y comenzará a girar en esa dirección contraria, alcanzando su tope al llegar al fin del recorrido.
int potenciometro = A0; //Potenciómetro
int in1 = 3; //Salida para control 1
int in2 = 2; //Salida para control 2
int habilitadorA = 9; //Señal de PWM
//*** Variables **//
int valor_pote; //Captura la diferencia de potencial generada por el potenciometro
int ciclo_pwm; //Contiene el valor del PWM
#define UP_DUTY 6 //Definimos el rango superior de PWM para una banda muerta.
#define DWN_DUTY -6 //Definimos el rango inferior de PWM para una banda muerta.
void setup()
{
//Inicializamos los pines de salida
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
frenado_dinamico();
}
void loop()
{
//Capturamos el valor de potenciómetro en la variable
valor_pote = analogRead(potenciometro);
//Como la entrada analógica del Arduino es de 10 bits, el rango va de 0 a 1023.
//En cambio, las salidas del Arduino son de 8 bits, quiere decir, rango entre 0 a 255.
//Por esta razón tenemos que mapear el número de un rango a otro usando este código.
ciclo_pwm = map(valor_pote, 0, 1023, -255, 255);
if(ciclo_pwm > UP_DUTY){
giro_derecha();
analogWrite(habilitadorA,ciclo_pwm);
}else if(ciclo_pwm < DWN_DUTY){
ciclo_pwm*=(-1); //Cambiamos el signo al PWM
giro_izquierda();
analogWrite(habilitadorA,ciclo_pwm);
}else{
frenado_dinamico();
analogWrite(habilitadorA,255);
}
delay(100);
}
void giro_derecha(){
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
}
void giro_izquierda(){
digitalWrite(in2,HIGH);
digitalWrite(in1,LOW);
}
void frenado_dinamico(){ //Para el frenado dinámico podemos utilizar ambos pines tanto en bajo o en alto.
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
}
Aspectos adicionales del Driver L298N, in-depth.
Existen una serie de aspectos que debemos conocer sobre el integrado del Driver L298N y la placa donde se encuentra montado.
Primero, ésta cuenta con 8 diodos que se encargan de manejar la energía que se tiene al desenergizar el motor. Sin ellos, se generaría una diferencia de potencial tan elevada que los transistores de las salidas pueden verse afectados parcial o totalmente.
Segundo, el módulo cuenta con dos condensadores electrolíticos de 220uF/35V. Pero, ¿Cuál es su función? Si estamos desarrollando una placa a medida, ¿debemos incorporarlos? La respuesta es sí. Su función principal es servir de reservorio de energía para el momento inicial donde las salidas son activadas y requieren brevemente una mayor demanda de energía. Son fundamentales para el buen funcionamiento no sólo del módulo, sino del sistema completo.
Finalmente, las salidas del Driver L298N son a base a transistores bipolares, los cuales, al estar activados exhiben una diferencia de potencial entre colector-emisor, que, en conjunto con la corriente de colector, determinan la cantidad de energía que será disipada en forma de calor.
Realizamos una prueba en el laboratorio para determinar cuál es el comportamiento del módulo y qué tanto se asemeja a las especificaciones técnicas. Se empleó una carga electrónica para establecer las diversas corrientes a la salida.
Voltaje de saturación de transistor superior, inferior y caída total.
Si detallamos el diagrama interno del L298N se apreciará que existen cuatro semi-puentes compuestos por dos transistores: uno de ellos es el encargado de conectar la fuente (+Vs) hacia la salida, y el otro conecta GND con la salida. Se incluye una circuitería lógica para evitar que ambos transistores se enciendan al mismo tiempo, lo que puede destruir ambos dispositivos.
Caracterizamos entonces cual es la caída de tensión de un transistor superior y otro inferior del semi-puente, obteniéndose la siguiente data:
Corriente (ICE) [mA] | Tensión (VCE) transistor superior [mV] | Tensión (VCE) transistor inferior [mV] |
500 | 1100 | 900 |
1000 | 1500 | 1250 |
1600 | 1600 | 1600 |
Posteriormente, probamos la caída de tensión total con respecto a la corriente de salida. En otras palabras, corresponde a cuánta diferencia de tensión existe entre la fuente (VCC) y la carga, a distintas corrientes de salida.
Corriente de salida [mA] | Diferencia de potencial total [V] |
500 | 2,01 |
1000 | 2,64 |
1600 | 3,38 |
Con esta información, se pueden concluir:
- A mayor corriente de salida, mayor diferencia de potencial entre lo que se obtiene en ella y la fuente de alimentación. Por lo tanto, si necesitamos energizar un motor de 12V, alimentar el módulo con 14V-16V.
- El comportamiento del Driver L298N estuvo dentro de las especificaciones detalladas por el fabricante.
- Se aconseja trabajar a un 80% del máximo del Driver L298N por salida, es decir, 1600mA, con el fin de garantizar un margen de operación segura.
- Si se necesita mayor corriente, puede colocarse en paralelo ambas salidas, incrementando la capacidad de corriente hasta 3.5A
Puedes encontrar el datasheet oficial del Driver L298N pinchando aquí.
BONUS: El Driver L298N puede ser empleado para controlar 4 motores girando en un solo sentido, incluyendo el frenado dinámico y control de velocidad, con la precaución de no exceder los 800mA por salida. Cada una de ellas estará controlada por su correspondiente entrada, es decir, la salida 1 se controla con la entrada 1 y así sucesivamente. Las posibilidades son infinitas, pudiendo no solo energizar motores, sino cualquier carga DC, como por ejemolo un LED de potencia.
Video ejemplificador del Driver L298N
Links de descarga de los códigos del video:
Si esta guía te ha resultado de utilidad ¡Compártela! Así podremos llegar a otros usuarios con el mismo interés.
No dudes en comentarnos si por algún motivo has tenido alguna dificultad, te responderemos a la brevedad.
Un fraterno abrazo, Mechatronic Store.