Módulo driver puente H L298N con Arduino

Hace unos días hablamos sobre cómo controlar tanto la dirección como la velocidad de un motor de corriente continua con un circuito integrado L293D. Hoy vamos a echarle un vistazo a otra solución muy popular para conseguir el mismo objetivo, el circuito integrado L298N, que viene normalmente en un módulo para su uso con Arduino:

💡
En calidad de Afiliado de Amazon, obtengo ingresos por las compras adscritas que cumplen los requisitos aplicables

Se trata también de un puente H, y la diferencia con el L293D explorado anteriormente radican solo en un par de detalles:

  • Se trata de un módulo en lugar de un chip, por lo que su montaje es más amable;
  • es capaz de suministrar más corriente (hasta 2A) y potencia (hasta 25W) a los motores.

Tanto si te encuentras más cómodo trabajando con un módulo como si necesitas esa potencia superior, el módulo L298N es una buena elección.

Aquí te dejo un enlace a la hoja de datos del L298N, que es el corazón del módulo.

¿Qué es un puente H?

Un puente H es un circuito que nos permite controlar la dirección del flujo de corriente a través de un motor, permitiéndonos controlar también la dirección de giro de este. Puedes visualizarlo como un grupo de 4 interruptores, como en la ilustración siguiente:

Cerrando unos interruptores u otros, la corriente fluirá en una dirección o en otra a través del motor, lo que hará que gire en un sentido o en el contrario:

Hoy en día, la mayoría de puentes H actuales se pueden comprar como circuito integrado, donde los interruptores son transistores. Nos ofrecen la posibilidad de controlar una potencia grande en el motor mediante señales de control de una potencia mucho más reducida.

Así pues, en resumen, los puentes H son componentes que nos ofrecen las siguientes posibilidades:

  • Habilidad para invertir el sentido de giro de un motor;
  • habilidad para utilizar una fuente de alimentación de mayor frecuencia para el motor que para la lógica (normalmente el Arduino que controla el circuito);
  • habilidad para controlar la potencia del motor (siempre que tenga una entrada «enable»).

L298N

Eso dicho, puesto que el L298N se trata de un módulo, tiene un par de peculiaridades, vamos a inspeccionarlo a fondo:

Atención al saltador que activa el regulador de voltaje.

Lo primero y más importante que debemos tener en cuenta es que este módulo cuenta con un regulador de voltaje que utiliza para alimentar su parte lógica a partir de la alimentación de potencia, sin embargo, este regulador no debe usarse si el voltaje de potencia es superior a los 12V y, dado el caso, debería desconectarse el saltador que activa el regulador y se debería usar la entrada de voltaje de lógica para suministrar 5V desde otra fuente. El regulador también debe estar desconectado en el caso de que el voltaje de potencia sea inferior a los 5V, y se deberá suministrar este voltaje de forma independiente, como en el caso anterior.

Etiquetado de puertos del módulo L298N.

En cuanto al resto de conexiones, es bastante similar al L293D: tenemos 2 salidas de potencia por lado en las que podemos conectar sendos motores de corriente continua (A1 y A2 para un motor, B1 y B2 para el otro), entradas de 1 a 4 para controlar la dirección de giro del motor, o el freno, (IN1, IN2, IN3 e IN4, señalados como IN1...4 en el esquema superior) y 2 pines de «enable» (Enable_A y Enable_B) que sirven para dar corriente o no al motor. Alimentando estos pines con una señal PWM somos capaces de ajustar su velocidad, pero debemos quitar primero los saltadores que trae de serie y que los colocan siempre en activo.

Esquemático

Conectamos el Arduino, nuestra fuente de potencia (una batería de 9V) y el módulo L298N de la siguiente manera para controlar un motor:

💡
¡No olvides conectar la tierra del Arduino con la tierra de la batería!

Observa como, visto que la fuente de potencia que utilizamos tiene 9V, que es menor de 12V pero mayor que 5V, dejamos el saltador del regulador de voltaje conectado para que el módulo suministre los 5V que necesita su lógica de forma interna. Nos limitamos a controlar las entradas IN1 e IN2 para elegir la dirección de giro y el ENABLE_A para controlar la velocidad mediante un PIN que sea capaz de usar PWM.

Código

Con tan solo cambiar el valor de los pines 2 y 3 de alto a bajo y viceversa, podemos controlar la dirección del motor. La velocidad la controlamos mediante el pin 5:

Ver en Github
void setup(){
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(5,OUTPUT);
}

void loop(){
  //adelante a tope
  analogWrite(5,200);
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  delay(3000);
  //atras a media velocidad
  analogWrite(5,100);
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  delay(3000);
  //adelante a media velocidad
  analogWrite(5,100);
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  delay(3000);
  //atras a tope
  analogWrite(5,200);
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  delay(3000);
}
Probamos diferentes combinaciones.

Probamos diferentes velocidades y sentidos de giro cada 3 segundos.

Funciones disponibles

Con este código, podemos acceder a las siguientes funciones:

ENABLE_A / Pin 5 Arduino IN1 / Pin 3 Arduino IN2 / Pin 2 Arduino Función
ALTO BAJO ALTO Giro antihorario
ALTO ALTO BAJO Giro horario
ALTO BAJO BAJO Parada rápida
ALTO ALTO ALTO Parada rápida
BAJO
Da igual Da igual Parada sin frenado

Espero que te haya podido ayudar y que todo vaya sobre ruedas a partir de ahora ;)