Le module L298N est une carte double pont en H bâtie autour du circuit L298N de STMicroelectronics : elle reçoit des ordres logiques de 5 V, du niveau d’un microcontrôleur, et les traduit en courant moteur, sous une tension bien plus élevée. Deux moteurs à courant continu y sont pilotés indépendamment, dans les deux sens et à vitesse réglable, ou bien un seul moteur pas à pas bipolaire. Le circuit est vissé sur un dissipateur en aluminium, entouré de huit diodes de roue libre, et la carte porte son propre régulateur 5 V : le montage tient sur trois borniers à vis et une barrette de six broches, sans une seule soudure.
Caractéristiques techniques
| Circuit de puissance | L298N, double pont en H bipolaire, boîtier Multiwatt15 monté sur dissipateur en aluminium |
|---|---|
| Tension des moteurs | 5 V à 35 V en courant continu, sur le bornier d’alimentation |
| Tension logique | 5 V, niveaux compatibles TTL ; un niveau haut est reconnu à partir de 2,3 V |
| Courant de sortie | 2 A par pont, 3 A en pointe non répétitive, avec les diodes de roue libre déjà en place |
| Consommation logique | environ 36 mA au maximum |
| Entrées de commande | une barrette de six broches : ENA, IN1, IN2, IN3, IN4, ENB |
| Sorties moteurs | deux borniers à vis de deux positions : OUT1 et OUT2 pour le moteur A, OUT3 et OUT4 pour le moteur B |
| Alimentation | bornier à vis de trois positions sérigraphié 12V, GND et 5V, avec régulateur 78M05 embarqué |
| Dimensions | carte d’environ 43 mm sur 43 mm, 26 mm de hauteur dissipateur compris, quatre trous de fixation aux angles |
| Compatibilité | Arduino Uno, Mega, Nano, ESP32, Raspberry Pi ou tout microcontrôleur à sorties logiques de 3,3 à 5 V |
Alimentation : deux tensions à séparer
La carte travaille sur deux tensions différentes, et c’est la principale source d’erreur au premier montage. La partie logique, qui reçoit les ordres, fonctionne en 5 V et ne consomme que quelques milliampères. Les moteurs, eux, demandent un courant que ni l’Arduino ni un port USB ne peuvent fournir : ils sont alimentés par le bornier de puissance.
- Bornier d’alimentation : le plus de la source moteur sur la vis marquée 12V, la masse sur GND. Malgré sa sérigraphie, cette vis accepte de 5 V à 35 V ; la mention 12V correspond au montage le plus courant, celui d’un moteur de 12 V.
- Cavalier du régulateur : tant que l’alimentation moteur reste entre 7 V et 12 V, le cavalier posé à côté du bornier laisse le 78M05 fabriquer le 5 V de la logique, et la vis marquée 5V peut servir de sortie de 5 V pour un petit montage.
- Au-dessus de 12 V : retirer ce cavalier et fournir le 5 V de la logique par une source séparée sur la vis 5V. Sans cela, le régulateur dissipe la différence de tension, chauffe et finit par couper.
- Masse commune obligatoire : la masse de l’alimentation des moteurs et celle du microcontrôleur doivent être reliées. Sans ce fil, les entrées de commande flottent et rien ne fonctionne.
Brochage et commande
Chaque moteur dispose de deux entrées de sens et d’une entrée d’activation. La table ci-dessous donne le comportement des sorties pour un pont.
| ENA ou ENB | IN1 ou IN3 | IN2 ou IN4 | Sortie du pont |
|---|---|---|---|
| niveau haut | haut | bas | le moteur tourne dans le sens 1, à pleine vitesse |
| niveau haut | bas | haut | le moteur tourne dans le sens 2, à pleine vitesse |
| niveau haut | bas | bas | le moteur est à l’arrêt, freiné |
| modulation de largeur d’impulsion | sens | sens | le moteur tourne à la vitesse imposée par la modulation |
| niveau bas | indifférent | indifférent | le pont est désactivé, le moteur tourne librement |
- Cavaliers ENA et ENB : posés, ils relient l’activation au 5 V et le moteur tourne à fond dès qu’un sens est demandé. Retirés, la broche correspondante accepte un signal de modulation de largeur d’impulsion : c’est ce qui donne la variation de vitesse.
- Broches de modulation utilisables : sur un Arduino Uno, les sorties 9, 10, 5, 6 et 3 acceptent analogWrite ; les broches 5 et 6 commutent plus vite et produisent un sifflement plus aigu, souvent moins gênant à l’oreille qu’un moteur qui bruite.
- Polarité des moteurs : inverser les deux fils d’un moteur dans son bornier inverse son sens de rotation. Aucun réglage logiciel n’est nécessaire.
- Un seul moteur pas à pas : un moteur bipolaire à quatre fils se raccorde aux deux ponts à la fois, une bobine sur OUT1 et OUT2, l’autre sur OUT3 et OUT4.
Applications
- Robot roulant : deux moteurs réducteurs à courant continu, un par pont, avec rotation sur place en croisant les sens de rotation ;
- Robot suiveur de ligne ou éviteur d’obstacles : les capteurs occupent les broches laissées libres, le module se charge de la motricité ;
- Axe motorisé : un convoyeur, un portail, une porte automatique ou un plateau tournant piloté par un moteur pas à pas Nema 17 ;
- Maquette animée et stand d’exposition : mouvement d’un personnage, rotation d’un présentoir, va-et-vient d’une nacelle ;
- Ventilation asservie : un ventilateur de 12 V dont la vitesse suit une mesure de température ou d’humidité.
Mini-projet : un moteur à vitesse variable dans les deux sens
Matériel
- un module L298N ;
- un Arduino Uno et son câble USB ;
- un moteur réducteur à courant continu de 6 V ou 12 V ;
- un support de piles 6 x AA ou un bloc secteur pour l’alimentation des moteurs ;
- quelques fils Dupont mâle-femelle pour les six fils de commande.
Câblage
- serrer les deux fils du moteur dans le bornier OUT1 et OUT2, dans un sens quelconque ;
- relier ENA à la broche 9 de l’Arduino, IN1 à la broche 8 et IN2 à la broche 7 ;
- retirer le cavalier posé sur ENA : sans cela, la variation de vitesse n’aurait aucun effet ;
- relier le plus de la source moteur à la vis 12V du bornier d’alimentation, le moins à GND ;
- relier la masse de cette source à une broche GND de l’Arduino, c’est la masse commune ;
- alimenter l’Arduino par USB : la partie logique de la carte reste alimentée par son propre régulateur tant que la tension moteur ne dépasse pas 12 V.
Programme
/*
* Mini-projet : moteur a courant continu a vitesse variable, dans les
* deux sens, commande par un module L298N branche sur un Arduino Uno.
* Composants, brochage et fiche complete : www.marocproduits.com
*/
const int brocheENA = 9; // vitesse du moteur, sortie de modulation
const int brocheIN1 = 8; // premier sens de rotation
const int brocheIN2 = 7; // second sens de rotation
void setup() {
pinMode(brocheENA, OUTPUT);
pinMode(brocheIN1, OUTPUT);
pinMode(brocheIN2, OUTPUT);
arreter();
}
void loop() {
avancer(200); // marche avant a 200 sur 255
delay(3000);
arreter();
delay(1000);
reculer(200); // marche arriere
delay(3000);
arreter();
delay(1000);
monterEnVitesse(); // rampe de 0 a la vitesse maximale
arreter();
delay(2000);
}
// Sens 1 : IN1 au niveau haut, IN2 au niveau bas
void avancer(int vitesse) {
digitalWrite(brocheIN1, HIGH);
digitalWrite(brocheIN2, LOW);
analogWrite(brocheENA, vitesse);
}
// Sens 2 : les deux entrees sont inversees
void reculer(int vitesse) {
digitalWrite(brocheIN1, LOW);
digitalWrite(brocheIN2, HIGH);
analogWrite(brocheENA, vitesse);
}
// Arret freine : les deux entrees au niveau bas
void arreter() {
digitalWrite(brocheIN1, LOW);
digitalWrite(brocheIN2, LOW);
analogWrite(brocheENA, 0);
}
// Rampe de vitesse, de l'arret a la vitesse maximale
void monterEnVitesse() {
for (int vitesse = 0; vitesse != 256; vitesse = vitesse + 5) {
avancer(vitesse);
delay(40);
}
delay(1000);
}Aucune bibliothèque n’est nécessaire : le module ne dialogue pas avec l’Arduino, il obéit à des niveaux logiques. La vitesse s’écrit de 0 à 255, et l’arrêt freiné s’obtient en mettant les deux entrées de sens au niveau bas. Une valeur de 60 à 80 est en général le seuil à partir duquel un moteur réducteur démarre réellement : en dessous, il bourdonne sans tourner, et ce seuil dépend de la charge et de la tension d’alimentation.
Variante : un moteur pas à pas bipolaire
Le même module pilote un moteur pas à pas bipolaire à quatre fils, en utilisant les deux ponts à la fois : une bobine sur OUT1 et OUT2, l’autre sur OUT3 et OUT4. Le programme fait alors défiler une séquence de quatre pas sur IN1, IN2, IN3 et IN4, par exemple haut-bas-bas-bas, puis bas-haut-bas-bas, et ainsi de suite, sans oublier de relier les deux entrées d’activation au niveau haut. La vitesse de défilement fixe la vitesse de rotation, et l’ordre de la séquence fixe le sens. Pour un moteur pas à pas de forte intensité ou pour un mouvement silencieux et précis, un driver dédié à découpage de courant donne de meilleurs résultats que ce circuit.
Points d’attention
- Le pont consomme une partie de la tension. En sortie de chaque pont, la tension disponible pour le moteur est inférieure d’environ 2 V à celle appliquée à l’entrée, et jusqu’à 4 V sous 2 A. Un moteur de 5 V alimenté en 5 V reçoit donc nettement moins que sa tension nominale : il démarre mal. Mieux vaut alimenter le module un peu au-dessus de la tension du moteur, ou choisir un moteur de 6 V pour une alimentation de 9 V.
- Ne jamais alimenter les moteurs par le 5 V de l’Arduino. Le régulateur de la carte ne débite que quelques centaines de milliampères : les moteurs s’arrêtent, la carte chauffe ou redémarre. La puissance passe par le bornier d’alimentation.
- Ne pas alimenter l’Arduino par la vis 5V du module. Ce régulateur est prévu pour la logique du L298N ; il est déconseillé de lui faire alimenter un microcontrôleur entier pendant que les moteurs tournent. Alimenter l’Arduino de son côté et partager la masse est plus sûr.
- 2 A, c’est une valeur de pointe. Sans ventilation, un courant continu d’environ 1 A à 1,5 A par canal est déjà beaucoup pour ce circuit bipolaire, qui dissipe une part importante de l’énergie en chaleur. Un moteur qui force, par exemple sur un châssis mal aligné, tire bien plus de courant qu’un moteur libre : le dissipateur devient brûlant, ce qui n’est pas normal.
- Aucune intervention sous tension. Débrancher un moteur qui tourne expose l’étage de puissance à une surtension : couper l’alimentation avant toute modification du câblage.
- Respecter la polarité de l’alimentation. Une inversion détruit la carte instantanément, sans protection en amont sur ce module.
- Un bruit parasite dans le montage vient souvent du moteur : un condensateur de 100 nF soudé entre ses deux bornes, et deux autres entre chaque borne et le boîtier métallique, calment la plupart des parasites qui perturbent un capteur ou une liaison série.
Questions fréquentes
Le programme est téléversé, mais le moteur ne tourne pas. Pourquoi ?
Vérifier dans cet ordre : la source moteur est-elle branchée sur le bornier d’alimentation, la masse est-elle commune avec l’Arduino, et les cavaliers ENA ou ENB sont-ils bien posés si aucune modulation n’est envoyée ? Un multimètre entre les deux vis de sortie permet de trancher : une tension qui apparaît et disparaît en changeant le niveau des entrées signifie que le module fonctionne et que le défaut est côté moteur ou alimentation.
Le moteur tourne trop lentement, ou s’arrête dès qu’il est chargé.
Deux causes dominent : une tension d’alimentation insuffisante, entamée encore par la chute interne du pont, et une source qui ne débite pas assez de courant, comme une pile de 9 V rectangulaire. Un support de six piles AA tient bien mieux l’effort qu’une pile de 9 V, dont la résistance interne fait chuter la tension dès que le moteur force.
Quelle différence avec le module L293D ou le shield moteur ?
Le shield moteur L293D s’empile directement sur l’Arduino, gère jusqu’à quatre moteurs et ne réquisitionne que quatre broches, au prix d’un courant admissible plus faible, 600 mA par pont. Le module L298N se câble à l’extérieur, consomme plus de broches, mais encaisse un courant plus élevé et se refroidit sur son dissipateur. Pour deux moteurs un peu gourmands, c’est le L298N ; pour quatre petits moteurs et un montage compact, le shield.
Peut-on commander deux moteurs à des vitesses différentes en même temps ?
Oui. Chaque pont possède sa propre entrée d’activation : ENA pour le premier, ENB pour le second. Deux sorties de modulation de l’Arduino, avec deux valeurs différentes, donnent deux vitesses indépendantes, ce qui permet de corriger un robot qui tire d’un côté, ou de le faire tourner sur place.
Peut-on alimenter l’Arduino avec le module quand il fonctionne sur batterie ?
La vis marquée 5V délivre bien 5 V tant que le cavalier du régulateur est en place et que l’alimentation moteur ne dépasse pas 12 V. Ce 5 V peut alimenter un montage très léger, mais pas un Arduino complet avec ses capteurs pendant que les moteurs tournent : le régulateur chaufferait. Sur un robot autonome, la solution habituelle reste une batterie unique pour les moteurs et un régulateur abaisseur séparé pour la partie logique, avec une masse commune.
À combiner avec
- Moteur à courant continu avec roue — le couple moteur et roue qui équipe directement un châssis de robot ;
- Capteur ultrason HC-SR04 — pour transformer un robot roulant en robot qui évite les obstacles ;
- Support de piles 18650 — une alimentation de robot compacte et rechargeable, en série pour atteindre la tension des moteurs ;
- Châssis robotique à deux roues — la plateforme mécanique qui reçoit deux moteurs et une roue libre ;
- Encodeur de vitesse infrarouge — pour compter les tours et asservir la vitesse des roues.










