Controle motores de CC con el controlador de motor IC L293D y Arduino

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.

Controle motores de CC con el controlador de motor IC L293D y Arduino
Controle el motor paso a paso con el controlador de motor L293D IC y Arduino
Una de las formas más fáciles y rentables de controlar motores paso a paso es conectar el CI del controlador del motor L293D a Arduino. Puede controlar tanto la velocidad…

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.

Controle motores de CC con el controlador de motor IC L293D y Arduino
Tecnología de modulación de ancho de pulso (PWM).

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.

Controle motores de CC con el controlador de motor IC L293D y Arduino
Cómo funciona el 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.

Controle motores de CC con el controlador de motor IC L293D y Arduino

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:

Controle motores de CC con el controlador de motor IC L293D y Arduino

Conozcamos todos los pines uno por uno.

Pines de alimentación

Controle motores de CC con el controlador de motor IC L293D y Arduino

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

Controle motores de CC con el controlador de motor IC L293D y Arduino

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.

Controle motores de CC con el controlador de motor IC L293D y Arduino

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

Controle motores de CC con el controlador de motor IC L293D y Arduino

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.

Controle motores de CC con el controlador de motor IC L293D y Arduino

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);
    }
Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

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:

  1. ¿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.

  2. ¿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).

  3. ¿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.

  4. ¿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.

  5. ¿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!

5 comentarios en «Controle motores de CC con el controlador de motor IC L293D y Arduino»

Deja un comentario