En el mundo de la electrónica y la programación, el control de motores de corriente continua es fundamental para una amplia variedad de proyectos. En este artículo, aprenderemos cómo utilizar el controlador de motor IC L293D junto con Arduino para controlar motores de forma efectiva y precisa. ¡Sigue leyendo para descubrir cómo puedes incorporar esta tecnología en tus propios proyectos!
Si planeas ensamblar a tu nuevo amigo robot, es posible que desees aprender a controlar motores de CC. La forma más fácil y rentable de controlar motores de CC es conectar el controlador de motor IC L293D al Arduino. Puede controlar tanto la velocidad como la dirección de rotación de dos motores de CC.
Y como beneficio adicional, también puede controlar un motor paso a paso unipolar como el 28BYJ-48 o un motor paso a paso bipolar como el NEMA 17.
Controlar un motor de corriente continua
Para tener un control total sobre el motor de CC, necesitamos controlar su velocidad y dirección de rotación. Esto se puede lograr combinando estas dos técnicas.
- PWM – para controlar la velocidad
- puente H – para controlar la dirección de rotación
PWM – para control de velocidad
La velocidad de un motor de CC se puede controlar cambiando su voltaje de entrada. Una técnica común para esto es utilizar PWM (modulación de ancho de pulso).
PWM es una técnica que ajusta el valor promedio del voltaje de entrada enviando una serie de pulsos ON-OFF.
El voltaje promedio es proporcional al ancho de los pulsos, llamados pulsos. tasa de ocupación.
Cuanto mayor sea el ciclo de trabajo, mayor será el voltaje promedio aplicado al motor de CC (lo que resultará en una velocidad más alta), y cuanto más corto sea el ciclo de trabajo, menor será el voltaje promedio aplicado al motor de CC (lo que resultará en una velocidad más baja).
La siguiente imagen muestra la tecnología PWM con diferentes ciclos de trabajo y voltajes promedio.
Puente H: para controlar la dirección de rotación
La dirección de rotación de un motor de CC se puede controlar cambiando la polaridad de su voltaje de entrada. Una técnica común para esto es utilizar un puente en H.
Un circuito de puente H consta de cuatro interruptores con el motor en el medio, formando una disposición en forma de H.
Cerrar dos interruptores específicos al mismo tiempo invierte la polaridad del voltaje aplicado al motor. Esto cambia la dirección de rotación del motor.
La siguiente animación muestra cómo funciona el circuito del puente H.
Controlador de motor L293D IC
El L293D es un controlador de motor de puente H de doble canal que puede controlar un par de motores de CC o un solo motor paso a paso. Esto significa que puede accionar hasta dos motores individualmente, lo que lo hace ideal para construir una plataforma robótica de dos ruedas.
El L293D se utiliza más comúnmente para accionar motores, pero también se puede utilizar para accionar cualquier carga inductiva, como un solenoide de relé o un transistor de potencia de conmutación grande.
Es capaz de accionar cuatro solenoides, cuatro motores CC unidireccionales, dos motores CC bidireccionales o un motor paso a paso.
El L293D IC tiene un rango de suministro de 4,5 V a 36 V y puede entregar una corriente de salida máxima de 1,2 A por canal, por lo que funciona muy bien con la mayoría de nuestros motores.
El IC también tiene diodos de retroceso incorporados para evitar daños cuando el motor está desenergizado.
Especificaciones técnicas
Aquí están las especificaciones:
Tensión de salida del motor | 4,5 V-36 V |
Tensión de entrada lógica | 5V |
Corriente de salida por canal | 600mA |
Corriente de salida máxima por canal | 1.2A |
Consulte la siguiente hoja de datos para obtener más detalles.
Configuración de pines del IC del controlador del motor L293D
El L293D IC tiene un total de 16 pines que lo conectan con el mundo exterior. La asignación de pines es la siguiente:
Conozcamos todos los pines uno por uno.
Pines de alimentación
El CI del controlador del motor L293D en realidad tiene dos pines de alimentación de entrada: VS y VSS.
VS (Vcc2) El pin suministra energía al puente H interno del IC para accionar los motores. Puede conectar un voltaje de entrada entre 4,5 y 36 V a este pin.
VSS (Vcc1) se utiliza para controlar el circuito lógico interno, que debe ser de 5 V.
Tierra Los pines son pines de tierra comunes. Los 4 pines GND están conectados internamente y se utilizan para disipar el calor generado durante cargas elevadas.
pines de salida
Los canales de salida del controlador de motor L293D para los motores A y B están enrutados a los pines SAL1, SAL2 Y SAL3, SAL4 respectivamente. Puede conectar dos motores de CC de 5-36 V a estos pines.
Cada canal del IC puede suministrar hasta 600 mA al motor de CC. Sin embargo, la cantidad de energía suministrada al motor depende de la fuente de alimentación del sistema.
Pasadores de control direccional
Los pasadores de control direccional le permiten controlar si el motor gira hacia adelante o hacia atrás. Estos pines en realidad controlan los interruptores del circuito H-Bridge en el L293D IC.
El IC tiene dos pines de control de dirección para cada canal. El EN 1 Y EN 2 Los pasadores controlan la dirección de rotación del motor A; Mientras EN 3 Y IN4 Controlar la dirección de rotación del motor B.
La dirección de rotación del motor se puede controlar aplicando lógica ALTA (5 V) o lógica BAJA (tierra) a estas entradas. La siguiente tabla muestra cómo hacer esto.
EN 1 | EN 2 | dirección de giro |
Bajo(0) | Bajo(0) | Motor apagado |
Alto(1) | Bajo(0) | Adelante |
Bajo(0) | Alto(1) | Hacia atrás |
Alto(1) | Alto(1) | Motor apagado |
Pasadores de control de velocidad
Los pasadores de control de velocidad ENA Y ENB Se utilizan para encender/apagar los motores y controlar la velocidad.
Tirar de estos pasadores a ALTO hará que los motores giren, mientras que tirarlos a BAJO los detendrá. Pero con la modulación de ancho de pulso (PWM) puedes controlar la velocidad de los motores.
Cableado de un IC de controlador de motor L293D a un Arduino
Ahora que sabemos todo sobre el IC, ¡podemos comenzar a conectarlo a nuestro Arduino!
Comencemos conectando la alimentación a los motores. En nuestro experimento, utilizamos motores con engranajes de CC (también conocidos como motores «TT»), que se encuentran comúnmente en robots con tracción en dos ruedas. Están diseñados para 3 a 12 V. Por tanto, conectaremos la fuente de alimentación externa de 5V al pin VS (Vcc2).
A continuación, necesitamos suministrar 5 V al circuito lógico del L293D. Conecte el pin VSS (Vcc1) a la salida de 5V del Arduino. Y asegúrese de que su circuito y Arduino tengan una base común.
Ahora conecte los pines de entrada y habilitación del IC L293D (ENA, IN1, IN2, IN3, IN4 y ENB) a los seis pines de salida digital del Arduino (9, 8, 7, 5, 4 y 3). Tenga en cuenta que los pines de salida 9 y 3 de Arduino son compatibles con PWM.
Finalmente, conecte un motor a OUT1 y OUT2 y el otro motor a OUT3 y OUT4. Puedes intercambiar las conexiones de tu motor. Técnicamente no existe una forma correcta o incorrecta.
Cuando haya terminado, debería tener algo similar a la imagen a continuación.
código de ejemplo de arduino
El siguiente esquema le brindará una comprensión integral del control de la velocidad y la dirección de rotación de un motor de CC con el controlador de motor IC L293D y le servirá como base para futuros experimentos y proyectos prácticos.
// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;
void setup() {
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Turn off motors - Initial state
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop() {
directionControl();
delay(1000);
speedControl();
delay(1000);
}
// This function lets you control spinning direction of motors
void directionControl() {
// Set motors to maximum speed
// For PWM maximum possible values are 0 to 255
analogWrite(enA, 255);
analogWrite(enB, 255);
// Turn on motor A & B
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(2000);
// Now change motor directions
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// Turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// This function lets you control speed of the motors
void speedControl() {
// Turn on motors
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Accelerate from zero to maximum speed
for (int i = 0; i < 256; i++) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Decelerate from maximum speed to zero
for (int i = 255; i >= 0; --i) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
Explicación del código:
El código Arduino es bastante simple. No se requieren bibliotecas para funcionar. El boceto comienza indicando los pines de Arduino a los que están conectados los pines de control del L293D.
// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;
En la sección de configuración del código, todos los pines de control del motor (tanto de dirección como de velocidad) están configurados como SALIDA digital y los pines de control de dirección se bajan para apagar ambos motores.
void setup() {
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Turn off motors - Initial state
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
En la sección de bucle del código, llamamos a dos funciones definidas por el usuario con un segundo de diferencia.
void loop() {
directionControl();
delay(1000);
speedControl();
delay(1000);
}
Estas funciones son:
-
Control de dirección() – Esta función hace que ambos motores giren hacia adelante a máxima velocidad durante dos segundos. Luego invierte el sentido de rotación del motor y gira durante dos segundos. Finalmente apaga los motores.
void directionControl() { // Set motors to maximum speed // For PWM maximum possible values are 0 to 255 analogWrite(enA, 255); analogWrite(enB, 255); // Turn on motor A & B digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(2000); // Now change motor directions digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(2000); // Turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }
-
control de velocidad() – Esta función acelera ambos motores desde cero hasta la velocidad máxima generando una señal PWM con el escritura analógica() función, luego lo ralentiza nuevamente a cero. Finalmente apaga los motores.
void speedControl() { // Turn on motors digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // Accelerate from zero to maximum speed for (int i = 0; i < 256; i++) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // Decelerate from maximum speed to zero for (int i = 255; i >= 0; --i) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // Now turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }
Controla motores de CC con el controlador de motor IC L293D y Arduino
Si estás planeando armar a tu nuevo amigo robot, eventualmente querrás aprender a controlar motores de corriente continua. La forma más fácil y económica de controlar motores de CC es interfiriendo el controlador de motor IC L293D con Arduino. Este puede controlar tanto la velocidad como la dirección de rotación de dos motores de CC.
Y como bonificación, también puede controlar un motor paso a paso unipolar como el 28BYJ-48 o un motor paso a paso bipolar como el NEMA 17. Controlar motor paso a paso con L293D Motor Driver IC y Arduino es una de las formas más fáciles y económicas de controlar motores paso a paso.
Preguntas frecuentes:
-
¿Cómo controlar un motor de corriente continua con Arduino y L293D?
Para tener un control completo sobre un motor de CC, debemos controlar su velocidad y dirección de rotación. Esto se puede lograr combinando dos técnicas: PWM (modulación de ancho de pulso) y H-Bridge. PWM se utiliza para controlar la velocidad, mientras que H-Bridge se utiliza para controlar la dirección de rotación.
-
¿Qué es PWM y cómo se utiliza para controlar la velocidad de un motor de CC?
PWM es una técnica donde se ajusta el valor promedio del voltaje de entrada enviando una serie de pulsos ON-OFF. Cuanto mayor sea el ciclo de trabajo, mayor será el voltaje promedio aplicado al motor de CC (lo que resulta en una mayor velocidad), mientras que un ciclo de trabajo más corto resultará en un voltaje promedio más bajo aplicado al motor de CC (lo que resulta en una menor velocidad).
-
¿Cómo se utiliza un H-Bridge para controlar la dirección de rotación de un motor de CC?
Un circuito H-Bridge consta de cuatro interruptores con el motor en el centro formando un arreglo en forma de H. Cerrar dos interruptores específicos a la vez invierte la polaridad del voltaje aplicado al motor, lo que provoca un cambio en la dirección de rotación del motor.
-
¿Qué especificaciones tiene el controlador de motor IC L293D?
El L293D es un controlador de motor H-Bridge dual capaz de conducir un par de motores de CC o un motor paso a paso único. Puede conducir hasta dos motores de forma independiente, lo que lo hace ideal para construir una plataforma robótica de dos ruedas.
-
¿Cómo se conecta un controlador de motor IC L293D a un Arduino?
Para conectar el L293D a Arduino, primero debes conectar la fuente de alimentación a los motores y luego suministrar 5V a la parte lógica del L293D. Finalmente, conecta los pines de control del IC a los pines de salida digital de Arduino. Asegúrate de que tu circuito y Arduino compartan tierra común.
Con esta información y un poco de práctica, podrás controlar motores de CC con el controlador de motor IC L293D y Arduino de manera efectiva. ¡Diviértete construyendo y experimentando con tus proyectos de robótica!
¡Excelente tutorial! Me encantó cómo explicaron paso a paso el uso del controlador de motor IC L293D con Arduino para controlar motores de CC. ¡Muchas gracias por la información!
¡Qué buena explicación! Nunca había entendido cómo controlar motores de CC con Arduino. ¡Gracias por el post!
Gracias por el artículo, definitivamente me sirvió de ayuda para entender mejor cómo controlar motores de CC con Arduino y el controlador de motor IC L293D. ¡Muy útil!
¡Buena info! Me gusta cómo explican el uso del controlador L293D con Arduino para controlar motores de CC. ¡Gracias por compartir, ahora lo entiendo mejor!
Interesante artículo, buena forma de controlar motores de CC con Arduino. ¡Gracias por compartir!