Código de búsqueda

Código y video de Arduino: Controlador de motor de CC L293D (sin control de velocidad)

Código y video de Arduino: Controlador de motor de CC L293D (sin control de velocidad)

Este tutorial explica cómo usar el controlador de motor L293D con un Arduino para controlar un motor de corriente continua. El L293D permite girar el motor tanto en sentido horario como en sentido antihorario. Siguiendo esta guía, aprenderás a cablear los componentes y a programar el Arduino para lograr el control del motor deseado.

En este proyecto, utilizaremos el controlador de motor L293D para controlar un solo motor de corriente continua. El motor podrá cambiar de dirección según los comandos indicados en el código de Arduino. Para una comprensión más clara del montaje y del código, es útil ver el video asociado (en el video en 00:00).

Hardware explicado

El L293D es un circuito integrado diseñado para accionar motores. Puede controlar dos motores de CC simultáneamente o un motor paso a paso. El chip utiliza una configuración en puente H para permitir el control de dirección al cambiar la polaridad de la tensión aplicada al motor. Esta flexibilidad lo convierte en una excelente opción para proyectos de robótica y automatización.

Además del L293D, utilizaremos una placa Arduino para enviar señales de control al controlador del motor. El Arduino generará los niveles lógicos necesarios para habilitar el motor y determinar la dirección de su rotación. La configuración también requerirá un motor de corriente continua y una fuente de alimentación compatible con los requisitos de voltaje del motor.

Detalles de la hoja de datos

Fabricante Texas Instruments
Número de parte L293D
Tensión lógica/E/S 5 V
Tensión de alimentación 4.5 - 36 V
Corriente de salida (por canal) 600 mA
Corriente de pico (por canal) 1.2 A
Guía de frecuencia PWM 20 kHz
Umbrales lógicos de entrada 2.5 V (típ.)
Caída de tensión / RDS(en conducción)/ saturación 1,5 V (máx.)
Límites térmicos 150 °C (máx.)
Paquete DIP de 16 pines
Notas / variantes Puede controlar dos motores

  • Asegúrese de que la tensión de alimentación no supere los 36 V.
  • Utilice una disipación térmica adecuada cuando opere cerca de la corriente máxima.
  • Conecta siempre la masa del Arduino y del controlador del motor.
  • Compruebe el cableado para evitar conexiones con polaridad invertida.
  • Utilice señales PWM para controlar la velocidad si es necesario en proyectos futuros.

Instrucciones de cableado

Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver
Arduino wiring for L293D motor driver

Para cablear el controlador de motor L293D al Arduino, comienza por conectar la alimentación y la masa. Conecta los pines 4 y 5 del L293D a la masa. Luego, conecta el pin 1 (Vcc1) a la salida de 5 V del Arduino. Para Vcc2 (pin 8), conéctalo a una fuente de alimentación externa, asegurándote de que coincida con la especificación de voltaje del motor.

A continuación, conecta el pin de habilitación (pin 1) al pin 8 del Arduino para controlar la alimentación del motor. Para las entradas de control del motor, conecta el pin 2 (1A) del L293D al pin 2 del Arduino y el pin 7 (2A) al pin 7 del Arduino. Finalmente, conecta los terminales del motor a los pines 3 (1Y) y 6 (2Y) del L293D.

Pin 1 de la protoboard L293D
Pata 1 del L293D en la protoboard
L293D_cableado_en_protoboard_bb

Ejemplos de código y guía paso a paso

El siguiente código inicializa los pines y configura el control del motor. Los identificadores utilizados incluyenP1Apara el primer pin de control del motor yEN12para el pin de habilitación. La función setup configura los pines como salidas.

void setup() {
  Serial.begin(9600); // setup Serial Monitor to display information
  pinMode(P1A, OUTPUT); // define pin as OUTPUT for P1A
  pinMode(P2A, OUTPUT); // define pin as OUTPUT for P2A
  pinMode(EN12, OUTPUT); // define pin as OUTPUT for 1,2EN enable
}

Dentro del bucle, se le ordena al motor que gire en ambas direcciones con retardos entre ellas. El estado del motor se imprime en el monitor serie usandoSerial.println.

void loop() {
  Serial.println("Rotating CW");
  digitalWrite(EN12, HIGH); // Enable 1A and 2A 
  digitalWrite(P1A, HIGH); // send HIGH signal to P1A
  digitalWrite(P2A, LOW); // send LOW signal to P2A
  delay(3000); // motor runs for 3 seconds
  digitalWrite(EN12, LOW); // Disable 1A and 2A
}

Este extracto muestra cómo controlar la dirección de rotación del motor cambiando los niveles lógicos enviados aP1AyP2AEl motor funciona durante 3 segundos antes de detenerse y cambiar de dirección.

Aquí se muestra cómo se utilizan los controladores de media puente L293D:

L293D como medio puente, sentido horario
L293D como medio puente, sentido horario
L293D como medio puente en sentido antihorario
L293D como semipuente en sentido antihorario

Demostración / Qué esperar

Cuando la configuración esté completa y se haya subido el código, deberías observar que el motor gira en una dirección durante 3 segundos, se detiene durante 2 segundos y luego gira en la dirección opuesta durante otros 3 segundos. El estado del motor se imprimirá en el monitor serie, confirmando las acciones (en el video en 12:00).

