Sélection simple d'inductance pour régulateur buck en utilisant Python

L’exemple suivant montre comment calculer l’inductance idéale, minimale et maximale pour un régulateur buck en utilisant Python et la bibliothèque UliEngineering.

TechOverflow calculators:
You can enter values with SI suffixes like 12.2m (equivalent to 0.012) or 14k (14000) or 32u (0.000032).
The results are calculated while you type and shown directly below the calculator, so there is no need to press return or click on a Calculate button.
V ⚠
V ⚠
Hz ⚠
A ⚠
⚠

Dans notre exemple, nous utilisons un LMR36006-Q1 de Texas Instruments. Notez que la formule est virtuellement la même pour à peu près tous les régulateurs buck modernes que vous pouvez acheter, des moins chers chinois aux pièces durcies pour l’espace.

D’abord, installez UliEngineering.

Maintenant vous pouvez utiliser le code suivant pour calculer les valeurs d’inductance

buck_inductor_selection.py
#!/usr/bin/env python3
from UliEngineering.Electronics.SwitchingRegulator import *
from UliEngineering.EngineerIO import *

Vin = normalize_numeric("48V")
Vout = normalize_numeric("24V")
fsw = normalize_numeric("750kHz")
Ioutmax = normalize_numeric("5A")

#
# Paramètres optionnels
#

# Quelle tension d'ondulation est acceptable ?
# La tension de sortie oscillera de 1/2 de la tension d'ondulation
# de chaque côté de la tension de sortie moyenne
# En cas de doute, utilisez 0.04 * Vout (conservateur)
# Choisir une valeur plus grande facilitera la recherche
# de composants appropriés
output_voltage_ripple = 0.01 * Vout

# Limites de courant du commutateur.
# Recherchez les limites de courant min/nom/max du commutateur dans la fiche technique !
# Cela est différent pour chaque circuit intégré et il n'y a pas de bonne façon de le deviner !
# Si vous n'avez que des valeurs nominales, définissez min à nominal*85% et max à nominal*120%
# pour tenir compte des coefficients de température et des tolérances.
min_switch_current = 6.3
max_switch_current = 8.8

# Le courant de charge légère est utilisé pour calculer la capacitance
# Vous pouvez utiliser 5% du courant de sortie maximal si vous n'êtes pas sûr
light_load_current = 0.05 * Ioutmax

# Facteurs de sécurité
# Dépasser le courant de saturation nominal de l'inductance
# provoquera une saturation dure pour les inductances à noyau de ferrite.
# Par conséquent, ce facteur de sécurité doit être conservateur (par ex. 20% = 1.2)
saturation_curent_rating_safety_factor = 1.2
# Le courant nominal RMS n'affecte que les performances thermiques
# Par conséquent, ce facteur de sécurité peut être plus faible (par ex. 10% = 1.1)
rms_current_rating_safety_factor = 1.1
# Courant d'ondulation nominal recommandé
# facteur de sécurité pour les condensateurs de sortie
# (appliqué au courant d'ondulation d'inductance calculé)
# Il s'agit d'un facteur de classement thermique.
output_capacitor_ripple_current_safety_factor = 1.1

#
# FIN DES PARAMÈTRES
#

abs_max_inductance = buck_regulator_inductance(Vin, Vout, fsw, Ioutmax, K=0.1)
max_inductance = buck_regulator_inductance(Vin, Vout, fsw, Ioutmax, K=0.2)
optimal_inductance = buck_regulator_inductance(Vin, Vout, fsw, Ioutmax, K=0.3)
min_inductance = buck_regulator_inductance(Vin, Vout, fsw, Ioutmax, K=0.4)

# Une autre inductance minimale basée sur le désir d'éviter l'oscillation sous-harmonique
# Cela dépend fortement du circuit intégré utilisé, consultez la fiche technique pour plus d'informations
# L'exemple est pour le LMR36006 de Texas Instruments
min_inductance_osc = 0.28 * Vout/fsw

# Calculer les courants de crête, RMS et d'ondulation pour les différentes inductances
abs_max_inductance_current = buck_regulator_inductor_current(
    Vin, Vout, abs_max_inductance, fsw, Ioutmax
)
max_inductance_current = buck_regulator_inductor_current(
    Vin, Vout, max_inductance, fsw, Ioutmax
)
optimal_inductance_current = buck_regulator_inductor_current(
    Vin, Vout, optimal_inductance, fsw, Ioutmax
)
min_inductance_current = buck_regulator_inductor_current(
    Vin, Vout, min_inductance, fsw, Ioutmax
)

