Control de Motor DC con Puente H
- publicado por Ing. Jesús Martínez
- Fecha junio 14, 2023
Contenido:
Introducción:
El control de motores de corriente continua es una habilidad fundamental en la realización de gran cantidad de proyectos de electrónica, esto debido a que puede ser aplicado en juguetes, robots, sistemas industriales y médicos. Uno de los métodos más comunes y versátiles para controlar un motor de corriente directa es mediante un puente H.
El puente H es un circuito electrónico que permite invertir la dirección de la corriente que fluye a través de un motor de DC. Esto se logra utilizando una combinación de transistores, diodos y una fuente de alimentación. Con el puente H podemos, podemos controlar tanto la velocidad como la dirección de rotación del eje del motor de DC, esto nos brinda una gran flexibilidad en nuestros proyectos.
En este articulo abordaremos el control de motores DC mediante un puente H y lo acompañaremos del microcontrolador Arduino para procesar la señal de PWM (de esta hablaremos más adelante).
Materiales:
- Arduino UNO
- Motor de DC 12V
- Protoboard
- Potenciómetro 10K
- Puente H L293D
- Fuente de poder 12V 1A
¿Qué es el PWM?
El PWM es una técnica utilizada para controlar la cantidad de energía entregada a un dispositivo eléctrico, en este caso un motor de DC.
El PWM consiste en modular el ancho de un pulso de una señal periódica, manteniendo su frecuencia constante. Esto podemos lograrlo alternando entre dos estados: el estado alto y el estado bajo. Durante el estado alto, la señal tiene un nivel lógico alto, mientras que, en el estado bajo, se tiene un nivel lógico bajo.
La proporción entre el tiempo en el estado alto y bajo se llama ciclo de trabajo. El ciclo de trabajo determina la cantidad de energía entregada al dispositivo. Si el ciclo de trabajo es del 50%, el dispositivo recibe la mitad de la energía máxima, mientras que un ciclo de trabajo del 100% significa que el dispositivo recibe la máxima energía. Por lo tanto, podemos decir que, al variar el ciclo de trabajo, podemos variar la energía aplicada a un motor de corriente directa, lo que repercutiría directamente sobre la velocidad de rotación del eje del motor.
Código:
Antes de pasar al código quiero comentarte que el diagrama de la practica lo encontrarás al finalizar el artículo, justo en la sección de resultados, esto para que puedas simularlo y probarlo antes de implementar.
El código es realmente simple, comenzaremos definiendo las constantes con las cuales trabajaremos, en este caso serán constantes que almacenarán los pines a utilizar.
const int pot = A0; //pin analógico para el potenciómetro
const int m1 = 5; // pin1 PWM para control del motor
const int m2 = 6; // pin2 PWM para control del motor
const int en = 7; // pin para habilitar o deshabilitar el motor
Posteriormente, definiremos las configuraciones iniciales dentro del void setup()
, en este caso el comportamiento que tendrán los pines, más específicamente configuraremos que se comporten como salidas.
void setup()
{
pinMode(m1, OUTPUT);
pinMode(m2, OUTPUT);
pinMode(en, OUTPUT);
}
Perfecto, ahora definiremos nuestro void loop()
, que como ya sabemos es la sección que se repetirá una y otra vez.
Dentro de nuestro void loop()
realizaremos la lectura del potenciómetro, con el regularemos el ciclo de trabajo, que a su vez regulará la velocidad de giro del motor. También colocaremos la función map()
, con la cual mapearemos el rango de valores de 0 a 1024 que nos entrega el pin analógico para que nos quede en un rango de 0 a 255 que es el rango permitido para trabajar con PWM en Arduino.
void loop()
{
int entrada = analogRead(pot);// lectura del pin digital
// mapeo de la lectura del potencionetro
int DutyCycle = map(entrada, 0, 1023, 0, 255);
}
Pero eso no es todo lo que llevará nuestro void loop()
, también agregaremos la activación del pin 7 digital, el cual habilitará el funcionamiento del motor.
void loop()
{
int entrada = analogRead(pot);// lectura del pin digital
// mapeo de la lectura del potencionetro
int DutyCycle = map(entrada, 0, 1023, 0, 255);
digitalWrite(en, HIGH); //habilitamos el motor
}
Ahora solo resta pasar la señal PWM a nuestro puente H y de ahí al motor, esto lo realizaremos mediante analogWrite()
. En esta ocasión pasaremos la señal PWM solo al pin m1
y el m2
lo dejaremos en 0, esto permitirá el giro en un sentido. Para invertir el sentido de giro solo invierte los papeles, es decir, el m1
en 0 y m2
con el ciclo de trabajo.
void loop()
{
int entrada = analogRead(pot);// lectura del pin digital
// mapeo de la lectura del potencionetro
int DutyCycle = map(entrada, 0, 1023, 0, 255);
digitalWrite(en, HIGH); //habilitamos el motor
// enviamos la señal PWM por el pin m1
analogWrite(m1, DutyCycle);
analogWrite(m2, 0);
}
Resultados:
Listo, nada de complejidad en la realización de esta práctica, enseguida te dejo el simulador en el cual podrás ver el diagrama, el código completo y claro, simular la práctica.
Etiqueta:Arduino
Soy un apasionado por la innovación tecnológica, el desarrollo y el emprendimiento. Durante mi educación superior me enfoqué en la programación de software para visión artificial e inteligencia artificial. Poco después al graduarme tuve la oportunidad de aplicar estos conocimientos en el desarrollo de soluciones para empresas como General Motors, Ford, Harley-Davidson, Mack, Tesla y unas cuantas empresas más del ramo automotriz.