Modifications

Sauter à la navigation Sauter à la recherche
8 548 octets ajoutés ,  24 octobre 2021 à 22:53
Ligne 1 : Ligne 1 :  
{{MCH-Aider}}
 
{{MCH-Aider}}
   −
== Introduction ==
+
== 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.
   −
x
+
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:
 +
# 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!
 +
# 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:
 +
# 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}}.
 +
 
 +
[[Fichier:MicroPython-Hack-Mosfet-30.jpg|800px]]
 +
 
 +
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 ==
 +
* {{pl|570|MicroPython Pyboard}}
 +
* {{pl|1090|Mosfet IRF540N}}
 +
* {{pl|2318|Mosfet Driver IX4428}}
 +
* {{pl|835|adaptateur SOIC8}}
 +
* {{pl|484|Condensateur 10µF}}
 +
* {{pl|240|Condensateur 0.1uF}}
 +
<hr />
 +
<small>''Tutoriel créé par Meurisse D. pour [http://shop.mchobby.be MCHobby SPRL]''</small>
 +
 
 +
{{MCH-Accord}}
29 917

modifications

Menu de navigation