Comment contrôler la vitesse d'un moteur CC avec un module ESP32 et L298N
Contrôler des moteurs à courant continu peut être une tâche simple avec les bons composants et une bonne compréhension. Dans ce tutoriel, nous allons explorer comment contrôler deux moteurs à courant continu en utilisant le microcontrôleur ESP32 et le module de pilote de moteur L298N. À la fin de ce guide, vous serez en mesure d'ajuster la vitesse et la direction de vos moteurs en fonction des signaux PWM de l'ESP32, ouvrant ainsi la voie à des applications polyvalentes en robotique et en automatisation.
La vidéo accompagnant ce tutoriel fournit une démonstration visuelle de l'ensemble du processus, y compris le câblage et le codage (dans la vidéo à 00:00).
Matériel expliqué
Pour réaliser le contrôle moteur, nous utiliserons l'ESP32 et le module driver de moteur L298N. L'ESP32 est un microcontrôleur puissant avec des capacités Wi-Fi et Bluetooth, ce qui le rend idéal pour les projets IoT. Le L298N est un driver de moteur en H-bridge qui nous permet de contrôler la direction et la vitesse des moteurs en utilisant des signaux PWM. Le module L298N dispose de deux circuits H-bridge, ce qui signifie que nous pouvons contrôler deux moteurs indépendamment. Chaque H-bridge permet de contrôler la direction du moteur (dans le sens horaire ou antihoraire) et la vitesse en variant le signal PWM. En connectant les broches d'activation et d'entrée du L298N à l'ESP32, nous pouvons manipuler les moteurs de manière efficace.
Détails de la fiche technique
| Fabricant | STMicroelectronics |
|---|---|
| Numéro de pièce | L298N |
| Tension logique/IO | 5 V |
| Tension d'alimentation | 5-46 V (VS) |
| Courant de sortie (par canal) | 2 A max/canal (max. absolu) |
| Courant de pointe (par canal) | 2,5 A |
| Guide de fréquence PWM | 1 kHz - 15 kHz |
| Seuils logiques d'entrée | 2,5 V (haut), 1,5 V (bas) |
| Chute de tension / RDS(on)/ saturation | 1,8 V à 2 A |
| Limites thermiques | 150 °C |
| Colis | Connecteur Multiwatt à 15 broches |
| Notes / variantes | Pilote de moteur à double pont en H |
- Assurez-vous que la tension nominale du moteur correspond à la tension d'alimentation du L298N.
- Utilisez un dissipateur thermique adéquat pour un fonctionnement continu à des courants élevés.
- Connectez les masses de tous les composants pour éviter les références flottantes.
- Utilisez une fréquence PWM adaptée à l'application (1-15 kHz).
- Soyez prudent avec les valeurs maximales de courant pour éviter la surchauffe.
- Testez la direction du moteur avant de finaliser le câblage pour éviter d'endommager.
- Considérez des condensateurs de découplage sur l'alimentation pour la stabilité.
Instructions de câblage

