Pont en H L298N

Matériel testé : double pont en H à base de L298N

Bibliothèque nécessaire : aucune

Description

Ce circuit, très populaire et bon marché (moins de 3€), offre un bon moyen de piloter jusqu’à deux moteurs à courant continu, ou bien un moteur pas à pas, voire même un moteur brushless.

  • 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)

Cette platine utilise un circuit intégré L298N.

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.

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.

    Arrêt (moteur libre) Sens + Sens – Arrêt (moteur freiné)
 Moteur A Moteur B
In1 In3 LOW HIGH LOW HIGH
In2 In4 LOW LOW HIGH HIGH

 

Câblage

Le schéma de câblage suivant utilise le pont B.

 

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 ».

// 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);
}

 

Vous aimerez aussi...

7 réponses

  1. Zoldan dit :

    Bonjour!
    Peut-on mettre en parallele les deux sorties moteurs ( à condition que les commandes soient misent en parallele aussi!) afin de commander un moteur qui consomme 4A ???
    Merci

    • cfaury dit :

      Bonjour
      Je n’ai jamais tenté ce genre de chose … Ça se tente à mon avis.
      Je ne pense pas que ça présente de risques, ni pour le moteur, ni pour l’arduino.

      • bruno dit :

        c’est ecrit dans la doc constructeur du L298 qu’on peut le faire :
        When the repetitive peak current needed from the
        load is higher than 2 Amps, a paralleled configuration
        can be chosen (See Fig.7).

  2. Vincent dit :

    Bonjour,
    SI j’ai une alim en 24V, comment ça se passe pour brancher l’arduino ?

    • cfaury dit :

      Bonjour
      Dans le cas d’une alimentation 24V, il faut alimenter l’Arduino avec une autre source, car si le cavalier d’activation de la sortie 5V est fermé, l’alimentation ne doit pas dépasser 12V !

  3. expplorateur dit :

    attention vous avez des balises HTLM dans le code… par exemple if (Serial.available() > 0)
    ==> le &gt devrait être >

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *