LOCODUINO

La PWM : Qu’est-ce que c’est ?

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

Monter en fréquence

.
Par : Jean-Luc

DIFFICULTÉ :

Dans « La PWM : Qu’est-ce que c’est ? (2) », nous avons vu comment piloter un moteur en PWM à l’aide d’un transistor MOS canal N, l’IRF540N, transistor nécessaire car, du fait d’un courant de sortie insuffisant l’Arduino ne peut pas directement piloter un moteur. Augmenter la fréquence de la PWM comme vu dans « La PWM : Qu’est-ce que c’est ? (3) » va nous amener à revoir le schéma de cette partie puissance.

En effet, dans le montage à base d’IRF540N, nous ne nous sommes pas occupé du temps de réponse du transistor, notamment la façon dont le signal sur sa grille évolue dans le temps. Ce signal doit changer le plus rapidement possible afin que le transistor MOS s’ouvre et se ferme le plus rapidement possible. De cette manière, le signal de la PWM est reproduit le plus fidèlement possible aux bornes du moteur.

Le montage simple ne permet pas une fréquence élevée

Pour limiter le courant tiré de la broche de l’Arduino, nous avons mis une résistance de 270Ω. La grille du transistor MOS présente une capacité assez importante, un tour dans la datasheet de l’IRF540N nous apprend que cette capacité est de 2nF. La constante de temps RC [1] est donc de 500ns. Il faut également prendre en compte le fait que l’Arduino, si il doit fournir un courant important sur une sortie, et 19 mA est un courant important pour un Arduino, ne pourra pas établir une tension de 5V aussi rapidement [2], ce qui conduit à un signal d’entrée qui monte, et qui descend, de manière plus paresseuse.

Or, dans cette phase de commutation, la résistance équivalente du MOSFET est importante et cela entraîne une dissipation thermique également plus importante. Le MOSFET chauffe. Et quand un MOSFET chauffe sa résistance augmente et fait chuter la tension aux bornes du moteur.

Avec la fréquence de PWM de base de l’Arduino, 490Hz, voir « La PWM : Qu’est-ce que c’est ? (3) », ce phénomène n’est pas visible car ramené à la période correspondante de 2ms, la phase de commutation représente une durée négligeable.

Avec une PWM à la fréquence la plus élevée, 31,373kHz, soit une période d’environ 32µs. La durée de la phase de commutation n’est plus du tout négligeable, les PWM de faible valeur ne conduisent plus à une commutation complète du MOSFET comme vous pouvez le voir dans la photo ci-dessous et il chauffe.

JPEG - 103.2 kio

Atteindre une fréquence plus élevée

Nous allons revoir le schéma pour faire en sorte que le signal sur la grille monte et descende de manière plus vigoureuse. Pour cela, il nous faut un étage d’amplification entre l’Arduino et le MOSFET. Nous allons construire cet étage au moyen de transistors bipolaires. Le moyen classique d’amplifier, moyen que vous trouverez sur beaucoup de sites dédiés à l’Arduino, est d’utiliser un simple transistor bipolaire NPN en commutation. Le schéma est très simple :

Montage 1
Montage 1

Lorsque la PWM est à 0, T4 est bloqué et la grille du MOSFET T1 se charge via R3 et R5. Lorsque la PWM est à 5V, T4 est passant et la grille du MOSFET se décharge via T4. R5 limite le courant afin d’épargner T4 lors de la décharge.

Mais ce montage se révèle ici insuffisant. En effet, la résistance de tirage R3 à +5V doit être faible si on veut que la grille du transistor NMOS T5 se charge rapidement lorsque T4 est bloqué (PWM = 0), disons une trentaine d’Ohms. Lorsque T4 est passant, il va devoir tirer au moins 150mA pour que la tension sur la grille de T5 descende bien en dessous de 2V, tension de seuil minimum pour que T5 se bloque, autant que la locomotive. Le comportement est meilleur que la solution précédente mais n’est pas bon pour autant comme en atteste la mesure ci-dessous :

JPEG - 119 kio

Il nous faut donc un montage plus efficace qui charge et décharge activement la grille du MOSFET. Pour cela il est nécessaire de remplacer la résistance R3 par un transistor. Cela donne le montage ci-dessous :

Montage 2
Montage 2

