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


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.
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 :
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
++
/*
* 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
}
/*
* 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
-
Amazon
-
AliExpressAchetez le circuit intégré pilote de moteur L293D sur AliExpress.s.click.aliexpress.com
Ressources et références
Aucune ressource pour le moment.
Fichiers📁
Aucun fichier disponible.