Modifications

Sauter à la navigation Sauter à la recherche
6 770 octets ajoutés ,  24 octobre 2021 à 22:53
Ligne 1 : Ligne 1 :  
{{MCH-Aider}}
 
{{MCH-Aider}}
   −
== MosFet driver à la rescousse ==
+
== 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.
 
Il n'y a pas longtemps, il me fallait commander une charge passive de 500W avec un signal PWM à 32 KHz avec MicroPython.
   Ligne 12 : Ligne 12 :  
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).
 
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).
   −
Il faut donc:
+
== MosFet driver à la rescousse ==
# Activer le mosfet avec une tension supérieure à 3.3V.
+
Pour pouvoir contrôler la charge de 500W avec un signal PWM à 32 KHz, il faut donc:
# Faire commuter le MOSFET rapidement et pour cela il faut un courant plus important. C'est le courant limité disponible sur le GPIO qui limite largement le temps le commutation (même si ce n'est pas notable à l'oeil). En fournissant des pointes de courant de 1A-1.5A sur la Gate (pendant ~1nSec), la commutation est ''instantanée''.
+
# Activer le MOSFET avec une tension supérieure à 3.3V (idéalement 5V minimum).
 +
# 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:
 +
* {{pl|2318|IX4428 MosFet Driver}}
 +
 
 +
== 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.
 +
 
 +
[[Fichier:IX4428-SOIC.png]]<small><br />source: [https://www.ixysic.com/home/pdfs.nsf/www/IX4426-27-28.pdf/$file/IX4426-27-28.pdf fiche technique]</small>
 +
 
 +
L'IX4428 est configuré avec un pilote inverseur et un pilote non-inverseur. Ces pilotes sont disponibles au format [https://en.wikipedia.org/wiki/Small_outline_integrated_circuit SOIC 8] (petit mais encore soudable sur une carte {{pl|835|breakout SOIC 8}} (suffixe N) et [https://en.wikipedia.org/wiki/Flat_no-leads_package 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)
 +
* [https://www.ixysic.com/home/pdfs.nsf/www/IX4426-27-28.pdf/$file/IX4426-27-28.pdf Fiche technique du IX4428] (''pdf'')
 +
 
 +
[[Fichier:IX4428-tech-details.png|640px]]<small><br />source: [https://www.ixysic.com/home/pdfs.nsf/www/IX4426-27-28.pdf/$file/IX4426-27-28.pdf fiche technique]</small>
 +
 
 +
== Montage IX4428 avec Pyboard ==
 +
Dans ce montage, nous allons utiliser un {{pl|2318|IX4428}} la sortie X1 (Timer 2, Channel 1) de la carte {{pl|570|MicroPython Pyboard}} et un {{pl|1090|Transistor MosFet IRF540N}}. Le montage serait similaire avec un {{pl|2025|Raspberry-Pi Pico}}.
 +
 
 +
[[Fichier:MicroPython-Hack-Mosfet-10.jpg|800px]]
 +
 +
<nowiki>
 +
>>> 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 )
 +
</nowiki>
 +
 
 +
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.
 +
 
 +
[[Fichier:IRF540N-info.png|240px]]
 +
 
 +
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):
 +
 
 +
[[Fichier:IX4428-at-10-KHz.png|640px]]
 +
 
 +
En augmentant la fréquence à PWM à 32 KHz, le signal Vgs est sensiblement modifié mais l'on reste dans un fonctionnement similaire.
 +
 
 +
[[Fichier:IX4428-at-32-KHz.png|640px]]
 +
 
 +
Les captures Vgs ci-dessus mettent en évidence des pic de tension importants sur la Gate.
 +
 
 +
{{ambox-stop|text=Il est possible de compenser l'effet de la capacitance en ajoutant une résistance de 200 ohms en série avec la Gate. Cela permet d'éliminer le Pic de surtension. }}
 +
 
 +
 
 +
=== 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.
 +
 
 +
[[Fichier:Mosfet-driver-Vgs-vs-Qg.png]]
 +
 
 +
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.
 +
 
 +
[[Fichier:MicroPython-Hack-Mosfet-11.jpg|800px]]
 +
 
 +
et surprise, le '''Mosfet ne chauffe plus''' (ou peu) avec une charge de 30W!
 +
 
 +
Voici le graphique de l'évolution de la tension Vgs.
 +
 
 +
[[Fichier:IX4428-at-32-KHz-12V.png]]
 +
 
 +
=== Capacitance de la Gate ===
 +
 
 +
Dans le montage ci-dessous, une résistance de 200 Ohms permet de compenser l'effet de la capacitance.
 +
 
 +
[[Fichier:MicroPython-Hack-Mosfet-20.jpg|800px]]
 +
 
 +
et surprise, plus de '''pic de surtension sur la gate'''!
 +
 
 +
Voici le graphique de l'évolution de la tension Vgs.
 +
 
 +
[[Fichier:IX4428-at-32-KHz-12V-200Ohms.png]]
 +
 
 +
C'est pas mieux ca?
 +
 
 +
== Montage IX4428 avec Feather ESP32 ==
 +
Dans ce montage, nous allons utiliser un {{pl|2318|IX4428}} la sortie 14 de la carte {{pl|570|Feather ESP32}} et un {{pl|1090|Transistor MosFet IRF540N}}.
   −
C'est pour cela que nous allons utiliser une "Mosfet Driver" (contrôleur de Mosfet)
+
[[Fichier:MicroPython-Hack-Mosfet-30.jpg|800px]]
   −
x
+
Sur un ESP32, la valeur PWM évolue entre 0 et 1023 (0% à 100%) de cycle utile.
 +
 +
<nowiki>
 +
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%
 +
</nowiki>
    
== Où acheter ==
 
== Où acheter ==
29 917

modifications

Menu de navigation