L298N

La tarjeta (o módulo) controladora de motores L298N permite controlar la velocidad y la dirección de dos motores de corriente continua o un motor paso a paso de una forma muy sencilla, gracias a los dos puentes en “H” incorporados. El módulo L298N es muy económico, robusto y fácil de emplear.

El nombre del módulo se debe al nombre del circuito integrado y se encuentra posicionado verticalmente sobre el disipador de aluminio pintado de color negro.

El módulo L298N está basado en un puente-H (o H-bridge en inglés). Esto es principalmente una configuración electrónica formada por cuatro transistores permitiendo invertir el sentido de la corriente y por tanto el sentido de giro del motor.

El rango de voltajes en el que trabaja esta tarjeta va desde los 3V hasta 35V, y una intensidad de hasta 2A.

El módulo L298N es de baja eficiencia. La electrónica del módulo consume aproximadamente entre dos y tres voltios por lo que los motores recibirán hasta tres voltios menos. Esto es algo a considerar en el momento de seleccionar unas baterías.

Otra característica que hace interesante este módulo es su regulador de tensión LM7805. Dicho regulador permite obtener una tensión de 5V ideal para alimentar a nuestro Arduino cuando la alimentación es de 12V.

El L298N incorpora ciertas protecciones contra los fenómenos típicos que suelen producirse al en los motores de corriente continua. Dispone de protecciones contra sobre intensidad, sobre temperatura, y diodos de protección contra corrientes inducidas (diodos flyback).

El controlador L298N es ampliamente usado en proyectos de electrónica y robótica, por su sencillez de uso, bajo coste, y excelente relación calidad – precio. Además, permite alimentar una gran variedad de motores eléctricos de hasta 35V lo que lo hace muy versátil.

Tarjeta o módulo LN298 para controlar motores DC o paso a paso

CONEXIONES Y PINES
Alimentación

Vin: Si miramos el módulo veremos que tiene un Vin. Esta es la entrada de tensión y admite tensiones comprendidas entre los 3V y 35V.
GND: El GND es el cable de conexión a tierra. Es recomendable, interconectar el GND de Arduino con el GND del módulo, sobretodo cuándo se empleen fuentes de alimentación distintas.

Jumper

Si miramos la placa desde arriba el módulo veremos tres pines muy especiales que se llama “jumpers”.

Los jumpers EN

Estos jumpers ponen al ENA y ENB a un nivel lógico alto. Si esos jumpers se quitan, las salidas OUT1, OUT2, OUT3 y OUT4 estarán inhabilitadas. Lo que si se podrá por ejemplo es alimentar a un Arduino cuándo el otro jumper está activado.
Con estos jumpers puestos, se habilitan las salidas de los motores por defecto. Luego, lo único posible será controlar el sentido de giro del motor.
Para controlar la velocidad del motor es necesario quitarlos y guardarlos en algún lugar que no se puedan perder, puesto que los valores lógicos se darán desde Arduino.

El jumper de selección 5V

Este es el llamado pin de selección de 5V. Si el jumper está cerrado, con una tensión de alimentación de hasta 12V máxima, el regulador de tensión se activa obteniendo una salida de 5V que se puede emplear, por ejemplo, para alimentar Arduino. Es decir, permite alimentar a un Arduino de forma muy sencilla, con sólo alimentar el LN298.
Si el jumper está abierto (sin él) entonces el regulador está desactivado. Esto es interesante cuándo trabajamos con voltajes superiores a los 12V. Por lo que será necesaria alimentar con 5V para que funcione el módulo. Sin embargo, hay que tener cuidado en no alimentar el módulo cuando el jumper está puesto.
El regulador sólo funciona con tensiones de hasta 12V en Vin. Si se superan estos valores, entonces es necesario quitar el jumper y alimentar la parte lógica del módulo con una fuente independiente. Finalmente, como resumen:

  • Jumper cerrado: El voltaje de salida del motor va de los 6V a los 12V y un voltaje de salida lógico de 5V.
  • Jumper abierto: El voltaje de salida del motor va de los 12V a los 35V y necesita ser alimentado con una entrada de 5V.

