Comment Contrôler les Moteurs DC avec le Module L298N et Arduino
Dans le domaine de l’électronique et de la robotique, maîtriser le contrôle des moteurs DC à courant continu est essentiel pour la construction de robots et de projets motorisés. L’un des composants clés pour atteindre cet objectif est le module de contrôle de moteur L298N. Ce module permet de contrôler la vitesse et la direction de rotation de deux moteurs CC, en utilisant une combinaison de techniques de modulation de largeur d’impulsion (PWM) et de pont en H. Dans ce tutoriel, nous allons explorer les détails de cette interface et vous montrer comment l’utiliser avec Arduino pour un contrôle motorisé précis.
Techniques de Contrôle de Moteurs DC
Pour obtenir un contrôle total sur un moteur DC, il est nécessaire de maîtriser sa vitesse et sa direction de rotation. Cette maîtrise est possible en combinant deux techniques clés :
PWM – Pour Contrôler la Vitesse
La vitesse d’un moteur DC peut être contrôlée en modifiant sa tension d’entrée. Une technique largement utilisée pour y parvenir est la modulation de largeur d’impulsion (PWM).
La PWM est une technique dans laquelle la valeur moyenne de la tension d’entrée est ajustée en envoyant une série d’impulsions marche-arrêt. Cette tension moyenne est proportionnelle à la largeur des impulsions, appelée cycle de service.
Plus le cycle de service est élevé, plus la tension moyenne appliquée au moteur DC est élevée, ce qui entraîne une augmentation de la vitesse du moteur. Plus le cycle de service est court, plus la tension moyenne appliquée au moteur DC est faible, ce qui entraîne une diminution de la vitesse du moteur.
Pont en H – Pour Contrôler la Direction de Rotation
La direction de rotation d’un moteur DC peut être contrôlée en changeant la polarité de sa tension d’entrée. Une technique largement utilisée pour y parvenir est l’utilisation d’un pont en H.
Un circuit en pont en H est composé de quatre interrupteurs disposés en forme de H, avec le moteur au centre.
La fermeture de deux interrupteurs spécifiques en même temps inverse la polarité de la tension appliquée au moteur. Cela entraîne un changement dans la direction de rotation du moteur.
Introduction au Module de Contrôle de Moteur L298N
Au cœur du module se trouve une puce noire imposante avec un dissipateur de chaleur robuste – le L298N.
Le L298N est un circuit intégré qui contient deux ponts en H standards capables de piloter une paire de moteurs DC, ce qui en fait un choix idéal pour la construction de plates-formes robotiques à deux roues.
Le module L298N peut être alimenté avec une tension comprise entre 5V et 35V et peut fournir un courant continu de 2A par canal, ce qui le rend compatible avec la plupart des moteurs CC.
Spécifications Techniques du L298N :
- Tension de sortie du moteur : 5V – 35V
- Tension de sortie du moteur (recommandée) : 7V – 12V
- Tension d’entrée logique : 5V – 7V
- Courant continu par canal : 2A
- Dissipation de puissance maximale : 25W
-
Moteur à courant continu + appui des Roues40,00 DH
-
L298N double pont H dc Moteur pas à pas38,00 DH
-
Arduino Uno R3 avec câble USB120,00 DH
Brochage du Module de Contrôle de Moteur L298N
Le module L298N dispose de 11 broches qui permettent la communication avec le monde extérieur. Voici le brochage détaillé :
Brochage du Module de Contrôle de Moteur L298N
- Broches d’Alimentation : Le module L298N est alimenté par une borne à vis de 3 broches avec un pas de 3,5 mm.
- La broche VS alimente le pont en H interne du circuit intégré, qui contrôle les moteurs. Cette broche accepte des tensions d’entrée allant de 5V à 12V.
- La broche VSS alimente la partie logique à l’intérieur du circuit intégré L298N et peut varier entre 5V et 7V.
- GND est la broche de mise à la terre commune.
- Broches de Sortie : Les canaux de sortie du module L298N, OUT1 et OUT2 pour le moteur A et OUT3 et OUT4 pour le moteur B, sont disponibles sur le bord du module avec deux bornes à vis de 3,5 mm. Vous pouvez connecter deux moteurs CC de 5-12V à ces bornes.
- Broches de Contrôle de Direction : Les broches de contrôle de direction permettent de contrôler si le moteur tourne en avant ou en arrière. Ces broches contrôlent en réalité les interrupteurs du circuit en pont en H à l’intérieur de la puce L298N.
- Broches de Contrôle de Vitesse : Les broches de contrôle de vitesse ENA et ENB permettent d’allumer/éteindre les moteurs et de contrôler leur vitesse.
- Régulateur de Tension 5V Intégré et Cavalier : Le module inclut un régulateur de tension 78M05 5V qui peut être activé ou désactivé à l’aide d’un cavalier.
Tension Chute du L298N :
Le L298N a une chute de tension d’environ 2V. Cela est dû au fait que les transistors de commutation internes ont une chute de tension d’environ 1V lorsqu’ils sont polarisés en avant, et parce qu’un pont en H nécessite que le courant passe à travers deux transistors, la chute de tension totale est de 2V.
Câblage d’un module de pilote de moteur L298N à un Arduino
Maintenant que nous en savons plus sur le module, passons à son raccordement à notre Arduino !
- Commencez par connecter l’alimentation du moteur. Dans notre exemple, nous utilisons des moteurs à boîte de vitesses CC, également appelés moteurs “TT”, que l’on retrouve souvent dans les robots à deux roues motrices. Ils sont conçus pour fonctionner sous une tension de 3 à 12V. Nous allons donc connecter une source d’alimentation externe de 12V à la borne VS. Étant donné que le L298N a une chute de tension d’environ 2V, les moteurs recevront 10V et tourneront légèrement moins rapidement. Mais c’est acceptable.
- Ensuite, nous devons fournir 5V à la partie logique du L298N. Nous utiliserons le régulateur 5V intégré pour obtenir 5V à partir de l’alimentation du moteur, donc maintenez le cavalier 5V-EN en place.
- Maintenant, reliez les broches de contrôle d’entrée et d’activation du module L298N (ENA, IN1, IN2, IN3, IN4 et ENB) aux six broches de sortie numériques de l’Arduino (9, 8, 7, 5, 4 et 3). Notez que les broches de sortie 9 et 3 de l’Arduino prennent en charge la PWM (modulation de largeur d’impulsion).
- Enfin, reliez un moteur à la borne A (OUT1 et OUT2) et l’autre à la borne B (OUT3 et OUT4). Vous pouvez inverser les connexions de votre moteur. Il n’y a pas vraiment de bonne ou de mauvaise façon.
Exemple de Code Arduino
Le croquis ci-dessous montre comment contrôler la vitesse et la direction de rotation d’un moteur CC à l’aide du module de contrôle de moteur L298N. Ce croquis peut servir de base pour des expériences et des projets pratiques plus avancés.
Le croquis fait tourner le moteur dans une direction pendant une révolution, puis dans l’autre direction. Il y a également de l’accélération et du freinage impliqués.
// Connexions du moteur A
int enA = 9;
int in1 = 8;
int in2 = 7;
// Connexions du moteur B
int enB = 3;
int in3 = 5;
int in4 = 4;
void setup() {
// Configure toutes les broches de contrôle du moteur en sortie
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Éteint les moteurs - État initial
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop() {
controlDirection();
delay(1000);
controlSpeed();
delay(1000);
}
// Cette fonction permet de contrôler la direction de rotation des moteurs
void controlDirection() {
// Définit les moteurs à la vitesse maximale
// Les valeurs PWM maximales possibles vont de 0 à 255
analogWrite(enA, 255);
analogWrite(enB, 255);
// Active les moteurs A et B
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(2000);
// Inverse maintenant les directions des moteurs
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// Éteint les moteurs
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// Cette fonction permet de contrôler la vitesse des moteurs
void controlSpeed() {
// Active les moteurs
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Accélère de zéro à la vitesse maximale
for (int i = 0; i < 256; i++) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Décélère de la vitesse maximale à zéro
for (int i = 255; i >= 0; --i) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Éteint maintenant les moteurs
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
Explication du Code
Le code Arduino est assez simple et ne nécessite pas de bibliothèques spécifiques. Le croquis commence par la déclaration des broches de l’Arduino qui sont connectées aux broches de contrôle du L298N.
// Connexions du moteur A
int enA = 9;
int in1 = 8;
int in2 = 7;
// Connexions du moteur B
int enB = 3;
int in3 = 5;
int in4 = 4;
Dans la section de configuration (setup) du code, toutes les broches de contrôle des moteurs, y compris les broches de contrôle de direction et de vitesse, sont configurées en tant que SORTIE numérique. De plus, les broches de contrôle de direction sont mises à LOW (éteintes) pour désactiver initialement les deux moteurs.
void setup() {
// Configure toutes les broches de contrôle du moteur en sortie
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Éteint les moteurs - État initial
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
Dans la section de la boucle (loop) du code, deux fonctions définies par l’utilisateur sont appelées avec une pause d’une seconde entre elles.
void loop() {
controlDirection();
delay(1000);
controlSpeed();
delay(1000);
}
Ces fonctions sont les suivantes :
controlDirection() – Cette fonction fait tourner les deux moteurs à pleine vitesse pendant deux secondes. Ensuite, elle inverse la direction de rotation des moteurs et les fait tourner pendant deux secondes dans l’autre sens. Enfin, elle arrête les moteurs.
void controlDirection() {
// Définit les moteurs à la vitesse maximale
// Les valeurs PWM maximales possibles vont de 0 à 255
analogWrite(enA, 255);
analogWrite(enB, 255);
// Active les moteurs A et B
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW
);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(2000);
// Inverse maintenant les directions des moteurs
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// Éteint les moteurs
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
controlSpeed() – Cette fonction utilise la fonction analogWrite() pour générer un signal PWM qui accélère les deux moteurs de zéro à la vitesse maximale, puis les décélère jusqu’à zéro. Enfin, elle arrête les moteurs.
void controlSpeed() {
// Active les moteurs
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Accélère de zéro à la vitesse maximale
for (int i = 0; i < 256; i++) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Décélère de la vitesse maximale à zéro
for (int i = 255; i >= 0; --i) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Éteint maintenant les moteurs
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
Conclusion
En combinant la technique de modulation de largeur d’impulsion (PWM) pour le contrôle de la vitesse et le pont en H pour le contrôle de la direction de rotation, le module de contrôle de moteur L298N offre un moyen puissant de contrôler vos moteurs à courant continu. Grâce à son intégration avec Arduino, vous pouvez créer une variété d’applications motorisées, allant des robots autonomes aux systèmes de contrôle de mouvement complexes. Avec ces connaissances, vous êtes prêt à plonger dans le monde de la robotique et de l’automatisation, en construisant des machines qui répondent à vos commandes avec précision.
Lien outilles
- Pour plus d’articles : https://www.moussasoft.com/tutoriels-electroniques
- Twitter: Moussa Lhoussaine (@Moussasoft_com) / Twitter