Considérons tout d’abord le cas où la PWM est à 0. Le transistor T4 est bloqué. La résistance R2 polarise le transistor T2 qui charge puis maintient la grille de T1 à 11,3V (12V moins le seuil de 0,7V du transistor T2) car T2 se bloque dès que VBE devient inférieure à 0,7V. La diode D1 est polarisée en inverse et n’a donc aucune influence. Le schéma équivalent est le suivant :

Montage 2
Montage 2
Charge de la grille du MOSFET

Notez que la grille de T1 est à 11,3V. Il est en effet préférable de ne pas utiliser le 5V pour rendre passant T1 car avec la perte de 0,7V on serait à 4,3V, ce qui est un peu juste par rapport à la tension requise de 4V.

Considérons maintenant le cas où la PWM est à 5V. Le transistor T4 est saturé. Par conséquent il tire la base de T2 à la masse et le bloque. Simultanément, il décharge la grille de T1 via D1 et R1. La tension finale sur la grille de T1 s’établit à 0,7V à cause du seuil de D1. Le schéma équivalent est le suivant :

Montage 2
Montage 2
Décharge de la grille du MOSFET

Vous avez peut être noté que T1 est passant, le moteur est alimenté, lorsque la PWM est à 0 et qu’il est bloqué, le moteur n’est pas alimenté, lorsque la PWM est à 5V. C’était d’ailleurs également le cas pour le montage précédent. C’est l’inverse de ce que nous avons considéré jusqu’à maintenant. Nous pourrions ajouter un transistor pour faire en sorte que la PWM soit comme on en a l’habitude mais ce n’est pas nécessaire car il est possible d’inverser la PWM de l’Arduino. Ceci est traité plus bas dans le paragraphe « Inverser la PWM ».

Notez enfin la résistance R4 qui, tant que la PWM n’est pas active sur la broche de l’Arduino, conduit au blocage de T1. Sans cette résistance, le moteur partirait à fond tant que l’Arduino n’a pas fini de s’initialiser, ce qui serait assez désagréable.

Les temps de commutation sont bien meilleurs comme en atteste la photo ci-dessous et le MOSFET reste froid.

JPEG - 86.4 kio

Inverser la PWM

Inverser la PWM signifie qu’une PWM à 0 conduit à un signal à 5V et une PWM à 255 conduit à un signal à 0V. Une PWM à 64, par exemple, conduit elle à un signal à 0V pendant 1/4 de la période et à 5V pendant 3/4 de la période.

Deux bits d’un des registres de contrôle des timers permettent, par chaque sortie PWM, de spécifier si la PWM est inversée ou non. Ceci est décrit dans l’article « Les Timers (IV) ». Mais il y existe un petit problème, la fonction analogWrite(...) réserve un traitement spécial aux valeurs 0 et 255. Si on passe un 0 comme valeur de PWM à analogWrite, un digitalWrite(..., LOW) est effectué. Si on passe 255, un digitalWrite(..., HIGH) est effectué. Bien entendu si on veut inverser la PWM, il faudrait faire l’inverse. On ne peut donc pas utiliser analogWrite avec une PWM inversée. Je vous propose donc une version remaniée d’analogWrite que j’ai appelée pwmWrite et qui tient compte de l’inversion de la PWM.

Les deux fonctions setPWMPolarity et pwmWrite ont donc été ajoutées à la bibliothèque PWMFreq que vous pouvez télécharger ci-dessous.

Bibliothèque PWMFreq

Et sans inverser ?

Il est également possible de réaliser le même type de montage sans inverser la PWM en substituant un MOSFET canal P au MOSFET canal N. On économise même une résistance puisque T4 sera bloqué quand le signal de PWM flotte lors du démarrage de l’Arduino. Le schéma est le suivant :

Montage 3
Montage 3
Montage similaire avec un PMOS au lieu d’un NMOS

Dans un prochain article nous attaquerons le problème de la synchronisation des PWM entre les cantons qui pourront donc être commandés par des Arduino séparés.