Entre los errores comunes se encuentra no asegurarse de que el motor reciba el voltaje correcto y no verificar que sus conexiones sean correctas. Si el motor no responde, vuelva a comprobar el cableado y las conexiones de la fuente de alimentación.

Marcas de tiempo del video

  • 00:00- Introducción
  • 02:30- Explicación del cableado
  • 05:00- Revisión del código
  • 10:00- Demostración del control motor

Imágenes

L293D breadboard pin 1
L293D breadboard pin 1
L293D_breadboard_wiring_bb
L293D_breadboard_wiring_bb
L293D as halft bridge CCW
L293D as halft bridge CCW
L293D as halft bridge CW
L293D as halft bridge CW
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver
Arduino wiring for L293D motor driver
79-Arduino code L293 DC motor driver (Advanced).
Idioma: C++
++
/*
 * This is the Arduino code L293 DC motor driver (Advanced).
 Using this code you can control a motor to rotate in both directions: clockwise (CW) 
 and counter-clockwise (CCW).

 *  * 
 // Written by Ahmad S. for Robojax.com on 
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 

 * watch L293 video for details https://youtu.be/jAmDliHcTJ0
 * Code is available at http://robojax.com/learn/arduino

 * 

*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable



// DC motor 2 control 
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable

/*
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 
 */

void setup() {
  // L293 Motor Control Code by Robojax.com 2018025
  Serial.begin(9600);// setup Serial Monitor to display information
  pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
  pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
  pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
   
  pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
  pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
  pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN   
  // L293 Motor Control Code by Robojax.com 2018025   
}

void loop() {
  // L293 Motor Control Code by Robojax.com 2018025


    Serial.println("Rotating CW");
    digitalWrite(EN12 ,HIGH);// Enable 1A and 2A 
    digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
    digitalWrite(P2A,LOW);// send - or LOW signal to P2A       
    delay(3000);// motor runs for 3 seconds
    digitalWrite(EN12 ,LOW);// Disable 1A and 2A
    delay(2000);// motor stop for 3 seconds 
    Serial.println("Motor Stopped"); 

  // L293 Motor Control Code by Robojax.com 2018025
    // now changing the direction of rotation of motor
    Serial.println("Rotating CCW");
    digitalWrite(EN12 ,HIGH);// Enable 1A and 2A     
    digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
    digitalWrite(P2A,HIGH);// send - or LOW signal to P2A  
    delay(3000);// motor runs for 3 seconds
    digitalWrite(EN12 ,LOW);// Disable 1A and 2A
    delay(2000);// motor stop for 3 seconds    
    Serial.println("Motor Stopped");   
     

  Serial.println("=========== Loop done"); 
  delay(500);
  // L293 Motor Control Code by Robojax.com 2018025 
}
80-Arduino code: L293 DC motor driver (Advanced)
Idioma: C++
/*


 * This is the Arduino code L293 DC motor driver (Advanced).
Using this code you can control a motor to rotate in both directions: clockwise (CW) 
and counter-clockwise (CCW).

 *  * 
 // Written by Ahmad S. for Robojax.com on 
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 

* Watch L293 video for details: https://youtu.be/jAmDliHcTJ0
 * Code is available at: http://robojax.com/learn/arduino

 * 

*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable


// DC motor 2 control 
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable

/*
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 
 */

void setup() {
  // L293 Motor Contro Code by Robojax.com 2018025
  Serial.begin(9600);// setup Serial Monitor to display information
  pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
  pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
  pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
   
  pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
  pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
  pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN 

  // L293 Motor Contro Code by Robojax.com 2018025   
}

void loop() {

 if(value == 45){
  rotateMA("CW",HIGH); // start motor in CW
 }
  delay(3000); 
  rotateMA("CW",LOW); // stop motor
  delay(2000);

  rotateMA("CCW",HIGH); // start motor in CCW
  delay(3000); 
  rotateMA("CW",LOW); /// stop motor
  delay(2000);  
  
  // L293 Motor Contro Code by Robojax.com 2018025 
}// loop ends


/**
 * function: rotateMA(String di,int action)
 * Sends power to motor A
 * di is a string and can be "CW" or "CCW"
 * to use: 
 * rotateMA("CW",HIGH);// to rotate motor  CW
 * rotateMA("CCW",HIGH);// to rotate motor CCW
 *  to stop the motor:
 * rotateMA("CW",LOW);// to stop motor 
 */
void rotateMA(String di,int endis)
{
    // L293 Motor Contro Code by Robojax.com 2018025
 if(di =="CW"){
    Serial.println(" Rotating CW");
    digitalWrite(EN12 ,endis);// Enable 1A and 2A 
    digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
    digitalWrite(P2A,LOW);// send - or LOW signal to P2A       
  

 }else{
  // L293 Motor Contro Code by Robojax.com 2018025
    // now changing the direction of rotation of motor
    Serial.println(" Rotating CCW");
    digitalWrite(EN12 ,endis);// Enable 1A and 2A  
    digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
    digitalWrite(P2A,HIGH);// send - or LOW signal to P2A  

 }   
   // L293 Motor Contro Code by Robojax.com 2018025
}//rotateMA ends here

Cosas que podrías necesitar

Recursos y referencias

Aún no hay recursos.

Archivos📁

No hay archivos disponibles.