Contrôle de vitesse de 2 moteurs : module L298N et Arduino

Utilisation de capteurs et composants électroniques avec Arduino.
Une fiche de tutoriel pour chaque.

Contrôle de vitesse de 2 moteurs : module L298N et Arduino

Messagepar tiptop » Lun 4 Nov 2013 19:13

Contrôle de vitesse de 2 moteurs avec un module L298N et Arduino

Image

Composants utilisés

Image

Principe de fonctionnement
Le module L298N permet de commander séparément 2 moteurs à courant continu DC de 3 à 30 V, ou un moteur pas à pas bipolaire (2 phase step motor).

Il fonctionne avec une interface de commande TTL 5V (donc compatible avec Arduino ou avec de nombreux autres micro-contrôleurs en basse tension).
Il comporte deux ponts en H pour commuter les courants (2A par pont en crête, 20W maxi).

Ce module permet de faire varier la vitesse de rotation (en modulation PWM) et d'inverser le sens de rotation des moteurs.
Il peut piloter des charges inductives (bobinages, relais), les sorties de puissances sont protégées par des diodes de roue libre anti-retour.

Applications
Ce composant est idéal pour piloter un robot à deux roues motrices, en faisant varier la vitesse de rotation d'une roue par rapport à l'autre pour tourner.
Il permet de faire fonctionner divers ensembles mécanisés, des voitures téléguidées, des pompes, des treuils, etc...
Il permet également de commander simplement un moteur pas à pas à 2 phases (4 fils).

Alimentation de puissance
Utiliser une alimentation de puissance pour les moteurs : piles, batterie, transformateur, alimentation par convertisseur de tension.
Le petit convertisseur de tension de la carte Arduino n'est en effet pas prévu pour générer de la forte puissance.

Le double pont en H de la carte L298N est équipé d'un radiateur de refroidissement (75 °C).

Câblage, pour 2 moteurs DC
Le bornier à vis bleu (3 pins) :
  • VMS --> Tension VMS de la partie puissance de 5 à 35 Volts (sur la source de puissance).
  • GND, --> Relié à la masse de l'alimentation de puissance.
  • +V --> Sortie du régulateur de la carte L298N en +5V. Permet d'alimenter des composants externes éventuels (Intensité de 0 à 36 mA), sinon non connecté.

Les 2 borniers à vis verts (2 x 2 pins)
MotorA et MotorB servent à brancher séparément 1 ou 2 moteurs à courant continu, ou les 2 bobines d'un moteur pas à pas à 2 phases et 4 fils.
  • A- --> Moteur A- (inverser les 2 fils pour inverser le sens de rotation)
  • A+ --> Moteur A+
  • B- --> Moteur B-
  • B+ --> Moteur B+

LEDs témoin
  • Sens de rotation des moteurs
  • Alimentation 5V

Signaux de commande sur les 6 pins (logique TTL : 5V = high, 0V = low).
  • EnA --> Enable moteur A, sur niveau High TTL --> vers le micro contrôleur Arduino, sortie PWM si on veut commander la vitesse.
  • In1 --> Input 1 (pont-en-H A) broches de commande digitales (1 et 2) qui sont utilisées pour commander le sens de rotation du moteur A
  • In2 --> Input 2 (pont A)
  • In3 --> Input 3 (pont B) idem pour moteur B
  • In4 --> Input 4 (pont B)
  • EnB --> Enable moteur B, sur niveau High TTL

Commandes de fonctionnement
  • Faire tourner le moteur A sens normal : IN1=H, IN2=L, ENA=H
  • Faire tourner le moteur A à l'envers : IN1=L, IN2=H, ENA=H
  • Pour arrêter rapidement le moteur A : IN1=L, IN2=L, ENA=H (ou IN1=H, IN2=H, ENA=H)
  • Pour arrêter doucement le moteur (arrêt en roue libre): ENA=L (IN1 et IN2 ignorés)

Image