# Calculer le courant de saturation nominal pour les inductances
abs_max_inductance_rms_current = abs_max_inductance_current.rms * saturation_curent_rating_safety_factor
max_inductance_rms_current = max_inductance_current.rms * saturation_curent_rating_safety_factor
optimal_inductance_rms_current = optimal_inductance_current.rms * saturation_curent_rating_safety_factor
min_inductance_rms_current = min_inductance_current.rms * saturation_curent_rating_safety_factor

# Calculer le courant nominal RMS (thermique) pour les différentes inductances
abs_max_inductance_rms_current = abs_max_inductance_current.rms * rms_current_rating_safety_factor
max_inductance_rms_current = max_inductance_current.rms * rms_current_rating_safety_factor
optimal_inductance_rms_current = optimal_inductance_current.rms * rms_current_rating_safety_factor
min_inductance_rms_current = min_inductance_current.rms * rms_current_rating_safety_factor

# Calculer le courant de crête nominal de l'inductance
abs_max_inductance_peak_current = abs_max_inductance_current.peak
max_inductance_peak_current = max_inductance_current.peak
optimal_inductance_peak_current = optimal_inductance_current.peak
min_inductance_peak_current = min_inductance_current.peak

# Calculer le courant d'ondulation pour chaque valeur d'inductance
abs_max_inductance_ripple = buck_regulator_inductor_ripple_current(Vin, Vout, abs_max_inductance, fsw, Ioutmax)
max_inductance_ripple = buck_regulator_inductor_ripple_current(Vin, Vout, max_inductance, fsw, Ioutmax)
optimal_inductance_ripple = buck_regulator_inductor_ripple_current(Vin, Vout, optimal_inductance, fsw, Ioutmax)
min_inductance_ripple = buck_regulator_inductor_ripple_current(Vin, Vout, min_inductance, fsw, Ioutmax)

# Calculer la capacitance minimale requise pour respecter la tension d'ondulation de sortie
abs_max_inductance_capacitance = buck_regulator_min_capacitance(
    abs_max_inductance_ripple,
    output_voltage_ripple,
    fsw,
    abs_max_inductance,
    Vout,
    Ioutmax,
    light_load_current
)

max_inductance_capacitance = buck_regulator_min_capacitance(
    max_inductance_ripple,
    output_voltage_ripple,
    fsw,
    max_inductance,
    Vout,
    Ioutmax,
    light_load_current
)

optimal_inductance_capacitance = buck_regulator_min_capacitance(
    optimal_inductance_ripple,
    output_voltage_ripple,
    fsw,
    optimal_inductance,
    Vout,
    Ioutmax,
    light_load_current
)

min_inductance_capacitance = buck_regulator_min_capacitance(
    min_inductance_ripple,
    output_voltage_ripple,
    fsw,
    min_inductance,
    Vout,
    Ioutmax,
    light_load_current
)

# Calculer l'ESR maximal du condensateur
abs_max_inductance_esr = buck_regulator_output_capacitor_max_esr(output_voltage_ripple, abs_max_inductance_ripple)
max_inductance_esr = buck_regulator_output_capacitor_max_esr(output_voltage_ripple, max_inductance_ripple)
optimal_inductance_esr = buck_regulator_output_capacitor_max_esr(output_voltage_ripple, optimal_inductance_ripple)
min_inductance_esr = buck_regulator_output_capacitor_max_esr(output_voltage_ripple, min_inductance_ripple)

# Calculer le courant RMS du condensateur de sortie
abs_max_inductance_cap_rms = buck_regulator_output_capacitor_rms_current(Vin, Vout, abs_max_inductance, fsw)
max_inductance_cap_rms = buck_regulator_output_capacitor_rms_current(Vin, Vout, max_inductance, fsw)
optimal_inductance_cap_rms = buck_regulator_output_capacitor_rms_current(Vin, Vout, optimal_inductance, fsw)
min_inductance_cap_rms = buck_regulator_output_capacitor_rms_current(Vin, Vout, min_inductance, fsw)

# Calculer le courant d'ondulation du condensateur de sortie
abs_max_inductance_cap_ripple = abs_max_inductance_current.ripple * output_capacitor_ripple_current_safety_factor
max_inductance_cap_ripple = max_inductance_current.ripple * output_capacitor_ripple_current_safety_factor
optimal_inductance_cap_ripple = optimal_inductance_current.ripple * output_capacitor_ripple_current_safety_factor
min_inductance_cap_ripple = min_inductance_current.ripple * output_capacitor_ripple_current_safety_factor

# Calculer la sortie

# Calculer le courant de saturation nominal pour les inductances
# REMARQUE : Facteur de sécurité faible en raison de l'utilisation du courant
# de commutateur maximal qui a un facteur de sécurité inclus
# Ce facteur de sécurité sert principalement à compenser une tolérance d'inductance de +-10%
saturation_current_safety_factor = 1.1
abs_max_inductance_saturation_current = max(abs_max_inductance_peak_current, max_switch_current) * saturation_current_safety_factor
max_inductance_saturation_current = max(max_inductance_peak_current, max_switch_current) * saturation_current_safety_factor
optimal_inductance_saturation_current = max(optimal_inductance_peak_current, max_switch_current) * saturation_current_safety_factor
min_inductance_saturation_current = max(min_inductance_peak_current, max_switch_current) * saturation_current_safety_factor

# Calculer la puissance nominale de la diode de roue libre
catch_diode_power = buck_regulator_catch_diode_power(Vin, Vout, Ioutmax, fsw)

# Afficher les résultats
print("Inductance maximale absolue (K=0.1):", format_value(abs_max_inductance, "H"),
    "Isat >=", format_value(abs_max_inductance_saturation_current, "A"),
    "& Irms >= ", format_value(abs_max_inductance_rms_current, "A"))
print("\tCourant d'ondulation: ", format_value(abs_max_inductance_ripple, "A"))
print("\tCourant de crête: ", format_value(abs_max_inductance_peak_current, "A"))
print("\tCapacité minimale: ", format_value(abs_max_inductance_capacitance, "F"), "pour tension d'ondulation", format_value(output_voltage_ripple, "V"))
print("\tESR max du condensateur: ", format_value(abs_max_inductance_esr, "Ω"))
print("\tCourant RMS du condensateur: ", format_value(abs_max_inductance_cap_rms, "A"))
print("\tCourant d'ondulation recommandé du condensateur: ", format_value(abs_max_inductance_cap_ripple, "A"))

print("Inductance maximale (K=0.2):", format_value(max_inductance, "H"),
    "Isat >=", format_value(max_inductance_saturation_current, "A"),
    "& Irms >= ", format_value(max_inductance_rms_current, "A"))
print("\tCourant d'ondulation: ", format_value(max_inductance_ripple, "A"))
print("\tCourant de crête: ", format_value(max_inductance_peak_current, "A"))
print("\tCapacité minimale: ", format_value(max_inductance_capacitance, "F"), "pour tension d'ondulation", format_value(output_voltage_ripple, "V"))
print("\tESR max du condensateur: ", format_value(max_inductance_esr, "Ω"))
print("\tCourant RMS du condensateur: ", format_value(max_inductance_cap_rms, "A"))
print("\tCourant d'ondulation recommandé du condensateur: ", format_value(max_inductance_cap_ripple, "A"))

print("Inductance optimale (K=0.3):", format_value(optimal_inductance, "H"),
    "Isat >=", format_value(optimal_inductance_saturation_current, "A"),
    "& Irms >= ", format_value(optimal_inductance_rms_current, "A"))
print("\tCourant d'ondulation: ", format_value(optimal_inductance_ripple, "A"))
print("\tCourant de crête: ", format_value(optimal_inductance_peak_current, "A"))
print("\tCapacité minimale: ", format_value(optimal_inductance_capacitance, "F"), "pour tension d'ondulation", format_value(output_voltage_ripple, "V"))
print("\tESR max du condensateur: ", format_value(optimal_inductance_esr, "Ω"))
print("\tCourant RMS du condensateur: ", format_value(optimal_inductance_cap_rms, "A"))
print("\tCourant d'ondulation recommandé du condensateur: ", format_value(optimal_inductance_cap_ripple, "A"))

print("Inductance minimale (K=0.4):", format_value(min_inductance, "H"),
    "Isat >=", format_value(min_inductance_saturation_current, "A"),
    "& Irms >= ", format_value(min_inductance_rms_current, "A"))
print("\tCourant d'ondulation: ", format_value(min_inductance_ripple, "A"))
print("\tCourant de crête: ", format_value(min_inductance_peak_current, "A"))
print("\tCapacité minimale: ", format_value(min_inductance_capacitance, "F"), "pour tension d'ondulation", format_value(output_voltage_ripple, "V"))
print("\tESR max du condensateur: ", format_value(min_inductance_esr, "Ω"))
print("\tCourant RMS du condensateur: ", format_value(min_inductance_cap_rms, "A"))
print("\tCourant d'ondulation recommandé du condensateur: ", format_value(min_inductance_cap_ripple, "A"))