Pour câbler le L298N à l'ESP32, commencez par connecter les deux moteurs à courant continu aux bornes de sortie du L298N. Connectez le moteur 1 aux bornes étiquetées commeOUT1etOUT2, et le moteur 2 àOUT3etOUT4. La polarité des moteurs n'a pas d'importance car le L298N gérera la direction. Ensuite, connectez votre alimentation externe auVMSetGNDbornes sur le L298N. Assurez-vous que la tension est appropriée pour vos moteurs, généralement entre 5V et 46V. Le5VLe terminal sur le L298N peut être utilisé pour alimenter l'ESP32 si nécessaire, mais assurez-vous que les exigences en courant sont respectées. Pour les broches de contrôle, connectezENAà GPIO 19,IN1vers GPIO 18, etIN2à GPIO 5 pour le moteur 1. Pour le moteur 2, connectezIN3à GPIO 17,IN4vers GPIO 16, etENBau GPIO 4. Enfin, connectez les masses de l'ESP32 et du L298N ensemble pour assurer une référence commune.
Exemples de code et guide étape par étape
Les extraits de code suivants illustrent comment contrôler les moteurs en utilisant la bibliothèque L298N conçue pour l'ESP32. La bibliothèque simplifie le processus d'envoi de commandes aux moteurs. Tout d'abord, la bibliothèque nécessaire est incluse et les paramètres des moteurs sont définis :
#include
#define ENA 19
#define IN1 18
#define IN2 5
#define IN3 17
#define IN4 16
#define ENB 4
Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, IN3, IN4, ENB, CHB);
Dans cet extrait, nous définissons les broches de contrôle pour les deux moteurs. L'instance de la bibliothèquerobotest créée, qui sera utilisée pour contrôler les moteurs tout au long du programme. Ensuite, nous configurons la communication série et initialisons l'instance du robot dans lesetup()fonction :
void setup() {
Serial.begin(115200);
robot.begin();
}
Cela initialise la communication série pour le débogage et prépare la bibliothèque de contrôle du moteur pour le fonctionnement. Enfin, la logique de contrôle principale est placée dans leloop()fonction, où nous pouvons faire tourner les moteurs et ajuster leur vitesse :
void loop() {
robot.rotate(motor1, 80, CW); // run motor1 at 80% speed in CW direction
delay(3000); // wait for 3 seconds
robot.brake(1); // brake motor1
delay(2000); // wait for 2 seconds
}
Cet extrait montre comment faire fonctionner le Moteur 1 à 80 % de sa vitesse dans le sens des aiguilles d'une montre pendant trois secondes avant de freiner. Le code complet inclut une logique supplémentaire pour le Moteur 2 et des vitesses variables, qui peuvent être vues dans le programme complet chargé en dessous de l'article.
Démonstration / À quoi s'attendre
Lorsqu'ils sont exécutés, les moteurs devraient répondre aux signaux PWM envoyés par l'ESP32. Vous verrez le moteur 1 tourner dans le sens des aiguilles d'une montre à 80 % de sa vitesse, suivi d'une action de freinage. Le programme comprend également une logique pour gérer les variations de vitesse de manière progressive, ce qui peut être testé en observant l'accélération du moteur de 0 % à 100 % (dans la vidéo à 05:00). Les erreurs courantes comprennent le fait de ne pas connecter les masses correctement, ce qui peut entraîner un comportement erratique, et de dépasser les valeurs de courant des L298N, provoquant une surchauffe. Assurez-vous de surveiller le comportement du moteur et d'ajuster les paramètres si nécessaire.
Horodatages vidéo
- 00:46 Introduction
- 04:07 Câblage de l'ESP32 avec L298N
- 06:10 Préparation de l'IDE Arduino pour travailler avec les cartes ESP32
- 08:15 Code Arduino expliqué
- 15:00 Démonstration du contrôle d'un moteur unique
- 16:00 Démonstration du contrôle de 2 moteurs à courant continu
- 17:00 Démonstration de l'alimentation de l'ESP32 par le L298N et une alimentation externe
/*
* Library Example for L298N Module to control DC motors
*
* This code is to control a single motor. For two motor control, please open L298N_DC_2_Motors.
* This code is ready for ESP32.
* Watch video instructions for this code: https://youtu.be/2JTMqURJTwg
*
* Written by Ahmad Shamshiri on December 24, 2019
* in Ajax, Ontario, Canada. www.robojax.com
*
*
*
* Get this code and other Arduino codes from Robojax.com.
or make a donation using PayPal http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Robojax_L298N_DC_motor.h>
// motor 1 settings
#define CHA 0
#define ENA 19 // this pin must be PWM enabled pin if Arduino board is used
#define IN1 18
#define IN2 5
// motor 2 settings
#define IN3 17
#define IN4 16
#define ENB 4// this pin must be PWM enabled pin if Arduino board is used
#define CHB 1
const int CCW = 2; // do not change
const int CW = 1; // do not change
#define motor1 1 // do not change
#define motor2 2 // do not change
// for single motor
//Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, true);
// for two motors without debug information // Watch video instruction for this line: https://youtu.be/2JTMqURJTwg
Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, IN3, IN4, ENB, CHB);
// for two motors with debug information
//Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, IN3, IN4, ENB, CHB, true);
void setup() {
Serial.begin(115200);
robot.begin();
//L298N DC Motor by Robojax.com
}
void loop() {
// robot.demo(1);
robot.rotate(motor1, 80, CW);//run motor1 at 60% speed in CW direction
robot.rotate(motor2, 70, CCW);//run motor1 at 60% speed in CW direction
delay(3000);
robot.brake(1);
robot.brake(2);
delay(2000);
robot.rotate(motor1, 100, CW);//run motor1 at 60% speed in CW direction
delay(3000);
robot.rotate(motor2, 100, CCW);//run motor1 at 60% speed in CW direction
robot.brake(1);
robot.brake(2);
delay(2000);
for(int i=0; i<=100; i++)
{
robot.rotate(motor1, i, CW);// turn motor1 with i% speed in CW direction (whatever is i)
delay(100);
}
delay(2000);
robot.brake(1);
delay(2000);
for(int i=0; i<=100; i++)
{
robot.rotate(motor2, i, CW);// turn motor1 with i% speed in CW direction (whatever is i)
delay(100);
}
delay(2000);
robot.brake(2);
delay(2000);
// Robojax L298N Library. Watch video instruction https://youtu.be/2JTMqURJTwg
}
Ce dont vous pourriez avoir besoin
-
Amazon
-
eBay
Ressources et références
-
Externe
Fichiers📁
Bibliothèques Arduino (zip)
-
robojax_ESP32_L298N_bibliothèque
robojax_ESP32_L298N_library.zip0.18 MB
Fichier Fritzing
-
ESP32-38Pin_Large
ESP32-38Pin_Wide.fzpz0.03 MB -
Driver de moteur DC L298N
L298N DC motor driver.fzpz0.11 MB