[Tech] Fail en H et gain d’expérience

A l’origine, cet article devait également parler de moteurs brushless, mais j’ai décidé d’en faire deux articles, car cela aurait été trop long. Cet article est déja long, car j’ai volontairement détaillé son contenu pour qu’il soit facile à comprendre.

Vous connaissez tous les ponts en H: ce sont ces réseaux de transistors de puissance qui servent à changer le sens de rotation des moteurs. Plus généralement, ce sont des éléments de commande de puissance permettant le changement du sens du courant dans chaque ligne de puissance. On peut s’en servir pour plein de choses: commander un moteur DC, pas à pas, ou brushless, piloter un élément Peltier, etc. ou tout élément de puissance nécessitant un changement rapide du sens du courant qui le traverse.

Si on a pas besoin de commuter rapidement le sens du courant, un relais 2RT fait l’affaire :)

Nous verrons plus tard comment fonctionne un moteur brushless. Pour l’instant, disons seulement qu’il faut donc une carte de commutation pour changer le sens du courant dans les phases du moteur. Pas de secret, il y a plein de docs sur le sujet sur Internet. Cette carte de commutation génère les signaux logiques (0V-5V), mais évidemment, il faut des transistors de commande.

Il y a deux manières de réaliser un pont en H avec des MOSFETs:

Types de ponts
Types de ponts
  • Soit avec des FETs de type N coté « masse », et des FETs de type P coté « alim ». C’est cette solution que j’ai choisie.
  • Soit avec uniquement des MOSFETs de type N, et un montage « compliqué » qui génère des tensions flottantes pour commander les FETs du coté « alim ». Des chips intégrés existent, mais pour un proto, ça n’est pas du tout amusant.

Pour rappel, le pilotage d’un FET se fait en appliquant une tension entre Grille et Source (VGS = Ug-Us), ce qui autorise le passage d’un courant entre drain et source (Id).

Pour le FET N, cette tension VGS doit être positive. Le FET N est conducteur quand sa grille est à une tension supérieure à sa tension de déclenchement (5-6V environ pour les MOSFETs de puissance), et il est isolant quand sa grille est à la masse. Entre les deux, le FET est dans une zone où il se comporte linéairement, mais la pente de la courbe Id en fonction de Vgs est très raide, il y a beaucoup de variations entre différents composants d’une même série, et les MOSFETs de puissance détestent travailler dans ce mode « résistif » où ils chauffent beaucoup. Mais ça marche, j’ai déja fait une source de courant variable de cette manière, en utilisant un ampli-op pour asservir la tension aux bornes d’un shunt (avec un gros radiateur, et un MOSFET N qui supportait 100A – en commutation, car en linéaire, c’est beaucoup moins).

Pour le FET P, cette tension VGS doit être négative. Et la source est reliée à l’alimentation. Le FET P est conducteur quand sa grille est à une tension inférieure d’environ 5-6V à la tension d’alim du moteur, et il est isolant quand sa grille est à la tension d’alimentation. Attention, je répète je n’ai pas dit que la tension de grille était à 5V, j’ai bien dit 5V en dessous de la source! Pour une tension d’alim de 12V, le FET P connecté à l’alim est donc totalement conducteur quand la tension sur sa grille est en dessous de 7V (=12-5).

On remarque vite que des niveaux logiques ne conviennent pas pour piloter des MOSFETs. Les courants débités par les microcontrôleurs sont déjà un problème, ils sont trop faibles, ce qui va ralentir le temps de commutation des FETs (et donc les faire chauffer). Les tensions surtout posent problème:

  • A zéro volts, on peut bloquer le FET N, et rendre le FET P passant.
  • Mais à 5 volts, le FET N est partiellement passant, et le FET P est toujours passant, car il reste encore 7V (12-5 dans notre cas) entre G et S.

Il faut donc translater ces niveaux de tension à des valeurs qui permettent de faire fonctionner les FETs.

