La PWM : Qu’est-ce que c’est ? (2)

Piloter un moteur

. Par : Dominique, Guillaume, Jean-Luc. URL : https://www.locoduino.org/spip.php?article120

Dans le premier article concernant la PWM, « La PWM : Qu’est-ce que c’est ? (1) », nous avons abordé l’alimentation d’une DEL par une tension hachée. Nous allons maintenant aborder la commande d’un moteur à courant continu, c’est à dire le type de moteur qui équipe nos locomotives, par une PWM. 

La manière de s’y prendre diffère pour plusieurs raisons :

  • les moteurs employés en modélisme ferroviaire ont une tension d’alimentation qui est plus élevée que la tension de l’Arduino, généralement 12V ;
  • le courant nécessaire est également plus élevé, environ 10 fois, que ce que peut fournir une sortie de l’Arduino ;
  • contrairement à une DEL, un moteur est une charge dite inductive. C’est à dire que lorsque l’alimentation du moteur est coupée, le courant ne s’arrête pas instantanément de circuler. Il diminue progressivement.

La conséquence directe est qu’une sortie PWM de l’Arduino ne peut pas commander directement un moteur. Il est nécessaire d’amplifier le signal, à la fois en tension et en courant. L’amplificateur doit être adaptée au courant consommé par le moteur et doit fournir la tension nécessaire. Elle doit aussi être capable de suivre la fréquence de la PWM.

Deux possibilités s’offrent à nous : utiliser un transistor MOSFET de puissance ou bien un pont en H. Nous allons tout d’abord examiner la première solution.

Amplification via un transistor MOSFET

Il existe 2 types de MOSFET, ceux à canal N et ceux à canal P. Les MOSFET sont des composants à 3 broches : le Drain (D), la Source (S) et la Grille (G). Voici le symbole des deux types de MOSFET.

PNG - 12.3 kio

Dans l’emploi que nous allons en faire, on peut voir ces transistors comme des interrupteurs. D et S sont les deux bornes de l’interrupteur et la tension de G détermine la position de l’interrupteur. Contrairement à un interrupteur mécanique, les MOSFET on un sens. Pour un MOSFET canal N, la tension de S doit être plus faible que la tension de D. On connectera donc S côté masse et D côté +12V. Pour un MOSFET canal P, c’est l’inverse. S doit être connecté côté +12V et D côté masse. La tension qui est appliquée entre G et S détermine si l’interrupteur est fermé ou non. Un MOSFET possède une tension de seuil. Pour un MOSFET canal N si la tension entre G et S est plus grande que la tension de seuil, l’interrupteur est fermé (le MOSFET est passant) et le courant circule sinon l’interrupteur est ouvert (le MOSFET est bloqué). Pour un MOSFET canal P, si la tension entre S et G est plus petite que la tension de seuil, l’interrupteur est fermé et le courant circule.

Les transistors MOSFET sont extrêmement sensibles à l’électricité statique. Les manipuler sans précaution peut aboutir à les endommager voire à les détruire. Il est impératif de s’équiper d’un bracelet antistatique qui sera relié à la terre. Les stations de soudage possèdent une prise de terre destinée à recevoir le câble du bracelet antistatique. De manière générale, il est préférable de procéder de même pour les circuits intégrés. Si la plupart des composants à base de transistor MOSFET sont protégés contre l’électricité statique, le risque de casse existe.

Commençons par un MOSFET canal N. Un des modèles les plus répandus est l’IRF540N. Le courant maximum est de 33A et la tension maximum de 100V. très largement suffisant pour nos usages. Sa tension de seuil est comprise entre 2 et 4V. On peut donc en mettant 5V sur la grille fermer l’interrupteur de manière fiable.

JPEG - 44.5 kio

On trouve de nombreux exemple de connexion pour l’Arduino, par exemple celui-ci :

PNG - 29.9 kio

Vous pouvez remarquer la diode en parallèle avec le moteur, il s’agit d’une diode roue libre. Ce type de montage a déjà été présenté dans « Les diodes classiques » pour une commande de relais. Comme cela a été dit plus haut le moteur est une charge inductive et lorsque le MOSFET cesse de conduire le courant ne s’arrête pas instantanément de circuler. Comme il doit aller quelque part, la diode lui offre un chemin. Le courant circule donc en boucle dans le moteur via la diode jusqu’à ce que la résistance du moteur le dissipe sous forme de chaleur. En l’absence de diode roue libre ce courant provoquerait une augmentation de tension importante sur le Drain du MOSFET avec le risque de l’endommager.

La résistance de 100kΩ a pour rôle de maintenir le MOSFET bloqué en tirant G à la masse tant que la broche de l’Arduino n’est pas programmée. En son absence G flotterait et selon la charge électrique présente le MOSFET pourrait devenir passant avec un démarrage intempestif du moteur.

La résistance de 270Ω évite que trop de courant ne soit tiré de la broche de l’Arduino. En effet, les MOSFET ont sur G l’équivalent d’un condensateur de valeur assez importante. Sans cette résistance le courant serait ponctuellement important et dépasserait les capacités de l’Arduino. Avec 270Ω, le courant instantané ne dépasse pas 19mA.

On choisit la broche 3 comme PWM. Le montage sur breadboard est le suivant :

PNG - 240.8 kio

Tout se passe très bien avec la fréquence par défaut de la PWM de l’Arduino, soit 490Hz sur la broche 3. Ici la PWM est réglée à 20, soit un rapport cyclique d’un peu moins de 8%. Le programme de test est réduit à sa plus simple expression.

void setup()
{
  analogWrite(3, 20);
}

void loop()
{
}

Le signal jaune est pris sur la broche 3 de l’Arduino et le signal bleu entre le MOSFET et le moteur, c’est à dire au niveau de drain. Quand le signal jaune est à l’état haut, le MOSFET est passant et le drain est tiré à 0. Le moteur est alimenté. Quand le signal jaune est à l’état bas, le drain flotte et le moteur n’est pas alimenté. Le MOSFET agit donc comme un interrupteur commandé par la PWM de l’Arduino.

JPEG - 152.7 kio

Dans un prochain article, nous augmenterons la fréquence de la PWM afin de remédier à deux problèmes :

  • le bruit. À 490Hz, le moteur émet un Si légèrement faux et assez agaçant ;
  • le problème de dissipation thermique dans le moteur à cette fréquence. Ce problème est exposé sur mon blog : Tension hachée et pertes par effet Joule. Si vous exploitez en N ou en H0e, ce problème vous concerne et n’est pas à prendre à la légère.