[1c’est à dire le temps nécessaire pour que le signal arrive à 63% de sa valeur maximum

[2En tirant 20mA sur une broche établie à HIGH, la tension n’est pas de 5V mais reste inférieure à 4,4V

16 Messages

  • La PWM : Qu’est ce que c’est ? (4) 14 mars 2017 12:17, par DDEFF

    Bonjour Jean-Luc,
    L’Arduino, c’est aussi de l’électronique !
    .
    On voit, en effet, quelques montages minimalistes sur internet, montages testés le plus souvent sans oscillo et qui semblent fonctionner.
    Le raisonnement est alors réduit à sa plus simple expression : on met un transistor plus gros quand ça chauffe, ou un morceau d’alu faisant office de radiateur.
    .
    Tu montres brillamment qu’en analysant les causes profondes du "mal", on peut les éviter et avoir un MOSFET froid en même temps qu’une fréquence élevée.
    L’idée de la diode D1 est grandiose !!
    .
    Au passage, petite modification d’une bibliothèque : et hop !!
    .
    Je reste baba. Bravo !

    Répondre

  • La PWM : Qu’est ce que c’est ? (4) 29 mars 2017 08:31, par Savignyexpress

    Bonjour Jean-Luc,

    Merci pour cette présentation magistrale et la description du montage permettant de charger / décharger rapidement la grille du MOSFET. Tu es vraiment le spécialiste de la PWM !

    Il y a toutefois un point qui m’interpelle. Entre le 1er montage qui ne comporte qu’un transistor bipolaire et le 2ème montage qui en comporte 2, je n’ai pas compris pourquoi la décharge de la grille est plus rapide dans le 2ème cas que dans le 1er. Dans les 2 cas, la décharge s’effectue via la résistance de base de 15 Ohm et le transistor en saturation. Est-ce bien dû au fait que T4 doit tirer 150 mA dans le 1er montage et bien moins dans le 2ème ainsi que tu l’expliques ?

    Meilleures salutations.

    Répondre

    • La PWM : Qu’est ce que c’est ? (4) 29 mars 2017 10:07, par Jean-Luc

      Bonjour SavignyExpress.

      Oui, dans le montage 1, la décharge est contrecarrée par la résistance de tirage de 33Ω. Ceci explique le temps de décharge plus long.

      Répondre

  • La PWM : Qu’est ce que c’est ? (4) driver de mosfet 30 novembre 2018 11:05, par trimarco232

    Bonjour,

    merci de nous avoir montré le fonctionnement d’un "mosfet driver" de base
    pour mémoire, ce type de circuit existe tout fait et pas cher, par exemple tc4427 ( 30cts, c’est ce que j’ai trouvé, je ne l’ai pas testé)
    il serait intéressant de comparer les oscillogrammes des 2 solutions

    il existe plusieurs types drivers de mosfet, selon l’application :
    1/2 pont ou pont en H avec dead time,
    avec "survolteur" pour n’utiliser que des canal N pour faire un pont,
    spécialisés pour les alims à découpage, etc.

    tous sont facilement trouvables à petit prix

    cordialement,

    Répondre

  • La PWM : Qu’est ce que c’est ? (4) 13 juin 2019 15:13, par Valéry

    Bonjour, super article sur l’amplification des signaux PWM.

    Je m’intéresse au montage 3 pour piloter des LED haute puissance (6 projecteurs 30 W en 12Vdc) soit 180W au total.

    Je souhaite réaliser ce contrôle PWM pour simuler un levé et couché de soleil sur environ 12h et ceci avec un ESP32 programmé avec l’IDE ARDUINO.

    Mes questions sont les suivantes :

    • Quelles références pour T2, T4 et T5 et quelles références pour D1 et D2 ?
    • Connaissez vous l’ESP32 ? Y a-t-il des précautions à prendre si l’on modifie le diviseur des timers, comme pour une carte Arduino classique ?

    Merci d’avance pour votre attention.
    Valéry

    Répondre

    • La PWM : Qu’est ce que c’est ? (4) 13 juin 2019 19:20, par Jean-Luc

      Bonsoir,
      Merci :)

      • D2 est une diode roue libre qui est utile pour une charge inductive. Pour des LED haute puissance, c’est complètement inutile.
      • D1 est une simple 1N4001
      • T2 et T4 sont des BC337
      • T5 est un IRF9540 mais quelle intensité voulez vous passer ?

      Je connais l’ESP32 de loin mais il n’y a pas de raison de modifier la fréquence de la PWM pour des LED tant qu’elle est suffisamment élevée pour que la persistance rétinienne fasse son travail.

      Répondre

  • La PWM : Qu’est ce que c’est ? (4) 14 juin 2019 00:25, par Valéry

    Merci pour votre réponse rapide, je vais pouvoir faire un montage de test ce weekend.

    Pour D2, je savais, c’était surtout pour D1.
    Je veux piloter 6 LED multichip de 30W chacune en 12V, ça fait 180W/12Vdc = 15A
    Sans trop d’échauffement du drivers si possible, sinon je peux aussi piloter 2 modules qui ferait chacun 90W/12Vdc = 7.5A

    Avec un programme de contrôle PWM identique (750Hz en 12bit) je constate des variations d’intensité lumineuse différentes quand j’utilise le module MOFSET GROVE ou quand j’utilise le module MOFSET DFROBOT DRF0457 (sur 2 LED multichip de 10W chacune en 12Vdc). Chacun de ces modules utilise un étage à optocoupleur, donc votre montage et démonstration par des transistors m’intéresse.

    Je comprends pas que ce soit si compliqué de faire varier de la puissance LED alors que c’est très simple avec une charge inductive type moteur DC.

    Répondre

  • La PWM : Qu’est ce que c’est ? (4) 14 juin 2019 13:59, par Valéry

    Merci pour vos réponses et conseils.

    J’ai testé de baisser la résistance de 33k à environ 1k, j’ai pu augmenter la fréquence mais la tension en sortie ne dépasse pas les 7V quand le pwm est 100%.

    Le transistor du DFROBOT est un HM70P04K. Après plusieurs essais avec différentes résistance, je crois que j’ai détruit le transistor, il reste passant tout le temps, la prochaine fois, je mettrais mon bracelet anti-statistique.

    Répondre

    • La PWM : Qu’est ce que c’est ? (4) 14 juin 2019 14:34, par Jean-Luc

      Je pense qu’effectivement vous l’avez grillé mais pas à cause de l’électricité statique. Plutôt parce qu’en mettant une résistance de 1k au lieu de la 33k, la tension sur la grille va s’établir à ce qui est donné par le diviseur de tension formé de la résistance de 3,3k connectée au collecteur de l’optocoupleur et à votre nouvelle résistance de 1k. En 12V, la tension est de 3,3/(3,3+1) x 12 = 9,2V. Donc une tension relative de grille de 12 - 9,2 = 2,8V au lieu de 3,3/36,3 x 12 = 0,09V, soit une tension relative de grille de 11,1V. Si vous regarder la datasheet de ce transistor (http://hmsemi.com/downfile/HM70P04K.PDF), vous verrez page 4, courbes en haut à gauche, que vous vous situez désormais sur la courbe du bas : le transistor n’est pas résolument passant. Ceci explique également pourquoi vous n’avez que 7V en sortie, la résistance équivalente du MOSFET est élevée parceque votre tension de grille n’est pas bonne. Donc il va chauffer et possiblement finir en mauvais état. Il vous faut un VGS au dessus de 5V et donc au minimum une résistance R telle que 3,3/(R+3,3) x 12 = 5. Donc R = 7,26kΩ, pas moins.

      Répondre

  • Je vois que vous maîtrisez parfaitement votre sujet.

    J’ai commandé de nouveaux composants, mon but étant de concevoir un ou plusieurs modules pour piloter une rampe de LED en 180w ou 2 rampes en 90W ou 3 rampes en 60w. La résolution du signal pwm doit permettre de simuler un levé et couché de soleil sans qu’on voit trop les incréments de lumière. Merci encore pour vos conseils d’expert. A bientôt sûrement.

    Répondre

  • La PWM : Qu’est ce que c’est ? (4) 25 juin 2019 00:48, par Valéry

    Bonjour,

    J’ai testé le montage 3 avec le PMOS, ça fonctionne parfaitement bien.
    Pour augmenter la puissance, peut on mettre plusieurs MOSFET en parallèle ?
    La dissipation thermique est reliée sur la broche D, cela permettrait d’avoir un seul gros dissipateur thermique.

    Merci

    Répondre

  • La PWM : Qu’est ce que c’est ? (4) 11 février 2023 17:57, par VINDRY

    Bonjour,

    Dans cet article, vous parlez d’un prochain article sur la synchronisation de la PWM.

    Ca m’intéresse énormément, mais je ne trouve pas cet article...

    Cordialemnt

    Répondre

  • La PWM : Qu’est ce que c’est ? (4) 11 février 2023 22:58, par msport

    Bonjour,
    l’article date de 2017.
    Il vaudrait mieux que vous consultiez les messages qui ont été publiés sur le forum.
    Faites une recherche avec "synchronisation" ou "synchro".
    Cordialement

    Répondre

Réagissez à « La PWM : Qu’est-ce que c’est ? (4) »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Projets »

Les derniers articles

Les articles les plus lus