Mon idée initiale a été d’utiliser des transistors bipolaires que j’avais déja, des BC547 et BC557, et des résistances de pull up/down pour réaliser ces translateurs de niveau. Voici en gros le schéma utilisé (les transistors supplémentaires coté N sont censés être des inverseurs pour que toutes les commandes soient positives:

Pont à pilotage Bipolaire
Pont approximativement pifométrique, qui aurait dû marcher. Dessin Kicad.

Grossière erreur, surtout du coté des FET N : les valeurs de composants utilisés ont été calculés de manière totalement « proto-pifométrique-fond-de-tiroir », je fais passer du courant dans la base mais pas trop, ça saturera à tous les coups, ben… non, ça ne marche pas! Une mesure rapide des niveaux de tension obtenus m’a rapidement montré des tensions bien trop faibles pour commuter les FET N de manière fiable. Après quelques minutes de fonctionnement, un passage de doigt sur les FET m’a révélé une température bien au delà du raisonnable (je me suis pas brûlé, mais ma sueur s’est évaporée avec un petit pshitt), et maintenant, le moteur saute des pas, alors qu’au début de la manip, au moins, toutes les étapes de la commutation étaient observables. J’ai donc explosé au moins un FET N par l’épreuve du feu. Contrairement aux régulateurs de tension et autres, les FETs ne sont donc pas du tout protégés en température…

Mon erreur a été de négliger le pilotage correct des MOSFETs. Ce montage aurait dû marcher, je ne pense pas qu’il soit faux, c’est un problème de choix de composants.

Je dois dire que je suis passé à deux doigts de laisser tomber ce sous-projet (alors que je néglige ma shapeoko), qui était censé être un bricolage rapide du week end. Tout ceci se passait, bien entendu, le dimanche soir à 1h du matin, avec le boulot le lendemain, et pas mal de fatigue accumulée. Un peu désespéré, j’ai googlé « mosfet drive » un peu plus longtemps que d’habitude, et je suis tombé sur cette magnifique page qui expliquait exactement ce que j’avais besoin de savoir: le B-A-BA du pilotage des mosfets avec des composants discrets:

http://modularcircuits.tantosonline.com/blog/articles/h-bridge-secrets/h-bridge_drivers/

Cet article fait en fait partie d’une grande série:

http://modularcircuits.tantosonline.com/blog/articles/h-bridge-secrets/

Voyez vous, ce n’est pas que j’adore réinventer la roue, mais je veux comprendre ce que je fais, alors utiliser un circuit intégré pour piloter un FET dans un prototype, ce n’est pas mon truc. Je sais que ça existe, je sais que ça marche, donc je n’utiliserais ce genre de circuit que si, justement, la compréhension du pilotage des FET n’est pas le point central du projet.

Bref, malgré l’envie de dormir, je lis la page sus-citée, qui mentionne un montage particulièrement intéressant. Je vous la fais en résumé: Puisque le problème des FET est leur pilotage par des niveaux logiques, eh bien on essayons d’utiliser des FETs dont les tension de commutation sont compatibles avec des niveaux logiques. Ces FETs existent, mais ils ne sont pas capables de commuter de grosses charges.

Ce translateur de niveau est un simple MOSFET N dont le niveau logique est compatible avec des signaux logiques. On peut utiliser pour ça le BS170, qui est un FET N de faible puissance, mais dont la tension de déclenchement est de 3V, c’est directement compatible avec un signal logique. Ce MOSFET est câblé en drain ouvert (équivalent du collecteur ouvert) et peut donc « clamper » sa sortie à la masse, qui sera le niveau « 0″. Le niveau « 1″, lui, est indéfini, il est présent quand le FET est isolant, et sa tension est définie par un pull-up externe, que l’on connecte donc entre le drain et le +12V. On a donc construit un translateur de niveau inverseur.

Le problème est maintenant déplacé: on sait transformer des signaux 0V-5V en signaux 0V-12V, mais le signal haut (+12) n’est pas très franc: A cause de la capacité d’entrée du FET, la résistance du pull-up implique un temps de commutation plus élevé (T=RC), ce qui va certaiment faire chauffer le transistor. On peut régler ce problème en diminuant le pull-up (mais la conso augmentee inutilement) ou en intercalant un inverseur CMOS discret, constitué d’une paire de mos complémentaires (BS170 et BS250): Cet inverseur sera très rapidement déclenché par la tension issue du pull-up, mais il pourra fournir un courant élevé au FET final, car cette paire est directement connectée à l’alimentation, sans résistance. Voici à quoi cela ressemble:

Pilotage CMOS
Pilotage CMOS (R= 4K7) Chaque MOSFET de puissance a droit au même circuit.

J’insiste sur ce point du chargement correct et rapide de la capacité d’entrée des transistors MOSFET, car c’est un sujet très important pour la commutation de (grande) puissance. Pendant le chargement, le FET est demi-passant, et c’est principalement à ce moment qu’il chauffe. Ce n’est pas négligeable, car en PWM, il y a beaucoup de commutations! Regardez un datasheet, la capacité est donnée directement en nano-coulombs, ce qui donne le temps de commutation du FET: Q=IT -> T=Q/I, le temps de commutation est donc d’autant plus court que le courant de commutation est important.

Il peut y avoir un dernier problème, qui ne nous concerne pas vraiment, mais qui devient important si les tensions de pilotage sont plus élevées: la grille d’un FET ne supporte pas toujours la tension d’alimentation du moteur. Il y a en général une limite (destructive) vers 15V. On va alors piloter la grille du FET via un régulateur shunt Résistance Série/Zener à la masse, ce qui évite de le détruire.

Je n’ai pas abordé le sujet des ponts à base de FET N uniquement, il faut savoir qu’ils ont besoin d’une pompe de charge pour produire une tension VGS suffisante pour le FET coté alim. En général, cette pompe implique que le FET supérieur ne peut pas rester enclenché pendant un temps infini, car la pompe de charge a des fuites inévitables et demande un rechargement régulier. Il faut piloter ces ponts en PWM et s’assurer que les FETs supérieurs ne sont jamais pilotés par un PWM à 100%. Pour mon prototype, c’est assez gênant pour faire des essais à basse vitesse, c’est pour ça que je n’ai pas choisi cette conception même si les FET N sont moins chers et plus efficaces que les FET P. Je réserverai les FET N au montage final, si j’en ai besoin.

Voici donc la fin de mon tour d’horizon sur le pilotage des ponts en H, si on veut en savoir plus, je recommande chaudement la lecture des pages que j’ai trouvées, qui décrit avec une infinité de détails tout ce que l’on peut faire avec des ponts. Ces articles sont vraiment très, très complets, je n’ai pas encore eu le temps de tout lire! Je terminerai avec une image de l’état actuel du montage:

Prototype
Le prototype

C’est un pont à 3 branches, pour piloter un moteur brushless. La position des transistors est prévue pour une fixation sur un radiateur de CPU… Ne pas oublier les kits d’isolation, les semelles sont connectées aux drains! J’ai ajouté une résistance de 0R1 pour mesurer le courant consommé.

A+ pour l’application aux brushless!