- Description
Ce circuit, bon marché (moins de 3€), offre un bon moyen de piloter jusqu’à deux moteurs à courant continu, ou bien un moteur pas à pas.
- Il peut délivrer jusqu’à 2A en pointe et 20W en continu.
- Il possède son propre circuit d’alimentation logique (permettant d’alimenter l’Arduino)
- Commande
Les ports ENA et ENB permettent de gérer l’amplitude de la tension délivrée au moteur, grâce à un signal PWM (MLI en Français).
Les ports In1, In2 pour le moteur A et In3, In4 pour le moteur B, permettent de contrôler le pont en H et par conséquent le sens de rotation des moteurs.
- Principe de commande
- Câblage
Le schéma de câblage utilisant les deux ponts.
- Programmation
Le programme suivant permet de mettre en mouvement le moteur connecté au pont B en passant par le port série.
Par l’intermédiaire du moniteur série, on envoie un entier entre -255 et 255 pour actionner le moteur, la valeur 0 signifiant « arrêt du moteur ».
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | // Pont en H L298N //Ports de commande du moteur B int motorPin1 = 8; int motorPin2 = 9; int enablePin = 5; // Vitesse du moteur int state = 0; void setup() { // Configuration des ports en mode "sortie" pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(enablePin, OUTPUT); // Initialisation du port série Serial.begin(9600); } void loop() { if (Serial.available() > 0) { // Lecture de l'entier passé au port série state = Serial.parseInt(); // // Sens du mouvement // if (state > 0) // avant { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); Serial.print("Avant "); Serial.println(state); } else if (state < 0) // arrière { digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); Serial.print("Arriere "); Serial.println(state); } else // Stop (freinage) { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, HIGH); Serial.println("Stop"); } // // Vitesse du mouvement // analogWrite(enablePin, abs(state)); } delay(100); } |