Commande d'un moteur à courant continu

Un module ARDUINO peut très facilement commander un moteur à courant continu, avec ou sans inversion de marche.

1. Commande sans inversion du sens de marche

L'ARDUINO peut piloter directement un petit moteur à courant continu en le connectant entre une sortie PWM ( par exemple la sortie 3 d'un ARDUINO UNO) et la masse. Cependant, le courant est limité à 50 mA environ, ce qui est insuffisant pour la plupart des moteurs.

Il suffit d'insérer un transistor de puissance entre l'ARDUINO et le moteur pour pouvoir le commander, comme indiqué sur le schéma ci-dessous.



Pour faire varier la vitesse d'un moteur on peut faire varier la tension d'alimentation à ses bornes mais dans ce cas une partie importante de l'énergie est consommée par le dispositif d'alimentation. On préfère l'alimenter de façon discontinue avec un hacheur et faire ainsi varier la tension moyenne à ses bornes.
On parle alors de Modulation par Largeur d'Impulsions (MLI), ou Pulse Wide Modulation (PWM)
Quand le transistor est saturé, le moteur est alimenté à la tension maximale. Le courant est important dans le transistor mais la tension entre collecteur et émetteur est presque nulle, il n'y a donc pas d'échauffement du transistor.
Quand le transistor est bloqué, le moteur n'est plus alimenté. La tension entre collecteur et émetteur est maintenant maximale mais il n'y a plus de courant dans le transistor.
Le rendement de ce dispositif d'alimentation est donc très bon.
La fréquence est suffisamment élevée (environ 1 KHz) pour avoir une rotation continue et sans bruit du moteur.

