Code de recherche

Code Arduino et vidéo : Contrôleur de moteur à courant continu L293D (sans contrôle de vitesse)

Code Arduino et vidéo : Contrôleur de moteur à courant continu L293D (sans contrôle de vitesse)

Ce tutoriel explique comment utiliser le contrôleur de moteur L293D avec un Arduino pour contrôler un moteur à courant continu. Le L293D vous permet de faire tourner le moteur dans les deux sens, dans le sens des aiguilles d'une montre et dans le sens inverse. En suivant ce guide, vous apprendrez à câbler les composants et à programmer l'Arduino pour obtenir le contrôle du moteur souhaité.

Dans ce projet, nous utiliserons le pilote de moteur L293D pour contrôler un seul moteur à courant continu. Le moteur pourra changer de sens en fonction des commandes données dans le code Arduino. Pour une compréhension plus claire du montage et du code, il est utile de regarder la vidéo associée (dans la vidéo à 00:00).

Matériel expliqué

Le L293D est un circuit intégré conçu pour piloter des moteurs. Il peut contrôler deux moteurs à courant continu simultanément ou un moteur pas à pas. La puce utilise une configuration en pont en H pour permettre le contrôle du sens de rotation en inversant la polarité de la tension appliquée au moteur. Cette flexibilité en fait un excellent choix pour les projets de robotique et d'automatisation.

En plus du L293D, nous utiliserons une carte Arduino pour envoyer des signaux de commande au pilote de moteur. L'Arduino générera les niveaux logiques nécessaires pour activer le moteur et déterminer le sens de sa rotation. Le montage nécessitera également un moteur à courant continu et une alimentation compatible avec la tension requise par le moteur.

Détails de la fiche technique

Fabricant Texas Instruments
Numéro de pièce L293D
Tension logique / E/S 5 V
Tension d'alimentation 4,5 - 36 V
Courant de sortie (par canal) 600 mA
Courant de crête (par canal) 1.2 A
Recommandations de fréquence PWM 20 kHz
Seuils logiques d'entrée 2,5 V (typ.)
Chute de tension / RDS(on)/ saturation 1,5 V (max)
Limites thermiques 150 °C (max.)
Paquet DIP 16 broches
Notes / variantes Peut contrôler deux moteurs

  • Veillez à ce que la tension d'alimentation ne dépasse pas 36 V.
  • Utilisez un dissipateur thermique approprié lorsque l'appareil fonctionne près du courant maximal.
  • Reliez toujours la masse de l'Arduino à celle du pilote de moteur.
  • Vérifiez le câblage pour éviter les connexions à polarité inversée.
  • Utilisez des signaux PWM pour contrôler la vitesse si nécessaire dans de futurs projets.

Instructions de câblage

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

Pour câbler le contrôleur de moteur L293D à l'Arduino, commencez par connecter l'alimentation et la masse. Connectez les broches 4 et 5 du L293D à la masse. Ensuite, connectez la broche 1 (Vcc1) à la sortie 5 V de l'Arduino. Pour Vcc2 (broche 8), reliez-la à une alimentation externe, en vous assurant qu'elle correspond aux spécifications de tension du moteur.

Ensuite, connectez la broche d'activation (broche 1) à la broche 8 de l'Arduino pour contrôler l'alimentation du moteur. Pour les entrées de commande du moteur, connectez la broche 2 (1A) du L293D à la broche 2 de l'Arduino et la broche 7 (2A) à la broche 7 de l'Arduino. Enfin, connectez les bornes du moteur aux broches 3 (1Y) et 6 (2Y) du L293D.

Broche 1 de la plaque d'essai du L293D
broche 1 du L293D sur la plaque d'essai
L293D_câblage_plaque_d_essai_bb

Exemples de code et guide pas à pas

Le code suivant initialise les broches et configure le contrôle du moteur. Les identifiants utilisés incluentP1Apour la première broche de commande du moteur etEN12Pour la broche d'activation. La fonction setup configure les broches en sorties.

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
}

Dans la boucle, le moteur est commandé à tourner dans les deux sens, avec des délais entre chaque rotation. L'état du moteur est affiché sur le moniteur série en utilisantSerial.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
}

Cet extrait montre comment contrôler le sens de rotation du moteur en modifiant les niveaux logiques envoyés àP1AetP2A. Le moteur fonctionne pendant 3 secondes avant de s'arrêter et de changer de sens.

Voici comment utiliser les drivers demi-pont L293D :

L293D en demi-pont sens horaire
L293D comme demi-pont sens horaire
L293D en demi-pont sens antihoraire
L293D en demi-pont, sens antihoraire

Démonstration / À quoi s'attendre

Une fois l'installation terminée et le code téléversé, vous devriez observer le moteur tourner dans un sens pendant 3 secondes, s'arrêter pendant 2 secondes, puis tourner dans le sens inverse pendant 3 secondes supplémentaires. L'état du moteur sera affiché sur le moniteur série, confirmant les actions (dans la vidéo à 12:00).

Parmi les pièges courants, on trouve de s'assurer que la bonne tension est fournie au moteur et de vérifier que les connexions du moteur sont correctes. Si le moteur ne répond pas, revérifiez le câblage et les connexions de l'alimentation.

Horodatages vidéo

  • 00:00- Introduction
  • 02:30- Explication du câblage
  • 05:00- Revue de code
  • 10:00- Démonstration du contrôle moteur

Images

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).
Langue: 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)
Langue: 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

Ce dont vous pourriez avoir besoin

Ressources et références

Aucune ressource pour le moment.

Fichiers📁

Aucun fichier disponible.