Un "Puente H" nos permite hacer funcionar un motor en dos sentidos de giro y se utilizan al ser los microcontroladores incapaces de ofrecer una carga elevada de corriente. El funcionamiento de los mismos se puede resumir a partir de la siguiente figura.
En el siguiente link puedes encontrar su "datasheet". El driver tiene los pines como se mira en la siguiente figura.
En la figura observamos cuatro switches, cada uno conectado al motor y los mismos conectados a una fuente de alimentación. Podemos dividir los mismos en pares, siendo el primer par "S1 / S4" y el segundo "S2 / S3". En resumen tenemos dos movimientos:
# Al activar el primer par (S1 / S4): El motor se moverá en dirección de las agujas del reloj.
# Al activar el segundo par (S2 / S3): El motor se moverá en dirección contraria de las agujas del reloj.
En el primer caso, al cerrar circuito S1 y S4 la fuente "Vin" lleva corriente en la secuencia "S1 - M - S4". En el segundo caso, al cerrar circuito S2 y S3 la fuente "Vin" lleva corriente en la secuencia "S3 - M - S2".
Usando este principio, podemos visualizar lo mismo usando transistores. En este caso, se añaden diodos de protección que completan el circuito.
Como se observa, es posible construir un circuito por medio de transistores para poder manejar motores por medio de nuestro microcontrolador, pero hay drivers comerciales que pueden simplificar y mejorar el mismo circuito añadiendo un pin "Enable" y un Puente H adicional. Este pin "Enable" nos permite realizar con facilidad control de velocidad de los motores usando una señal "PWM".
DRIVER L298N
En el medio comercial encontramos el driver de manejo de motores DC y Paso a paso más usado, que es el L298N.
Las características principales del driver son:
# Voltaje de alimentación máximo: 46V.
# Corriente máxima total: 4A.
# Voltaje lógico máximo: 7V.
# Enable A: Activa Out 1 y Out 2.
# Enable B: Activa Out 3 y Out 4.
# Compatibilidad: Motores DC (2) o un motor Paso a Paso bipolar.
En cuanto a los pines físicos del driver, tenemos las siguientes características:
# El jumper en "A Enable" y "B Enable" activa permanentemente los dos puentes H.
# El jumper en "5V Enable" habilita la conversión de la alimentación externa en 5V.
# In 1 e In 2 corresponden a Out 1 y Out 2.
# In 3 e In 4 corresponden a Out 3 y Out 4
CONEXIÓN DEL DRIVER L298N A DOS MOTORES DC
Para este caso utilizaremos como referencia un motor "Smart Robot Wheel" que se muestra a continuación.
Las características de este motor son las siguientes:
# Rotación sin carga a 6V: 100 RPM.
# Corriente de consumo sin carga a 6V: 70mA.
# Corriente con motor bloqueado a 3V: 580 mA.
# Torque: 300 mg - cm.
# Peso: 40g.
La conexión para esta prueba es la siguiente:
# Pin 10: Arduino UNO => In 1: Driver L298N
# Pin 9: Arduino UNO => In 2: Driver L298N
# Pin 8: Arduino UNO => In 3: Driver L298N
# Pin 7: Arduino UNO => In 4: Driver L298N
# GND: Arduino UNO => GND: Driver L298N
# Batería 9V positivo => 12V: Driver L298N
# Batería 9V negativo => GND: Driver L298N
La siguiente figura nos ilustra de una mejor manera las conexiones:
PROGRAMA DE PRUEBA DEL DRIVER L298N
En el siguiente programa básico, usaremos la conexión anterior para hacer funcionar un motor en una dirección ingresando "a" por puerto serial y en la otra colocando "b"; de la misma manera para el otro motor ingresando la letra "c" y "d". En caso de ingresar la letra "e" los dos motores se detendrán.
El programa es el siguiente:
Como resultado en pantalla obtendremos lo siguiente:
Al ingresar la letra "a".
Al ingresar la letra "b".
Al ingresar la letra "c".
Al ingresar la letra "d".
Al ingresar la letra "e".
Autor:
# Voltaje de alimentación máximo: 46V.
# Corriente máxima total: 4A.
# Voltaje lógico máximo: 7V.
# Enable A: Activa Out 1 y Out 2.
# Enable B: Activa Out 3 y Out 4.
# Compatibilidad: Motores DC (2) o un motor Paso a Paso bipolar.
En cuanto a los pines físicos del driver, tenemos las siguientes características:
# El jumper en "A Enable" y "B Enable" activa permanentemente los dos puentes H.
# El jumper en "5V Enable" habilita la conversión de la alimentación externa en 5V.
# In 1 e In 2 corresponden a Out 1 y Out 2.
# In 3 e In 4 corresponden a Out 3 y Out 4
CONEXIÓN DEL DRIVER L298N A DOS MOTORES DC
Para este caso utilizaremos como referencia un motor "Smart Robot Wheel" que se muestra a continuación.
# Rotación sin carga a 6V: 100 RPM.
# Corriente de consumo sin carga a 6V: 70mA.
# Corriente con motor bloqueado a 3V: 580 mA.
# Torque: 300 mg - cm.
# Peso: 40g.
La conexión para esta prueba es la siguiente:
# Pin 10: Arduino UNO => In 1: Driver L298N
# Pin 9: Arduino UNO => In 2: Driver L298N
# Pin 8: Arduino UNO => In 3: Driver L298N
# Pin 7: Arduino UNO => In 4: Driver L298N
# GND: Arduino UNO => GND: Driver L298N
# Batería 9V positivo => 12V: Driver L298N
# Batería 9V negativo => GND: Driver L298N
La siguiente figura nos ilustra de una mejor manera las conexiones:
PROGRAMA DE PRUEBA DEL DRIVER L298N
En el siguiente programa básico, usaremos la conexión anterior para hacer funcionar un motor en una dirección ingresando "a" por puerto serial y en la otra colocando "b"; de la misma manera para el otro motor ingresando la letra "c" y "d". En caso de ingresar la letra "e" los dos motores se detendrán.
El programa es el siguiente:
/* PROGRAMA DE PRUEBA DEL DRIVER L298N CON DOS MOTORES DC CONEXION: In1 (Driver L298N): Pin 10 (Arduino UNO) In2 (Driver L298N): Pin 9 (Arduino UNO) In3 (Driver L298N): Pin 8 (Arduino UNO) In4 (Driver L298N): Pin 7 (Arduino UNO) GND: Conectar los dos GND del Arduino UNO, driver L298N y la bateria 12V: Positivo de una batería o fuente de 9 o 12V En el siguiente programa probaremos el funcionamiento del driver L298N usando dos motores DC. Al ingresar la letra "a" por puerto serial, el motor 1 rota en direccion de las agujas del reloj; al ingresar la letra "b" lo hace en sentido contrario. El mismo principio se aplica al siguiente motor usando las letras "c" y "d". La letra "e" para los dos motores. NOTA: Los pines "Enable" deben estar habilitados en la placa del driver Autor: Renato H. http://beetlecraft.blogspot.pe/ El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera ocasionar el mal funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor */ const int in1 = 10, in2 = 9; // Pines asignados al primer motor const int in3 = 8, in4 = 7; // Pines asignados al segundo motor void setup() { Serial.begin(9600); // Configuracion del puerto serial de comunicacion pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); // Configuracion de salida de los pines del primer motor pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); // Configuracion de salida de los pines del segundo motor Serial.println("Tenemos los siguientes comandos:"); // Mensaje inicial Serial.println("Letra a: Rotacion del primer motor en sentido horario"); Serial.println("Letra b: Rotacion del primer motor en sentido antihorario"); Serial.println("Letra c: Rotacion del segundo motor en sentido horario"); Serial.println("Letra d: Rotacion del segundo motor en sentido antihorario"); Serial.println("Letra e: Detener motores"); } void loop() { if (Serial.available()) { // Verificaion que el puerto serial recibe datos delay(10); rotacion_motor(); // Rutina rotacion de motor while (Serial.available() > 0){Serial.read();} // Rutina de limpieza del buffer del puerto serial } } void rotacion_motor(){ // RUTINA DE PRUEBA DE MOTORES DC // RUTINA DE ROTACION 1 if (Serial.peek() == 'a'){ // Discriminacion de la letra correspondiente a la primera rutina Serial.println("Motor 1: Rotancion horaria"); // Indicacion por pantalla de la rotacion digitalWrite(in1, HIGH); digitalWrite(in2, LOW); // Activacion del motor 1 en sentido horario digitalWrite(in3, LOW); digitalWrite(in4, LOW); // Desactivacion del motor 2 } // RUTINA DE ROTACION 2 if (Serial.peek() == 'b'){ // Discriminacion de la letra correspondiente a la segunda rutina Serial.println("Motor 1: Rotancion antihoraria"); // Indicacion por pantalla de la rotacion digitalWrite(in1, LOW); digitalWrite(in2, HIGH); // Activacion del motor 1 en sentido horario digitalWrite(in3, LOW); digitalWrite(in4, LOW); // Desactivacion del motor 2 } // RUTINA DE ROTACION 3 if (Serial.peek() == 'c'){ // Discriminacion de la letra correspondiente a la tercera rutina Serial.println("Motor 2: Rotancion horaria"); // Indicacion por pantalla de la rotacion digitalWrite(in3, HIGH); digitalWrite(in4, LOW); // Activacion del motor 1 en sentido horario digitalWrite(in1, LOW); digitalWrite(in2, LOW); // Desactivacion del motor 2 } // RUTINA DE ROTACION 4 if (Serial.peek() == 'd'){ // Discriminacion de la letra correspondiente a la cuarta rutina Serial.println("Motor 2: Rotancion antihoraria"); // Indicacion por pantalla de la rotacion digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // Activacion del motor 1 en sentido horario digitalWrite(in1, LOW); digitalWrite(in2, LOW); // Desactivacion del motor 2 } // RUTINA DE ROTACION 5 if (Serial.peek() == 'e'){ // Discriminacion de la letra correspondiente a la quinta rutina Serial.println("Detener motores"); // Indicacion por pantalla de la rotacion digitalWrite(in1, LOW); digitalWrite(in2, LOW); // Activacion del motor 1 en sentido horario digitalWrite(in3, LOW); digitalWrite(in4, LOW); // Desactivacion del motor 2 } }
Como resultado en pantalla obtendremos lo siguiente:
Al ingresar la letra "a".
Al ingresar la letra "b".
Al ingresar la letra "c".
Al ingresar la letra "d".
Al ingresar la letra "e".
Autor:
Muy bueno el tutorial.
ResponderEliminarMuchas gracias.