Raspberry Lab

Tutoriel Raspberry Pi
Module L298N : Contrôle de moteurs à courant continu

Le Raspberry Pi est parfaitement adapté à de nombreux projets de robotique. Les moteurs sont largement utilisés dans ces types de projet. Dans ce tutoriel, nous allons voir comment contrôler jusqu'à deux moteurs à courant continu grâce au double pont H L298N.

Il existe trois grandes catégories de moteurs :

Dans ce tutoriel, nous allons voir comment contrôler jusqu'à deux moteurs à courant continu grâce au double pont H L298N.
Avant de commencer, et pour bien comprendre comment le module fonctionne, voici une rapide présentation du pont H en électronique :

Information

Qu'est-ce qu'un pont en H en électronique ?

En électronique un pont en H est un circuit qui permet de faire passer le courant dans un sens ou dans l'autre à travers un dipôle. Ce genre de circuit est très utile pour choisir le sens de rotation d'un moteur. En effet, en inversant l'alimentation d'un moteur, celui-ci va changer de sens.

Schématiquement, voilà le principe de fonctionnement du pont H, qui résume l'explication ci-dessus.
A, B, C, D sont modélisés par des interrupteurs, dans la réalité, ce sont des transistors. Pour simplifier, un transistor est un interrupteur, de taille pouvant être nanoscopique, contrôlable par une impulsion électrique.


Il suffit alors de contrôler les interrupteurs pour choisir le sens de rotation du moteur. C'est justement ce que fait le module L298N !

Prérequis

Pour contrôler des moteurs CC à l'aide d'un Raspberry Pi, il faut :

Une fois tous les éléments réunis, on peut passer au branchement.

Branchement du module

Voici pour commencer une vue du module L298N mettant en évidence ses entrées/sorties.

Voici le branchement que je vous propose pour contrôler vos moteurs CC.



Utilisation du module en Python

Maintenant que tout est branché correctement (ça fait pas mal de fils !), intéressons-nous au code. Le programme ci-dessous implémente les principales fonctions pour faire tourner dans un sens ou dans l'autre un moteur.
La commande du module est en fait très simple. Pour faire tourner le moteur 1 (resp. 2) dans un sens, on met IN1 sur 5V et IN2 sur 0V. Pour inverser le sens de rotation, il suffit d'inverser le 5V avec le 0V.

Gestion de la vitesse de rotation

Avant de terminer ce tutoriel, voyons comment contrôler la vitesse de nos moteurs. Pour faire varier la vitesse d'un moteur sans changer la tension d'entrée de ce dernier, on va "tricher" un peu. Plutôt que d'envoyer une tension continue au moteur (+VCC en permanence), on va délivrer une tension qui alterne entre +VCC et 0V.
On définit par rapport cyclique la division entre le temps haut et la période (temps haut + temps bas). Le rapport cyclique est donc une valeur comprise entre 0 et 1. Plus elle est proche de 1, plus le moteur tournera vite.

Le moteur va donc être alimenté pendant un certain temps, donc se mettre à tourner, puis l'alimentation est coupée pendant un second temps. Grâce au principe d'inertie, le moteur n'a pas le temps de s'arrêter et va juste tourner de moins en moins vite.

En Python, l'objet PWM (Pulse Width Modulation) permet de faire varier le rapport cyclique de la sortie d'un GPIO. Appliqué à l'entrée Enable du moteur 1 par exemple, on gère la vitesse comme ceci :

La fréquence est à choisir en fonction du moteur utilisé. Essayer différentes valeurs pour trouver une valeur acceptable, c'est-à-dire une valeur pour laquelle le moteur ne fait pas d'à-coups (valeur de fréquence trop faible) mais tourne quand même sans faire trop de bruit (valeur de fréquence trop élevée).


Il ne reste plus qu'à utiliser tout ça pour divers projets de robotique !

Voir la version complète du tutoriel (commentaires, notation)