Le module L298N est une carte de développement basé sur le circuit intégré L298N permettant le pilotage de moteur à courant continu ou d’un moteur pas-à-pas. Nous avons déjà vu l’utilisation du pont en H. Il peut être trouvé sous forme de module pratique à utiliser avec des performances différentes selon les composants utilisés. Nous allons voir dans ce tutoriel l’utilisation du module L298N avec un microcontrôleur Arduino.
Matériel
- Ordinateur
- Arduino UNO (ou autre microcontrôleur)
- Câble USB A Mâle/B Mâle
- Module L298N
Principe de fonctionnement
Le module L298N est basé sur le circuit intégré du même nom. Le circuit L298N est un double pont en H permettant de modifier la direction et l’intensité de la tension au borne de deux charges électriques.
Les caractéristiques du module L298N sont:
- Pilotage de moteur de tension nominale de 5 à 35V
- 2A courant maximum (peak)
- Tension 5V acceptées sur les broches Input
N.B.: le module L298N possèdent un régulateur de tension 78M05 calibré pour délivrer 5V 500mA
Schéma de câblage
Le module L298N est alimenté par une source de tension externe. Chaque demi-pont nécessite 3 broches de sortie d’un microcontrôleur.
- GND masse du circuit intégré relié à la masse du microcontrôleur et à la masse de l’alimentation
- ENA enable du moteur M1 reliée à la broche 2
- Input1 direction avant du moteur M1 reliée à la broche 3
- Input2 direction arrière du moteur M1 reliée à la broche 5
- ENB enable du moteur M2 reliée à la broche 4
- Input3 direction avant du moteur M2 reliée à la broche 6
- Input4 direction arrière du moteur M2 reliée à la broche 9
Sur certains modèles de ce module, il est possible de rajouter deux jumpers pour connecter directement les broches enable (ENA et ENB) au 5V. Ceci permet de toujours activer le pont en H et d’économiser deux sorties du microcontrôleur
Code de gestion du module L298N
Pour utiliser le module L298N, il faut activer le demi pont en H en appliquant une tension 5V sur la broche EN. Puis, il faut envoyer un signal PWM sur la broche Avant(Input1/4) ou Arrière(Input2/3) pour piloter la direction et la vitesse de rotation. Les sens de rotation Avant ou Arrière dépendent du sens du branchement du moteur.
//Constants #define nbL298N 2 //Parameters const int enaL298NPin[2] = {2, 4}; const int fwdL298NPin[2] = {3, 5}; const int bwdL298NPin[2] = {6, 9}; //Variables int Power = 200; void setup() { //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); //Init DCmotor for (int i = 0; i < nbL298N; i++) { pinMode(fwdL298NPin[i], OUTPUT); pinMode(bwdL298NPin[i], OUTPUT); pinMode(enaL298NPin[i], OUTPUT); } } void loop() { testL298N(); } void testL298N() { /* function testL298N */ ////Scenario to test H-Bridge //Forward for (int i = 0; i < nbL298N; i++) { digitalWrite(enaL298NPin[i], HIGH); analogWrite(bwdL298NPin[i], 0); for (int j = 0; j <= Power; j = j + 10) { analogWrite(fwdL298NPin[i], j); delay(20); } for (int j = Power; j >= 0; j = j - 10) { analogWrite(fwdL298NPin[i], j); delay(20); } delay(2000); } //Backward for (int i = 0; i < nbL298N; i++) { digitalWrite(enaL298NPin[i], HIGH); analogWrite(fwdL298NPin[i], 0); for (int j = 0; j <= Power; j = j + 10) { analogWrite(bwdL298NPin[i], j); delay(20); } for (int j = Power; j >= 0; j = j - 10) { analogWrite(bwdL298NPin[i], j); delay(20); } delay(2000); } }
Résultat
Une fois le code téléversé, vous devriez voir les moteurs tourner dans un sens puis dans l’autre.
Applications
- Piloter la vitesse et le sens de rotation de deux moteurs CC ou d’un moteur pas-à-pas
Sources
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie
Bonjour super tuto, comment puis je ajouter 2 cellules photoresistances pour faire varier le sens de rotation?
Bonjour et merci pour vos explications très utiles pour un novice…
Passionné de chemin de fer au 1/43, j’aurais encore besoin de vos lumières.
Pourriez-vous intégrer un bouton poussoir pour actionner des aiguillages? Ils seront équipés de petits moteurs CC avec réducteurs
D’avance, je vous remercie pour l’intérêt porté à ma demande
Bien cordialement
Patrick
bonjour,
il faudrait rajouter une connexion internet ou un module RTC pour connaitre l’heure exacte.
Bonjour,
je suis assez novice dans l’utilisation de l’arduino et encore plus pour le L298N.
Ma question est : est-il possible d’utiliser le 5 V de sortie du 298 pour alimenter un arduino nano via le Vin ? les datasheets indiquent une tension mini de 6 v sur le Vin ?
merci de votre avis
Belle journée
Christian
Bonjour,
le régulateur de tension embarquée (78m05) est censé pouvoir délivrer 5V 500mA
Par contre, la tension d’entrée sur Vin doit être comprise entre 7 et 12V (à 6V la carte Arduino peut ne pas fonctionner)
Si vous êtes confiant dans la régulation de tension du module L298n, vous pouvez brancher la sortie 5V sur la broche 5V de l’Arduino.
int enA = 9; // Broche de commande de la vitesse
int in1 = 6; // Broche de commande de direction 1
int in2 = 7; // Broche de commande de direction 2
void setup() {
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
}
void loop() {
// Tourner dans un sens
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
for (int i = 0; i <= 255; i += 5) {
analogWrite(enA, i); // Augmente la vitesse graduellement
delay(50);
}
delay(2000); // Temps dans un sens
// Arrêt
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
analogWrite(enA, 0);
delay(1000); // Temps d'arrêt
// Tourner dans l'autre sens
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
for (int i = 0; i <= 255; i += 5) {
analogWrite(enA, i); // Augmente la vitesse graduellement
delay(50);
}
delay(2000); // Temps dans l'autre sens
// Arrêt
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
analogWrite(enA, 0);
delay(1000); // Temps d'arrêt
}