Conexiones para un motor DC

Las salidas A y B son la alimentación de los motores DC. Hay que tener en cuenta la polaridad de las conexiones para no hacer que un motor gire en un sentido y el otro, en otro sentido. Es decir, hay que respetar la polaridad para que los motores giren de forma deseada. Para ello, es deseable, que los colores de los cables de cada motor sean distintos para poder distinguir la polaridad fácilmente.

Partes principales del módulo L298N

Pines IN

Luego veremos que existen los pines IN. Estos pines reciben la información procedente de Arduino para controlar la velocidad y sentido de giro de los motores. Son dos pines IN por motor, es decir, el IN1 e IN2 para el motor A y los otros dos para el motor B. Los primeros tres pines de la derecha sirven para controlar el motor B y los otros tres pines de la izquierda sirven para controlar el motor A.

  • IN1 = HIGH – IN2 = LOW — En un sentido
  • IN1 = LOW – IN2 = HIGH — En sentido contrario
  • IN1 = LOW – IN2 = LOW — Parado

Pines EN

Estos se alimentan con el PWM de Arduino de forma que recibe señales comprendidas entre 0 y 255. Si el jumper no está colocado, los motores siempre se moverán a la misma velocidad.

Configuración de una alimentación de 12V (máxima) con dos fases, sentido sin control de la velocidad de giro

En el caso de querer usar ambas fases (dos motores), y poder cambiar el sentido de giro, y alimentar desde una fuente de alimentación un máximo de 12V, el esquema de conexión a Arduino sería el siguiente:

Observamos que los jumperes (en amarillo) están conectados.

Ejemplo sencillo de código

Una vez realizada la conexión anterior, con este simple sketch podremos controlar la velocidad las ruedas de un solo motor cada dos segundos, en un solo sentido de giro.

const int pinIN1 = 8; // Cualquier pin digital
const int pinIN2 = 9; // Cualquier pin digital
const int pinENA = 7; // Buscar los pines PWM de Arduino. 
const int rpm = 255; //velocidad de giro máxima puesto que la velocidad del 100% equivale a 255. 

void setup()
{
	pinMode(pinIN1, OUTPUT);
	pinMode(pinIN2, OUTPUT);
	pinMode(pinENA, OUTPUT);
}

void loop()
{
	digitalWrite(pinIN1, HIGH);
	digitalWrite(pinIN2, LOW);
	analogWrite(pinENA, rpm);
	delay(2000);
}

Librería para el L298N

Hay una librería disponible en el repositorio de Arduino de Andrea Lombardo, compatible con todas las arquitecturas de Arduino que facilita el control de los motores de corriente continua. Se denomina igual que la misma tarjeta, es decir, L298N.
Las librerías oficiales muchas veces tienen en cuenta cosas que nosotros ni nos imaginamos. Aunque un exceso de librerías tampoco es bueno, hay librerías que pueden ayudar a mejorar el código y el funcionamiento del dispositivo.

Primero hay que indicar si disponemos de uno o dos motores.

  • Un motor: #include <L298N.h> 
  • Dos motores: #include <L298NX2.h>

Importación

Podemos importar la libraría directamente del IDE de Arduino. Para ello, vamos a Sketch Include Library L298N .

Instanciar el módulo

Para controlar un motor lo primero es crear una instancia de la librería:

// Permitiendo el control de velocidad

L298N myMotor(EN, IN1, IN2);

// Sin conrol de velocidad, con el jumper en su lugar correcto

L298N myMotor(IN1, IN2);

Como sabemos EN = ENA o ENB y se conectan al PWM de Arduino. Luego, IN1 o IN2 se conectan a los pines digitales permitiendo controlar el sentido del motor. 

Para controlar dos motores usamos la variante L298NX2. Con control de la velocidad de rotación: 

                         motor A          motor B
                |------------------| |----------------|
L298NX2 myMotors(EN_A, IN1_A, IN2_A, EN_B, IN1_B, IN2_B);

