MicroPython-Hack-Mosfet

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Cas pratique et problème

Il n'y a pas longtemps, il me fallait commander une charge passive de 500W avec un signal PWM à 32 KHz avec MicroPython.

Ayant sélectionné la Pyboard, il faudra commander le MosFet de puissance avec un signal 3.3V. Le MosFet N-channel est apparenté au transistor PNP de type N.

Seulement, les choses ne sont pas si simples! Plusieurs problèmes se présentent:

  1. Même si certains MOSFET ne nécessitent qu'une tension d'activation 2.4V, il est fréquent qu'une tension de 3.3V ne suffisent pas!
  2. Un signal PWM à 32 KHz nécessite que le MOSFET aient un temps de réaction bien intérieur à 31.2 µSec (1/f).

En se basant sur un cycle utile de 0 à 100%, les 31.2 µSec sont divisés en 100 parts identiques de 0.312 µSec. A 1% de cycle utile, le Mosfet doit commuter, conduire pendant 0.312µSec puis dé-commuter. Cela signifie que le flan montant et descendant doivent être très court! (de l'ordre de 10 à 20 nSec).

MosFet driver à la rescousse

Pour pouvoir contrôler la charge de 500W avec un signal PWM à 32 KHz, il faut donc:

  1. Activer le MOSFET avec une tension supérieure à 3.3V (idéalement 5V minimum).
  2. Faire commuter le MOSFET rapidement!

C'est le courant limité, disponible sur le GPIO activant la Gate, qui limite largement le temps le commutation... même si ce n'est pas notable à l'oeil. Lors d'une application de type marche/arrêt, cela a peu d'importance.

Pour commuter rapidement un MOSFET, il faut beaucoup de courant au moment de la commutation.

En fournissant des pointes de courant de 1A-1.5A sur la Gate (pendant ~1 nSec), la commutation est instantanée!

C'est pour cela que nous allons utiliser un "Mosfet Driver" (contrôleur de Mosfet). Il prendra en charge la conversion du niveau logique et l'approvisionnement de la Gate en courant.

Cet documentation s'articule autour des "Drivers MosFet" suivant:

IX4428 MosFet Driver

L'IX4428 de IXYS Integrated Circuits Division est un double contrôleur de grille (Gate) haute rapidité pour MosFet. Chacune des deux sorties peuvent fournir un courant de 1.5A (to source) ou absorber un courant de 1.5A (to sink). Cela permet d'assurer des temps de montée et de descente de moins de 10ns. les entrées de chaque pilotes sont compatible TTL et CMOS, ils sont virtuellement immunisé contre le verrouillage (du Mosfet).

Le faible délais de propagation et la rapidité des fronts montants et descendant font de l'IX4428 (et ses cousins IX4426, IX4427) idéaux pour des applications haute fréquences et haute puissance.

 
source: fiche technique

L'IX4428 est configuré avec un pilote inverseur et un pilote non-inverseur. Ces pilotes sont disponibles au format SOIC 8 (petit mais encore soudable sur une carte breakout SOIC 8 (suffixe N) et format DFN (parent du format QFN)

Caractéristiques:

  • Configuration de pilotage: Low-Side (contrôle l'alimentation de la charge du côté de la masse)
  • Nombre de pilotes: 2
  • Type de gille/Gate contrôlée: MOSFET canal-N, canal-P
  • Tension d'alimentation: 4.5V ~ 30V
  • Tension logique: VIL <= 0.8V, VIH >= 2.4V
  • Courant de point (Source, Sink): 1.5A, 1.5A
  • Type d'entrée: Inversée, Non-inversée
  • Temps flan montant/ descendant: 10ns, 8ns (typique)
  • Temperature: -55°C ~ 150°C (TJ)
  • Montage: en surface
  • Package: 8-SOIC (3.90mm de large)
  • Fiche technique du IX4428 (pdf)

 
source: fiche technique

Montage IX4428 avec Pyboard

Dans ce montage, nous allons utiliser un IX4428 la sortie X1 (Timer 2, Channel 1) de la carte MicroPython Pyboard et un Transistor MosFet IRF540N. Le montage serait similaire avec un Raspberry-Pi Pico.

 

 
>>> from pyb import Timer
>>> tim = Timer( 2, freq=10000 ) # 10 KHz
>>> tchannel = tim.channel( 1, Timer.PWM, pin=pyb.Pin.board.X1, pulse_width=0 )
>>> tchannel.pulse_width_percent( 100 )
>>> tchannel.pulse_width_percent( 99 )
>>> tchannel.pulse_width_percent( 50 )
>>> tchannel.pulse_width_percent( 100 )
>>> tchannel.pulse_width_percent( 90 )
>>> tchannel.pulse_width_percent( 100 )
>>> tchannel.pulse_width_percent( 60 )

A noter que le MOSFET chauffe beaucoup si la charge consomme un courant de 2A (à cycle 100%).

Cela représente une consommation de 12*2A = 24W... mais plus raisonnablement 20-22W puisque la tension est plutôt de l'ordre de 10.8V-11.20V suite à la chute de tension Vds dans le transistor MosFet.

 

Avec un courant de 2A, la puissance perdue dans le Mosfet (sous forme d'échauffement) est de P = R*I^2 = 0.044*2^2 = 0.175W.

C'est peu mais mais la chaleur s'accumule vite d'autant que l'utilisation d'un signal PWM décuple la dissipation de chaleur. Ceci dit, cela n'explique pas pourquoi 60°C est atteint en moins de 60sec (mais nous le découvrirons plus tard).

Capture de la tension Vgs (activation de la gate):

 

En augmentant la fréquence à PWM à 32 KHz, le signal Vgs est sensiblement modifié mais l'on reste dans un fonctionnement similaire.

 

Les captures Vgs ci-dessus mettent en évidence des pic de tension importants sur la Gate.


Pourquoi le Mosfet chauffe t'il autant?

En regardant les spécifications du MosFet IRF540N, il est possible de trouver le graphique suivant reprend l'évolution de la tension sur la Gate lorsque celle-ci est chargée à courant constant. L'abscisse du graphique est en nano-Coulomb et représente donc la charge accumulée par la Gate.

 

On peut y constater un aplat près de la tension de 4V (entre 4++V et 5--V), nous somme donc près de la région de commutation... un zone de linéarité où la conductivité de la Gate n'est pas encore optimale. C'est probablement pour cela que le Mosfet chauffe autant.

Une option serait d'utiliser une tension Vgs plus élevée. Le graphique indique une tension jusqu'à 10V mais il est aussi possible d'utiliser une tension jusque 20V (si mes souvenirs sont bons). Cela tombe bien, nous avons une tension de 12V à disposition :-)

Utiliser Vgs = 12V

Voici le nouveau plan de montage.

 

et surprise, le Mosfet ne chauffe plus (ou peu) avec une charge de 30W!

Voici le graphique de l'évolution de la tension Vgs.

 

Capacitance de la Gate

Dans le montage ci-dessous, une résistance de 200 Ohms permet de compenser l'effet de la capacitance.

 

et surprise, plus de pic de surtension sur la gate!

Voici le graphique de l'évolution de la tension Vgs.

 

C'est pas mieux ca?

Montage IX4428 avec Feather ESP32

Dans ce montage, nous allons utiliser un IX4428 la sortie 14 de la carte Feather ESP32 et un Transistor MosFet IRF540N.

 

Sur un ESP32, la valeur PWM évolue entre 0 et 1023 (0% à 100%) de cycle utile.

 
MicroPython v1.17 on 2021-09-02; ESP32 module with ESP32
Type "help()" for more information.
>>> 
>>> from machine import Pin, PWM
>>> pwm = PWM(Pin(14))
>>> pwm.freq( 32000 ) # 32 KHz
>>> pwm.duty(1023) # 100%
>>> pwm.duty(0)    # 0%
>>> pwm.duty(50)   # 4.8%
>>> pwm.duty(103)  # 10%
>>> pwm.duty(512)  # 50%

Où acheter


Tutoriel créé par Meurisse D. pour MCHobby SPRL

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.