Commande simultanée de deux moteurs à courant continu
Image
Branchement (avec 6 pins utilisées sur l'Arduino)

Note : On peut utiliser seulement les 2 pins EnA et EnB si la carte Arduino n'a pas besoin de gérer les sens de rotation des moteurs mais juste leur vitesse.

Exemple de code pour 2 moteurs DC

Code: Tout sélectionner
//************************************************
// Exemple d'utilisation module L298
// Commande de 2 moteurs DC
// tiptopboards.com  04 11 2013
//
//**************************************************
int ENA=5;//Branché sur Arduino pin 5(output pwm)
int IN1=2;//Sur Arduino pin 2
int IN2=3;//Sur Arduino pin 3
int ENB=6;//Sur Arduino pin 6(output pwm)
int IN3=4;//Sur Arduino pin 4
int IN4=7;//Sur Arduino pin 7
void setup()
{
 pinMode(ENA,OUTPUT);//Configuré en sorties
 pinMode(ENB,OUTPUT);
 pinMode(IN1,OUTPUT);
 pinMode(IN2,OUTPUT);
 pinMode(IN3,OUTPUT);
 pinMode(IN4,OUTPUT);
 digitalWrite(ENA,LOW);
 digitalWrite(ENB,LOW);//stop driving
 digitalWrite(IN1,LOW);
 digitalWrite(IN2,HIGH);//setting motorA's direction
 digitalWrite(IN3,HIGH);
 digitalWrite(IN4,LOW);//setting motorB's direction
 
 Serial.begin(9600);  //Serial monitor
}
void loop()
{  //Augmenter progressivement la vitesse des 2 moteurs
 for (int vitesse=0; vitesse <= 255; vitesse++){
   analogWrite(ENB,vitesse);//start driving motorB
   analogWrite(ENA,vitesse);//start driving motorA
   Serial.println(vitesse);
   delay(100);
   }
 //Une vitesse trop lente fait vibrer sans tourner le moteur
}

Ce code démarre les 2 moteurs DC et accélère leur vitesse de rotation.

Image.Image


Commande d'un moteur pas à pas (4 fils, 2 phases)
Image
On commence par identifier quels sont les fils de phase avec un multimètre, en mesurant la résistance électrique des fils pris 2 à 2.

Ici on a 6 fils sur le moteur : noir, marron , rouge(2x), orange, jaune.
Mesurer la résistance en Ohm des fils pris 2 à 2
Noir Marron Rouge Orange Jaune
Noir 150 75
Marron 150
Rouge 75 74
Orange 74 147
Jaune 147

Donc bobine_A = noir-marron, et bobine_B = jaune-orange.
Image

Câblage à réaliser
  • MotA- = noir
  • MotA+ = marron
  • MotB- = jaune
  • MotB+ = orange

Exemple de code pas à pas
Code: Tout sélectionner
//*******************************************
// Module L298N pour commander un
// Moteur 2 phases pas à pas (4 fils)
//
// Rolland tiptopboards.com 09 10 2013
//
//============================================
//Câblage du steper, utilise 6 broches
int ENA=2; // Arduino Pin 2
int IN1=3; // Arduino Pin 3
int IN2=4; // Arduino Pin 4
int ENB=5; // Arduino Pin 5
int IN3=6; // Arduino Pin 6
int IN4=7; // Arduino Pin 7

void setup() {
 pinMode(ENA,OUTPUT);  //Les 6 pins configurées en sorties
 pinMode(ENB,OUTPUT);
 pinMode(IN1,OUTPUT);
 pinMode(IN2,OUTPUT);
 pinMode(IN3,OUTPUT);
 pinMode(IN4,OUTPUT);
 //Enable A et B, utilise les 2 ponts en H
 digitalWrite(ENA,HIGH);// Activer pont A
 digitalWrite(ENB,HIGH);// Activer pont B
}
void loop(){
 // Un moteur Pas-à-pas se contrôle à l'aide de 4 battements
 // Séquences AB   A-B   A-B-  AB-  ou séquence  AB   AB-   A-B-   A-B
 
 int tps = 20;  //Délai en ms entre deux commandes de changement de pas (vitesse du moteur)
 digitalWrite(IN1,LOW);  //0110  A-B
 digitalWrite(IN2,HIGH);
 digitalWrite(IN3,HIGH);
 digitalWrite(IN4,LOW);
 delay(tps);
 digitalWrite(IN1,LOW);  //0101  A-B-
 digitalWrite(IN2,HIGH);
 digitalWrite(IN3,LOW);
 digitalWrite(IN4,HIGH);
 delay(tps);
 digitalWrite(IN1,HIGH); //1001  AB-
 digitalWrite(IN2,LOW);
 digitalWrite(IN3,LOW);
 digitalWrite(IN4,HIGH);
 delay(tps);
 digitalWrite(IN1,HIGH);  //1010  AB
 digitalWrite(IN2,LOW);
 digitalWrite(IN3,HIGH);
 digitalWrite(IN4,LOW);
 delay(tps); 
}



Jumpers de configuration
Image

Le jumper jaune 5V-EN est laissé en place pour activer le régulateur 78M05 de la carte qui fournit du 5V à la partie logique du L298N. Si on le retire il faut alimenter en 5V le module.

Les jumpers jaunes CSA, CSB déterminent les sens des courants des ponts A et B et peuvent être utilisés pour changer le sens de rotation de ces moteurs.

Les jumpers U1, U2, U3, U4 sont destinés aux résistances de pull up. Les laisser en place pour tirer Int1-Int4 à 5V.
Les retirer uniquement pour un contrôle complet des ponts en H (A et B) avec les entrées Int1-Int4 connectées sur un micro-contrôleur capable d'asservir correctement le potentiel de ces sorties.

Test des moteurs en 9V : il faut un rapport cyclique d'impulsions PWM suffisant pour que le moteur commence à tourner (sinon trop d'inertie au démarrage).
  • ici, le moteur 12V axe 4mm tourne en PWM à partir de pwm = 90 environ
  • le micro moteur tourne à PWM=40
  • la pompe à eau tourne à PWM=90

