Control de un motor de CC mediante un puente H
Utilizaremos nuestra versión económica de Arduino, con un Atmega8 montado en un protoboard, sin otros elementos adiconales, salvo el puente H y un LED indicador. La programación se hara con el entorno de Arduino, quemando el micro luego mediante el programador USBASP constuido en clase.Obviamente todos los programas y conexiones son válidas para las versiones de Arduino compatibles.
|
From AArtes Electrónicas-Control de un Motor de CC mediante Arduino y un Puente H |
Utilizaremos el circuito integrado L293D que dispone de 4 medios puente H en un encapsulado DIL de 16 pines (l293(4Half_H_Bridges).pdf). La principal comodidad que brinda el integrado designado con la D final es la de tener incluidos ya en su interior los diodos de protección, de modo que podemos utilizar cargas inductivas (motores, relays, etc.) sin temor a picos inversos de tensión y sin necesidad de diodos externos.
Obviamente, puede utilizarse la versión sin la letra D final, más económica, pero habrá que agregar en forma externa los 4 diodos por motor necesarios para proteger el integrado.
Las características principales de este integrado son:
Tensión de alimentación del motor (Vcc2 = 4.5 a 36 V) separada de la alimentación de la parte logica (Vcc1=5V).
Corriente nominal permanente de hasta de 600 mA y picos de hasta 1.2 Amperes (la versión con D final)
Protección interna contra cortocircuitos y sobrecalentamiento
En este caso utilizaremos sólo la mitad izquierda del integrado (dos medios puentes, es decir configuraremos un puente H completo) como se ve en el gráfico,
Con esta configuración realizaremos cuatro ejercicios distintos:
Control de sentido de giro y detención con solo dos pines del micro usando "Fast Stop"
Control de sentido de giro y detención con tres pines del micro, mediante el pin Enable del Puente H ("Free Wheel")
Control de velocidad por PWM mediante parámetros fijos por programa
Control de velocidad por PWM en base a la lectura analógica de un potenciómetro
En cuanto al micro, debe tenerse en cuenta que la denominción adoptada para los pines es la correspondiente al Arduino, de modo que para cablear, es necesario utilizar la siguiente equivalencia entre pines del Arduino y Atmega8:
En este caso, el pin Enable del integrado LD293D se conectará directamente a +Vcc1 (alimentación de 5V del micro y la lógica), de modo que el puente permanecerá constantemente habilitado. La alimentación del motor Vcc2 (12 V en nuestro motor) se ingresará por el pin8 del puente H. Los pines de entrada 2 y 7 del puente H serán controlados por los pines 7 y 8 del Arduino respectivamente.
From Artes Electrónicas-Control de un Motor de CC mediante Arduino y un Puente H |
El programa que se utilizará para el control, es el siguiente:
/* Motor_F_R Hace girar un motor de CC hacia un lado y el otro alternativamente mediante un Puenta H conectado a los pines digitales 7 y 8 (FAST STOP) El pin Enable del puente H está directamente conectado a +V (no es controlado) Agosto 2009 - Miguel Grassi Ultima actualizacion, Junio 2010 www.miguelgrassi.com.ar */ int ledPin = 13; // LED conectado al pin digital 13 int M1_A = 7; // Motor 1 entrada A int M1_B = 8; // Motor 1 entrada B void setup() {// Inicializa los pines de salida pinMode(ledPin, OUTPUT); pinMode( M1_A, OUTPUT); pinMode( M1_B, OUTPUT); } void loop(){ digitalWrite(ledPin, HIGH); // enciende el led digitalWrite( M1_A, HIGH); // Valores ALTO en A y BAJO en B simultáneamente digitalWrite( M1_B, LOW); // hacen girar el motor 1 hacia ADELANTE delay(3000); // Espera unos segundos digitalWrite(ledPin, LOW); // apaga el led digitalWrite( M1_A, LOW); // Un valor IGUAL en A y en B simultáneamente digitalWrite( M1_B, LOW); // DETIENEN con fuerza el el motor 1 (FAST STOP) delay(1000); // Espera un segundo digitalWrite(ledPin, HIGH); // enciende el led digitalWrite( M1_A, LOW); // Valores BAJO en A y ALTO en B simultáneamente digitalWrite( M1_B, HIGH); // hacen girar el motor 1 hacia ATRAS delay(3000); // Espera unos segundos digitalWrite( M1_A, LOW); // Un valor IGUAL en A y en B simultáneamente digitalWrite( M1_B, LOW); // DETIENEN con fuerza el el motor 1 (FAST STOP) delay(1000); // Espera un segundo digitalWrite(ledPin, LOW); // apaga el led }
En el siguiente video del motor controlado con el ejemplo anterior puede observarse el "Fast Stop":
Se quitará la conecxión directa del pin Enable del puente H a =V y se la reemplazará con una conxión al pin digital 9 del Arduino, como se ve en la siguiente imagen:
From Artes Electrónicas-Control de un Motor de CC mediante Arduino y un Puente H |
El programa correspondiente, es el siguiente:
/* Motor_Enable Hace girar un motor de CC hacia un lado y el otro alternativamente mediante un Puenta H conectado a los pines digitales 7 y 8 controlando el encendido con el pin Enable del puente H conectado al pin digital 9 Agosto 2009 - Miguel Grassi www.miguelgrassi.com.ar */ int ledPin = 13; // LED conectado al pin digital 13 int M1_A = 7; // Motor 1 entrada A int M1_B = 8; // Motor 1 entrada B int M1_Enable = 9; // Motor 1 Enable void setup() {// Inicializa los pines de salida pinMode(ledPin, OUTPUT); pinMode( M1_A, OUTPUT); pinMode( M1_B, OUTPUT); pinMode(M1_Enable, OUTPUT); } void loop(){ digitalWrite(ledPin, HIGH); // enciende el led digitalWrite( M1_A, HIGH); // Valores ALTO en A y BAJO en B simulaneamente digitalWrite( M1_B, LOW); // hacen girar el motor 1 hacia ADELANTE digitalWrite(M1_Enable, HIGH); // Solo si el pin Enable del puente H esta habilitado delay(3000); // Espera unos segundos digitalWrite(M1_Enable, LOW); // deshabilita el pin Enable del puente H (el motor se detiene ) digitalWrite(ledPin, LOW); // apaga el led delay(1000); // Espera un segundo digitalWrite(ledPin, HIGH); // enciende el led digitalWrite( M1_A, LOW); // Valores BAJO en A y ALTO en B simultaneamente digitalWrite( M1_B, HIGH); // hacen girar el motor 1 hacia ATRAS digitalWrite(M1_Enable, HIGH); // Solo si el pin Enable del puente H esta habilitado delay(3000); // Espera unos segundos digitalWrite(M1_Enable, LOW); // deshabilita el pin Enable del puente H (el motor se detiene ) digitalWrite(ledPin, LOW); // apaga el led delay(1000); // Espera un segundo }
En el siguiente video del motor controlado con el código anterior puede observarse como el eje sigue girando libre luego de cortarse la alimentación (después de apagarse el led)
|
Con el mismo Hradware y conexionado del ejemplo anterior, reemplazar el código por el siguiente:
/* Motor_PWM Hace girar un motor de CC hacia un lado y el otro alternativamente mediante un Puenta H conectado a los pines digitales 7 y 8 controlando la velocidad por PWM sobre el pin Enable del puente H Agosto 2009 - Miguel Grassi www.miguelgrassi.com.ar */ int ledPin = 13; // LED conectado al pin digital 13 int M1_A = 7; // Motor 1 entrada A int M1_B = 8; // Motor 1 entrada B int M1_Enable = 9; // Motor 1 Enable void setup() {// Inicializa los pines de salida pinMode(ledPin, OUTPUT); pinMode( M1_A, OUTPUT); pinMode( M1_B, OUTPUT); pinMode(M1_Enable, OUTPUT); } void loop(){ digitalWrite(ledPin, HIGH); // enciende el led digitalWrite( M1_A, HIGH); // Valores ALTO en A y BAJO en B simulaneamente digitalWrite( M1_B, LOW); // hacen girar el motor 1 hacia ADELANTE analogWrite(M1_Enable, 20); // a velocidad muy lenta delay(3000); // Espera unos segundos digitalWrite(M1_Enable, LOW); //deshabilita el pin Enable del puente H (el motor se detiene ) digitalWrite(ledPin, LOW); // apaga el led delay(1000); // Espera un segundo digitalWrite(ledPin, HIGH); // enciende el led digitalWrite( M1_A, LOW); // Valores BAJO en A y ALTO en B simultaneamente digitalWrite( M1_B, HIGH); // hacen girar el motor 1 hacia ATRAS analogWrite(M1_Enable, 128); // a una velocidad moderada (50%) delay(3000); // Espera unos segundos digitalWrite(M1_Enable, LOW); //deshabilita el pin Enable del puente H (el motor se detiene ) digitalWrite(ledPin, LOW); // apaga el led delay(1000); // Espera un segundo }
El video correspondiente es el siguiente:
![]() |
From Artes Electrónicas-Control de un Motor de CC mediante Arduino y un Puente H |
En etse caso, se agregará un portenciómetro conectado a la entrada analogica 5 del Arduino, como muestra la foto:
From Artes Electrónicas-Control de un Motor de CC mediante Arduino y un Puente H |
El código correspondiente a este ejemplo es el siguiente:
/* Motor_PWM_Pote Hace girar un motor de CC mediante un Puenta H conectado a los pines digitales 7 y 8 controlando la velocidad por PWM sobre el pin Enable del puente H en base a la lectura de un potenciometro conectado al pin analogico 5 Agosto 2009 - Miguel Grassi Ultima revision: Junio 2010 www.miguelgrassi.com.ar */ int ledPin = 13; // LED conectado al pin digital 13 int M1_A = 7; // Motor 1 entrada A int M1_B = 8; // Motor 1 entrada B int M1_Enable = 9; // Motor 1 Enable int Pote = 5; // Lectura del Potenciometro void setup() {// Inicializa los pines de salida pinMode(ledPin, OUTPUT); pinMode( M1_A, OUTPUT); pinMode( M1_B, OUTPUT); pinMode(M1_Enable, OUTPUT); pinMode(Pote, INPUT); } void loop(){ digitalWrite(ledPin, HIGH); // enciende el led digitalWrite( M1_A, HIGH); // Valores ALTO en A y BAJO en B simulaneamente digitalWrite( M1_B, LOW); // hacen girar el motor 1 hacia ADELANTE int valorPote = analogRead(Pote); // Lee el valor del potenciometro int valorVeloc = map(valorPote, 0, 1023, 0, 255); //Convierte un valor entre 0 y 1023 al rango 0-255 analogWrite(M1_Enable,valorVeloc); // y establece la velocidad del motor con ese valor }
Por ultimo, el video del funcionamiento:
![]() |
From Artes Electrónicas-Control de un Motor de CC mediante Arduino y un Puente H |