dimanche 24 avril 2016

Fabriquons notre propre pont en H

Jusqu'à maintenant, dans chaque projet impliquant le contrôle d'un ou deux moteurs DC par un microcontrôleur, j'ai utilisé un circuit intégré spécialement conçu à cette fin, comme le populaire L293D.  Mais il est très facile de construire soi-même un contrôleur de moteur à partir de quelques transistors, et c'est ce que nous allons faire aujourd'hui.




Pourquoi un contrôleur de moteur?

Supposons que vous avez décidé de contrôler un moteur au moyen d'une carte Arduino (ou un autre microcontrôleur):  pourquoi ne pas simplement brancher le moteur directement sur une de ses sorties?

Les raisons sont multiples.  D'abord, pour protéger l'Arduino.  La résistance d'un moteur n'est souvent pas très grande:  si vous soumettez le moteur à une tension de 5 V, le courant qui traverse la sortie de l'Arduino pourrait dépasser significativement les valeurs tolérables par l'Arduino.  De plus, un bobinage en rotation dans un champ magnétique génère une tension (c'est le principe de la génératrice) qui pourrait également être dommageable pour l'Arduino.  Et dans bien des cas, votre moteur nécessitera une tension supérieure à 5 V pour fonctionner correctement.

La solution:  un transistor!  Un petit courant issu de la sortie de l'Arduino permet de contrôler un courant plus intense circulant dans le moteur.


Pourquoi un pont en H?

Le circuit illustré plus haut (impliquant un seul transistor) est parfait si vous désirez que votre moteur tourne toujours dans la même direction:  si la sortie numéro 5 de l'Arduino est à 5 V, le moteur tourne.  Si la sortie numéro 5 est à 0 V, le moteur ne tourne plus (et vous pouvez contrôler la vitesse de rotation du moteur grâce à la modulation par largeur d'impulsion "PWM").

Mais dans bien des cas, on veut que le moteur tourne parfois dans une direction, et parfois dans l'autre (par exemple:  pour un robot qui est capable d'avancer et de reculer).  Et c'est là qu'un pont en H devient incontournable.

Voici un schéma de pont en H constitué de 4 transistors (on peut aussi faire un pont en H avec des interrupteurs ou avec des relais).

Lorsque la tension de la pin 6 de l'Arduino est de 5 V et que la tension de la pin 5 est nulle, les transistors Q1 et Q3 forment un trajet conducteur et le courant circule vers la droite dans le moteur.

Si on inverse la polarité, ce sont les deux autres transistors qui deviennent conducteurs, et le courant circule maintenant vers la gauche dans le moteur.

Les diodes servent à protéger le microcontrôleur contre les courant générés par la rotation du moteur.

Expérimentation sur breadboard

Vous pouvez facilement construire un pont en H sur une breadboard afin d'explorer son fonctionnement.  Vous aurez besoin de deux transistors PNP et deux transistors NPN.  N'importe quel transistor commun fera l'affaire si vous contrôlez un petit moteur DC fonctionnant sous quelques volts (des transistors de puissance sont nécessaires si votre moteur est plus énergivore).  J'ai fait ce test avec des 2N3906 et 2N3904 (un choix adéquat pour expérimenter, mais qui serait plus discutable pour une application réelle, tel que discuté dans ce blog) .


Sketch Arduino

Voici le sketch utilisé: le moteur tourne lentement dans une direction pendant 5 secondes, puis il tourne rapidement dans l'autre direction pendant 5 autres secondes.  La vitesse du moteur est contrôlée par PWM (modulation par largeur d'impulsion), c'est pourquoi vous devez vous assurer d'utiliser des sorties de l'Arduino qui supportent le PWM (comme par exemples les pins 5 et 6).

Pour la rotation à vitesse plus lente, il se peut que vous soyez obligés d'augmenter le rapport cyclique utilisé dans le sketch, si vous constatez que votre moteur ne tourne que dans une seule direction.




 

Construction d'un Franken-pont-en-H

Suite à cet essai concluant, j'ai décidé construire un pont en H plus permanent,soudé sur une perfboard.  Pour qu'il soit plus polyvalent, je tenais à utiliser des gros transistors de puissance (format TO-220) à la place des petits transistors que j'avais utilisé dans mon circuit expérimental.  De cette façon, je n'aurai pas à m'inquiéter outre-mesure de la possibilité que mes transistors grillent en cas de courant trop élevé.

Mais en cette époque où les revendeurs chinois nous proposent de robustes contrôleurs complets à base de L298 pour moins de $2 (alors qu'un véritable L298 coûte beaucoup plus cher que ça...), je voulais que ma construction soit pertinente d'un point de vue économique.

Je vous présente donc mon Franken-pont-en-H:  un pont en H constitué exclusivement de composants de récup qui ne m'ont rien coûté (bon, d'accord:  j'ai payé pour le bout de perfboard, et pour les connecteurs car ils sont neufs).   Le tout fonctionne correctement, évidemment.




Yves Pelletier   (TwitterFacebook)

4 commentaires:

  1. Merci pour cet article.
    J'aime bien la justification de l'utilisation directe des sorties de l'Arduino.
    Néanmoins pour le schéma du transistor seul je suis dubitatif : pourquoi ne pas avoir relié une patte - de la pile sur une borne du moteur et l'autre sur la "sortie" du transistor ? Pourquoi mettre cette résistance en parallèle avec le moteur sur la borne '+' de la pile ?

    RépondreSupprimer
    Réponses
    1. Il s'agit d'une diode et non d'une résistance.

      Supprimer
    2. oups ....
      bon et après relecture les choses me semblent évidentes, le transistor joue le rôle d'interrupteur c'est tout.

      Supprimer
  2. Bonjour, J'ai réalisé un pont en H doublé d'un 5ème transistor pour faire fonctionner un moteur avec une télécommande de modélisme. Tout fonctionne bien pourtant j'alimente avec des Lipo de 8 ou 12 volts et je n'ai jamais plus de 4.5 V environ à la sortie. Je précise que c'est tout des TIP 121. Si quelqu'un pouvait m'expliquer pourquoi, je lui en serais reconnaissant! Merci d'avance.

    RépondreSupprimer