Références
Ce tutoriel est basé de sur ce document (en anglais)
http://www.geekonfire.com/wiki/index.ph ... tor_Driver
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 93
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Re: Contrôle de vitesse de 2 moteurs : module L298N et Ardui

Messagepar freddo41 » Dim 15 Jan 2017 03:21

Salut.
Tout d'abord, je suis en émerveillement devant tes tutos, tes explications, ... Vraiment : BRAVO !!!

Je me permets de te poser une petite question probablement idiote mais quand même.

J'ai monté pour ma classe un prototype arduino uno avec shield sensor v5 et module de puissance L298N.

Dans ton tuto, tu précises que les moteurs peuvent être alimentés de 3V à 35V. Sur mon proto, ce sont des moteurs de 6V. Mon L298N, je l'alimente avec une pile 9V. Mais, lorsque ce prototype à chenille évolue, on sent que les moteurs ont un peu de mal. Ils peinent comme s'ils étaient sous alimentés. Et la pile chauffe un peu, ça lui tire sur la tronche.

Dois-je augmenter mon alimentation du module L298N (Passer en 12V ou plus) ?

Merci pour ton éclaircissement

Freddo41
(prof qui doit appliquer une réforme sans formation et qui s'autoforme !!!)
freddo41
 
Messages: 5
Inscription: Mar 23 Déc 2014 16:34

Re: Contrôle de vitesse de 2 moteurs : module L298N et Ardui

Messagepar freddo41 » Dim 15 Jan 2017 20:14

Bon ça marche. Ma pile de 9V était fatigué.
En revanche, qu'est-ce que ça consomme !!! Ma nouvelle pile de 9V s'est épuisée en 20min.
A bientôt.
Freddo41
freddo41
 
Messages: 5
Inscription: Mar 23 Déc 2014 16:34

Re: Contrôle de vitesse de 2 moteurs : module L298N et Ardui

Messagepar tiptop » Mer 16 Aoû 2017 11:47

l298_pins.gif
l298_pins.gif (565.02 Kio) Vu 42906 fois

Le brochage de la seconde version (miniaturisée) de la carte.
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 93
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38


Retourner vers Capteurs et composants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 10 invités

cron