Exemple de commande par un ARDUINO
Une sortie PWM ( la sortie 3 dans l'exemple suivant) de l'ARDUINO est utilisée pour commander le transistor
La commande à utiliser est analogWrite(3,vitesse):
analogWrite(3, 0); arrête le moteur
analogWrite(3, 255); alimente le moteur avec la tension maximale
analogWrite(3, 64); alimente le moteur au quart de la tension

2. Commande avec inversion de marche

Si l'on veut faire varier la vitesse et aussi le sens de marche, il y a au moins deux solutions possibles: l'utilisation d'un relais ou d'un pont en H

2.1 Utilisation d'un relais

On peut simplement insérer un relais 2RT entre la sortie du transistor de puissance et le moteur comme indiqué sur le schéma ci-dessous.



La bobine du relais est connectée à un transistor dont la base est reliée à l'ARDUINO par l'intermédiaire d'une résistance de 10K.
Une sortie numérique de l'ARDUINO (par exemple la sortie 4) est utilisée pour activer le relais et donc inverser le sens de marche.

2.2 Utilisation d'un pont en H

Un pont en H permet de disposer d'un courant important et d'inverser le sens du marche du moteur. Le principe de ce dispositif est décrit sur Wikipédia. Vous pouvez y accéder en cliquant ici..

Il est très facile d'en réaliser un soi-même. Il suffit de 4 transistors identiques et de 4 résistances.
Le shéma que j'ai réalisé est donné ci-dessous.



Les entrées C1 et C2 sont à connecter à deux sorties PWM de l'ARDUINO UNO. Les 4 résistances ont une valeur de 1 KiloOhms. Les transistors à utiliser dépendent du courant à fournir au moteur. Pour un courant inférieur à 500 mA, on peut utiliser des transistors BC337 à très faible coût. Pour un courant compris entre 500 mA et 3A, j'utilise des transistors de puissance de type BD243C.

Le principe de fonctionnement est le suivant:

c1= 0 c2=0 le moteur est arrêté, les 4 transistors sont bloqués
c1>0( PWM) c2=0 le moteur tourne dans un sens, les transistors T1 et T4 sont passants
c1= 0 c2>0(PWM) le moteur tourne dans l'autre sens, les transistors T2 et T3 sont passants
c1>0 c2>0 interdit: destruction des transistors (les 4 transistors sont passants et il n'y a pas de charge pour limiter le courant. Il est prudent de mettre une ampoule en série entre l'alim et l'entrée du circuit, ce qui évitera de détruire les transistors dans cette situation.

Les commandes envoyées par l'ARDUINO sur les sorties PWM 3 et 5 sont les suivantes:
(la vitesse est comprise entre 0 et 255)
Moteur dans un sens:
analogWrite(3, vitesse);
analogWrite(5, 0);
Moteur dans l'autre sens
analogWrite(3, 0);
analogWrite(5, vitesse);
Moteur à l'arrêt
analogWrite(3, 0);
analogWrite(5, 0);


2.3 Utilisation d'un module L298

On trouve facilement dans le commerce des ponts en H (par exemple le module L298 ).
La photo du module est donnée ci-dessous.



Voici le cablage à réaliser pour obtenir une ou deux sorties vers moteur.

Le bornier à vis bleu (3 pins) :
VMS --> Tension VMS de l'alim de puissance de 12 à 20 Volts (sur la source de puissance).
GND, --> Relié à la masse de l'alimentation de puissance et à la masse de l'ARDUINO
+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)
Le signal de commande du moteur est disponible sur les 2 sorties MotorA et MotorB

Signaux de commande sur les 6 pins (logique TTL : 5V = high, 0V = low).
Pour commander le moteur A:
L' entrée EnA est à relier au +5V de l'ARDUINO
Les entrées In1 et In2 qui commandent le moteur A sont à relier aux sorties numériques 3 et 5 de l'ARDUINO qui délivrent un signal PWM.

La commande de vitesse est réalisée en utilisant un potentiomètre linéaire de 10 KOhms connecté comme suit:
broche 1 au +5V
broche 2 (broche du milieu) reliée à l'entrée A0 de l'ARDUINO.
broche 3 à la masse

L'interrupteur I1 qui sert à commander le sens de marche est relié à l'ARDUINO sur la broche 8.

Le schéma du montage est donné ci-dessous.



Vous pouvez télécharger le programme pour l'ARDUINO UNO en cliquant ici.

3. Asservissement de la vitesse

L’asservissement en vitesse d’un moteur à courant continu permet d'obtenir une vitesse constante lorsque la charge appliquée au moteur varie, ce qui peut être très utile en modélisme et en robotique.
On suppose que le moteur est alimenté par un signal PWM. La mesure de la vitesse s'effectue en mesurant la force contre électromotrice (fcem) générée par le moteur lorsque l'impulsion PWM est à zéro. En effet, la fcem d'un moteur à courant continu est rigoureusement proportionnelle à la vitesse de rotation (E = k.V), quand l'excitation est constante bien sûr ce qui est généralement le cas.

L'asservissement consiste tout simplement en la récupération d'une information sur la vitesse du moteur (ici grâce à la fcem) puis en son utilisation pour ajuster la tension de commande (durée dt des impulsions PWM) . Il existe de nombreuses méthodes d'asservissement. La plus connue est le PID (Proportionnel Intégrale Dérivée) qui est décrite sur le site de Telecom-Robotics.

Le principe de base de tout asservissement est de prendre des mesures à la sortie, de les réinjecter à l'entrée pour comparer à la consigne afin d'obtenir l'erreur (ie la différence entre la mesure réelle et la consigne demandée). Quand elle est nulle, le moteur a atteint la vitesse de consigne et donc il n'y a plus rien à actionner. Ce système est dit en boucle fermée, puisque la sortie du système est réinjectée dans l'entrée. Pour mon application, je me suis limité à un asservissement proportionnel, mais il n'est pas très difficile d'ajouter les autres modes d'asservissement en suivant les indications données sur le site de Telecom Robotics.

Le programme pour l'ARDUINO est le suivant.
Soit t la période du signal PWM (t=1ms) et dt la durée de l'impulsion à 5 Volts envoyée par l'ARDUINO au moteur.
Soit x la valeur de la fcem reçue sur l'entrée A0 de l'ARDUINO et soit xref la valeur de consigne qui détermine la vitesse.
L'équation qui permet d'asservir la vitesse s'écrit:
dt = dt + (int) (k * (xm - xref));
Le facteur k est à déterminer expérimentalement en fonction des caractéristiques et de la charge du moteur.

3.1 Asservissement de la vitesse d'un moteur sans inversion du sens de marche

Le schéma du montage est donné ci-dessous.



La fcem du moteur est transmise à une entrée analogique de l'ARDUINO (A0 dans l'exemple ci-dessus). La tension d'entrée doit être inférieure à 5 volts d'où l'utilisation d'un diviseur à résistances (33K et 10K dans l'exemple ci-dessus).
Vous pouvez télécharger le programme pour l'ARDUINO UNO en cliquant ici..

3.2 Asservissement de la vitesse d'un moteur avec inversion du sens de marche et module L298

Le schéma du montage est donné ci-dessous.



La fcem du moteur est obtenue en faisant la différence des deux signaux reçus sur les deux entrées analogiques A1 et A2 de l'ARDUINO. Les tensions d'entrée doivent être inférieures à 5 volts d'où l'utilisation de diviseurs à résistances (47K et 10K).
Vous pouvez télécharger le programme pour l'ARDUINO UNO en cliquant ici.

Retour page ARDUINO

Retour page d'accueil