Puente H L293D para controlar motores

Hayas venido aquí para aprender a usar un puente H en general, el L293D en particular, o simplemente busques la manera de controlar la dirección y velocidad de un motor, estas en la página adecuada, ¡así que sigue leyendo!

¿Qué es un puente H?

Un puente H es un circuito que nos permite invertir la polaridad de un motor, permitiéndonos invertir la dirección de giro de este. Puedes visualizarlo como un set de 4 interruptores, como en la ilustración siguiente:

Dependiendo de que interruptores activemos, 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:

La mayoría de puentes H actuales se pueden comprar en forma de circuito integrado, y los interruptores suelen ser transistores, lo que nos ofrece 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»).

L293D

Puente H L293D

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

Trabajamos con el L293D porque se trata de un componente sencillo, de uso generalista y muy popular. Aquí puedes comprobar su hoja de datos, pero a continuación expongo los datos más relevantes:

  • 600mA por canal, con 1.2A de pico;
  • tiene «enable» (nos permite controlar la velocidad);
  • hasta 36V de entrada.
Diagrama de pines de L293D

Esquemático

Con la ayuda de la hoja de datos, conectamos el IC a un motor y a nuestro Arduino de la siguiente manera:

¡No olvides conectar las tierras entre ellas!
💡
¡No olvides conectar la tierra del Arduino con la tierra de la batería!

El L293D permite controlar 2 motores a la vez con esta configuración, pero nosotros solo controlaremos uno en este tutorial, por lo que el lado derecho estará casi enteramente despoblado.

Usaremos 3 pines para controlar el motor, los pines 2 y 3 para controlar la dirección y el pin 5 para controlar la velocidad. Los pines 2 y 3 controlaran los interruptores dentro del puente H para  invertir la polaridad, pero el pin 5 utilizara una señal PWM para indicar al puente H cuanto tiempo debe estar encendido por ciclo, lo cual se traduce en un voltaje más o menos alto de media en las bobinas del motor y nos permite controlar su velocidad.

Así pues, los pines 2 y 3 del Arduino irán a los pines de entrada del L293D y el pin 5 del Arduino irá al pin de enable.

Alimentaremos el circuito integrado L293D de dos maneras: la lógica del L293D la alimentaremos mediante la salida de 5V de Arduino, mientras que la alimentación de potencia, la que alimentará los motores, la conectaremos desde una batería de 9V.

Solo falta conectar los bornes del motor a las salidas del L293D y asegurarnos de que todos los componentes comparten la misma tierra.

Código

Ver en Github

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:

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.

Con el código mostrado, probamos a girar el motor en una dirección y en otra a diferentes potencias, cambiando cada 3 segundos.

Diferentes estados

Según la misma hoja de datos enlazada anteriormente, podemos escoger entre 5 estados diferentes variando nuestras salidas:

EN / Pin 5 Arduino 1A / Pin 2 Arduino 2A / Pin 3 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

Eso es todo, me gustaría saber qué proyectos tienes pensados con estos motores, ¿algo rápido y furioso?