Puente H de motores con L9110S

La placa L9110S está diseñada para que los microcontroladores o circuitos lógicos puedan controlar con sencillez motores de corriente continua.

La tensión de alimentación para los motores puede variar de 2,5 a 12 V.

El circuito tiene dos entradas: una que puesta en ALTO hará que el motor avance, y una que puesta en ALTO hará que retroceda. Si se desea que el motor esté detenido, ambas entradas deben estar en el mismo valor: las dos en estado BAJO (LOW), o ambas en estado alto (HIGH). La placa tiene dos salidas, con bornera, que se conectan directamente al motor.

Las entradas que no se conectan a un circuito son tomadas como nivel BAJO (L, o Low) sin que ingrese ruido. Con un nivel ALTO (H, o HIGH), la corriente en esa entrada será de alrededor de 1 mA. El nivel de tensión para que el chip detecte la entrada en estado lógico BAJO o L es como máximo de 0,7 V.

La corriente del motor se puede mantener constantemente desde 0,75 hasta 0,8 A (750 a 800 mA), y el circuito soporta picos de 1,5 a 2 A.

La hoja de datos ofrece una lista de los valores lógicos de las entradas y salidas.

Esta tabla se puede ampliar para situaciones no típicas. Si sólo hay una entrada en el nivel H y la otra está en nivel L, el motor gira. Pero si ambas entradas están en H, o ambas entradas están en L, las salidas están en un tercer estado, o “flotante” (ningún voltaje), y no ambas en 0 volt, o “L”, como se muestra en la tabla.

Diagrama de conexiones

Ejemplo práctico para controlar un robot

Ejemplo de programa para Arduino: prueba de movimientos

/*
L9110 motor driver controlando 2 motores CC
*/

const int AIA = 6; // (pwm) pin 6 conectado a pin A-IA
const int AIB = 5; // (pwm) pin 5 conectado a pin A-IB
const int BIA = 10; // (pwm) pin 10 conectado a pin B-IA
const int BIB = 9; // (pwm) pin 9 conectado a pin B-IB

byte velocidad = 160;
// cambie este valor (100 a 255) para controlar
// la velocidad de los motores

void setup() {
pinMode(AIA, OUTPUT); // fijar los pines como salidas
pinMode(AIB, OUTPUT);
pinMode(BIA, OUTPUT);
pinMode(BIB, OUTPUT);
}

void loop() {
izquierda();
delay(2000);
derecha();
delay(2000);
avanzar();
delay(500);
retroceder();
delay(1000);
avanzar();
delay(500);
}

void avanzar(){
analogWrite(AIA, 0);
analogWrite(AIB, velocidad);
analogWrite(BIA, 0);
analogWrite(BIB, velocidad);
}

void retroceder(){
analogWrite(AIA, velocidad);
analogWrite(AIB, 0);
analogWrite(BIA, velocidad);
analogWrite(BIB, 0);
}

void izquierda(){
analogWrite(AIA, velocidad);
analogWrite(AIB, 0);
analogWrite(BIA, 0);
analogWrite(BIB, velocidad);
}

void derecha(){
analogWrite(AIA, 0);
analogWrite(AIB, velocidad);
analogWrite(BIA, velocidad);
analogWrite(BIB, 0);
}