// Sin control de la velocidad de rotación 

                    motor A       motor B
                 |------------||------------|
L298NX2 myMotors(IN1_A, IN2_A, IN1_B, IN2_B);

Métodos para la librería L298N

Una función o método es un fragmento de código independiente que es parte de la funcionalidad que le conferimos a un objeto. Los métodos pueden o no tener parámetros, es decir, valores que el objeto recoge como argumentos. 

MétodoParámetroDescripción
setSpeedunsigned short pwmValEstablece el valor PWM utilizado para regular la velocidad del motor y comprende entre 0 y 255.
getSpeedSin parámetroObtiene la velocidad definida anteriormente.
forwardSin parámetroHace girar el motor hacia delante (cuidado con las conexiones). 
forwardForunsigned long delayHace girar el motor hacia atrás durante un tiempo especificado mediante delays. (cuidado con las conexiones). 
forwardForunsigned long delay, CallBackFunction callbackHace girar el motor hacia delante durante un tiempo especificado mediante un delay, después de ejecutar una función callback. 
backwardSin parámetroHace girar el motor hacia atrás (cuidado con las conexiones).
backwardForunsigned long delayHace girar el motor hacia atrás durante un tiempo especificado mediante un delay. 
backwardForunsigned long delay, CallBackFunction callbackHace girar el motor hacia atrás durante un tiempo especificado mediante un delay, después de ejecutar una función callback.
runuint8_t directionMover el motor. Para especificar la dirección usa lo siguiente: L298N::FORWARDL298N::BACKWARD ó L298N::STOP.
runForunsigned long delay, L298N::Direction directionComo el caso de forwardFor ó backwardFor pero más flexible. Para especificar la dirección usar lo siguiente:  L298N::FORWARDL298N::BACKWARD ó L298N::STOP.
runForunsigned long delay, L298N::Direction direction, CallBackFunction callbackComo el caso anterior con la habilidad de ejecutar una función “callback”. 
stopSin parámetroPara el motor. 
resetSin parámetroUsado para reconectar los movimientos del motor después de usar las funciones runForforwardForó backwardFor methods.
isMovingSin parámetroDevuelve una indicación booleana indicando si el motor está funcionando o no.
getDirectionSin parámetroDevuelve la dirección actual: L298N::Direction.

La dirección la conocemos con:

ConstanteConstante
L298N::FORWARD0
L298N::BACKWARD1
L298N::STOP-1
Métodos para la librería L298N

El método L298NX2 

El método L298NX2 tiene los mismos métodos que el L298N identificados por un sufijo A o B para cada motor. Por ejemplo, setSpeed para el motor A es setSpeedA y setSpeedB para el motor B. Sin embargo, hay métodos sin sufijo, lo que afectará a ambos motores: 

MétodoParámetro
setSpeedunsigned short pwmVal
forwardSin parámetro
forwardForunsigned long delay, CallBackFunction callback
forwardForunsigned long delay
backwardSin parámetro
backwardForunsigned long delay, CallBackFunction callback
backwardForunsigned long delay
runuint8_t direction
runForunsigned long delay, L298N::Direction direction
runForunsigned long delay, L298N::Direction direction, CallBackFunction callback
stopSin parámetro
resetSin parámetro
Método L298NX2 

Ejemplos

Se pueden encontrar algunos ejemplos en el mismo IDE de Arduino, Menu -> File -> Example -> L298N. El esquema de cableado se encuentra en la carpeta de “schema”. 

Finalmente podéis aprender a calcular las rpm de un motor en el siguiente enlace.

Leave a Comment

Your email address will not be published. Required fields are marked *

Información básica sobre protección de datos
Responsable Francisco de Asís Benavente Delgado +info...
Finalidad Gestionar y moderar tus comentarios. +info...
Legitimación Consentimiento del interesado. +info...
Destinatarios No se cederán datos a terceros, salvo obligación legal +info...
Derechos Acceder, rectificar y cancelar los datos, así como otros derechos. +info...
Información adicional Puedes consultar la información adicional y detallada sobre protección de datos en nuestra página de política de privacidad.