L298N: módulo para controlar motores para Arduino

l298n

Existen muchos módulos para Arduino o para el uso en proyectos DIY por makers. En el caso del L298N es un módulo para controlar motores. Con ellos se pueden usar simples códigos para programar nuestra placa Arduino y ser capaces de controlar motores DC de una forma sencilla y controlada. Generalmente, este tipo de módulo se usa más en robótica o en actuadores mediante motores, aunque se puede usar para multitud de aplicaciones.

Ya introdujimos todo lo necesario sobre el módulo ESP, con chip ESP8266, un módulo que permite extender las capacidades de las placas Arduino y de otros proyectos para que dispongan de conectividad WiFi. Estos módulos no solo se pueden usar aislados, lo bueno es que se pueden combinar. Por ejemplo, se puede usar un ESP8266 para nuestro prototipo y el L298N, con lo cual conseguiríamos un motor controlable a través de Internet o por wireless.

Introducción al L298N y datasheets:

l298n pinout

Aunque con Arduino también se puede trabajar con motores paso a paso, que son bastante conocidos en robótica, en este caso suele ser más habitual usar el controlador o driver para motores DC. Puedes conseguir información del chip L298 y de los módulos en los datasheets de los fabricantes, como el de STMicroelectronics de este enlace. Si quieres ver un datasheet del módulo concreto, y no solo del chip, puedes descargar este otro PDF del Handsontec L298N.

Pero a grandes rasgos, un L298N es un driver de tipo H-bridge que permite el control de velocidad y dirección de giro de motores de corriente continua. También se puede usar con motores paso a paso de forma sencilla gracias a los 2 H-bridge que implementa. Es decir, un puente en H, lo que significa que está formado por 4 transistores que van a permitir invertir el sentido de la corriente para que el rotor del motor pueda girar en uno u otro sentido según queramos. Eso es una ventaja frente a los controladores que solo permiten controlar la velocidad de giro (RPM) controlando únicamente el valor de la tensión de alimentación.

El L298N puede trabajar con varios voltajes, desde los 3v a los 35v, y a una intensidad de 2A. Esto es lo que realmente determinará el rendimiento o velocidad de giro del motor. Hay que tener en cuenta que la electrónica que consume el módulo suele consumir en torno a los 3v, por lo que el motor va a recibir siempre 3v menos de la alimentación a la que lo estemos alimentando. Es un consumo algo elevado, de hecho tiene un elemento de alta potencia que necesita de un disipador como podéis ver en la imagen.

Para controlar la velocidad, se puede hacer algo inverso a lo que hacíamos con el LM35, en este caso, en vez de obtener una tensión determinada a la salida y tener que converrtirla en grados, aquí será todo lo contrario. Alimentamos al driver con una tensión menor o mayor para obtener un giro más rápido o más lento. Además, el módulo L298N permite alimentar también la placa Arduino a 5v siempre y cuando estemos alimentando el driver con al menos 12v de tensión.

Integración con Arduino

diagrama circuito de l298n con Arduino

Existen multitud de proyectos con los que puedes usar este módulo L298N. De hecho, simplemente puedes imaginar todo lo que podrías hacer con él y poner manos a la obra. Por ejemplo, un ejemplo sencillo sería el control de dos motores de corriente continua como se puede apreciar en el diagrama anterior realizado con Fritzing.

Antes de trabajar con el L298N debemos tener en cuenta que la entrada del módulo o Vin admite tensiones entre 3v y 35v y que lo debemos conectar también a tierra o GND, como se aprecia en la imagen con el cable rojo y negro respectivamente. Una vez conectado a la alimentación, lo siguiente es conectar el motor o los dos motores que acepta para controlar simultáneamente. Esto es imple, solo debes conectar los dos bornes del motor a la ficha de conexión que tiene el módulo a cada lado.

Y ahora viene quizás lo más complicado, y es conectar las conexiones del módulo o pines a los de Arduino de forma adecuada. Recuerda que si el jumper o puente regulador del módulo se encuentra cerrado, es decir, puesto, se activa el regulador de tensión del módulo y se tiene una salida de 5v que puedes usar para alimentar la placa Arduino. En cambio, si quitas el jumper desactivas el regulador y necesitas alimentar Arduino de forma independiente. ¡Ojo! Porque el jumper solo puede estar puesto hasta tensiones de 12v, para más de eso debes de retirarlo para no dañar el módulo…

Puedes apreciar que hay 3 conexiones por cada motor. Las marcadas como IN1 a IN4 son las que controlas los motores A y B. Si no tienes uno de los motores conectado porque solo te hace falta uno, entonces no tendrás que ponerlas todas. Los jumpers que hay a cada lado de esas conexiones para cada motor son ENA y ENB, es decir, para activar el motor A y B que deben estar si queremos que funcionen ambos motores.

Para el motor A (sería lo mismo para B), debemos tener conectados IN1 e IN2 que van a controlar el sentido de giro. Si IN1 está en HIGH e IN2 en LOW, el motor gira en un sentido, y si están en LOW y HIGH, gira en el otro. Para controlar la velocidad de giro debes quitar los jumpers INA o INB y usar los pines que aparecen para conectarlo a PWM de Arduino, de modo que si le damos un valor 0 a 255 obtenemos una velocidad baja o más alta respectivamente.

En cuanto a la programación, también es sencilla en Arduino IDE. Por ejemplo, un código sería:

<pre>// Motor A
int ENA = 10;
int IN1 = 9;
int IN2 = 8;

// Motor B
int ENB = 5;
int IN3 = 7;
int IN4 = 6;

void setup ()
{
 // Declaramos todos los pines como salidas
 pinMode (ENA, OUTPUT);
 pinMode (ENB, OUTPUT);
 pinMode (IN1, OUTPUT);
 pinMode (IN2, OUTPUT);
 pinMode (IN3, OUTPUT);
 pinMode (IN4, OUTPUT);
}
//Mover los motores a pleno rendimiento (255), si quieres bajar la velocidad puedes reducir el valor hasta la mínima que son 0 (parados)</pre>
<pre>//Para mover los motores en sentido de giro contrario, cambia IN1 a LOW e IN2 a HIGH

void Adelante ()
{
 //Direccion motor A
 digitalWrite (IN1, HIGH);
 digitalWrite (IN2, LOW);
 analogWrite (ENA, 255); //Velocidad motor A
 //Direccion motor B
 digitalWrite (IN3, HIGH);
 digitalWrite (IN4, LOW);
 analogWrite (ENB, 255); //Velocidad motor B
}</pre>

El contenido del artículo se adhiere a nuestros principios de ética editorial. Para notificar un error pincha aquí.

Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.