print()
print("Inductance minimale pour éviter l'oscillation sous-harmonique: ", format_value(min_inductance_osc, "H"))
print()
print("Puissance nominale de la diode de roue libre (si une diode de roue libre est requise):", format_value(catch_diode_power, "W"))

Exemple de sortie :

buck_inductor_output.txt
Inductance maximale absolue (K=0.1): 32.0 µH Isat >= 9.68 A & Irms >=  5.50 A
        Courant d'ondulation:  500 mA
        Courant de crête:  5.25 A
        Capacité minimale:  138 µF pour tension d'ondulation 240 mV
        ESR max du condensateur:  480 mΩ
        Courant RMS du condensateur:  144 mA
        Courant d'ondulation recommandé du condensateur:  550 mA
Inductance maximale (K=0.2): 16.0 µH Isat >= 9.68 A & Irms >=  5.51 A
        Courant d'ondulation:  1.00 A
        Courant de crête:  5.50 A
        Capacité minimale:  69.1 µF pour tension d'ondulation 240 mV
        ESR max du condensateur:  240 mΩ
        Courant RMS du condensateur:  289 mA
        Courant d'ondulation recommandé du condensateur:  1.10 A
Inductance optimale (K=0.3): 10.7 µH Isat >= 9.68 A & Irms >=  5.52 A
        Courant d'ondulation:  1.50 A
        Courant de crête:  5.75 A
        Capacité minimale:  46.1 µF pour tension d'ondulation 240 mV
        ESR max du condensateur:  160 mΩ
        Courant RMS du condensateur:  433 mA
        Courant d'ondulation recommandé du condensateur:  1.65 A
Inductance minimale (K=0.4): 8.00 µH Isat >= 9.68 A & Irms >=  5.54 A
        Courant d'ondulation:  2.00 A
        Courant de crête:  6.00 A
        Capacité minimale:  34.5 µF pour tension d'ondulation 240 mV
        ESR max du condensateur:  120 mΩ
        Courant RMS du condensateur:  577 mA
        Courant d'ondulation recommandé du condensateur:  2.20 A

Inductance minimale pour éviter l'oscillation sous-harmonique:  8.96 µH

Puissance nominale de la diode de roue libre (si une diode de roue libre est requise): 1.93 W

Notez que pour que le circuit soit protégé contre les courts-circuits, choisissez le courant de saturation de l’inductance pour qu’il soit au moins égal à la limite de courant du commutateur du régulateur (ceci n’est pas inclus dans le code ci-dessus). Pour une sécurité supplémentaire et en considérant la tolérance à la fois de l’inductance et de la valeur nominale du courant de commutation, je recommande d’ajouter une marge de sécurité de 20% à la valeur nominale du courant de saturation.

Comme vous pouvez le voir, la valeur minimale de l’oscillateur sous-harmonique est plutôt non pertinente puisqu’elle est de deux ordres de grandeur plus petite que la valeur “Inductance minimale” basée sur le courant d’ondulation.

Consultez aussi la documentation de buck_regulator_inductance() et d’autres fonctions de UliEngineering.Electronics.SwitchingRegulator pour référence :

buck_regulator_inductance_docs.txt
Calculer l'inductance optimale d'un régulateur buck

Cette formule est basée sur la fraction de courant d'ondulation d'inductance [K].

La formule que nous utilisons est :

L = ((vin - vout) * (vout) / (f * K * Ioutmax)) * (Vout/Vin)

(notez que Vout/Vin est une estimation du rapport cyclique.)

Une bonne hypothèse, partagée par la plupart des grands fabricants, est
de choisir la valeur de l'inductance entre K=0.2 et K=0.4.
Typiquement, la meilleure valeur d'inductance se situe autour de K=0.3,
mais cela dépend

Il est généralement recommandé par les fiches techniques plus détaillées de toujours choisir
une inductance supérieure à la valeur obtenue avec K=0.1. Cela est dû au
schéma de contrôle en mode de courant qui nécessite un certain niveau de courant d'ondulation d'inductance.

Notez que de nombreuses fiches techniques spécifient également des valeurs d'inductance minimales pour éviter
les oscillations sous-harmoniques. Cela dépend de la pièce et varie de plus d'un
ordre de grandeur et n'est pas géré par la fonction.

Pour référence, voir par exemple TI sur https://www.ti.com/lit/ds/symlink/lmr36006.pdf#page=22,
section 9.2.1.2.4 : Sélection de l'inductance.

Consultez les articles similaires par catégorie : Calculateurs Électronique Python