Modèles de diode simple et Shockley : comparaison pour la charge d'un condensateur en Python avec UliEngineering
Vous pouvez facilement comparer un modèle de diode à chute de tension constante simple avec un modèle de diode de Shockley pour la charge d’un condensateur à l’aide de la bibliothèque Python UliEngineering.
Dans cet exemple, le modèle simple est ajusté au modèle de Shockley à un courant de référence de 10mA. Le sous-graphique du haut montre la tension absolue du condensateur pendant la charge, et le sous-graphique du bas montre la différence Shockley - simple.
from UliEngineering.Electronics.Capacitors import capacitor_resistor_charge_time
from UliEngineering.Electronics.Diode import *
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('ggplot')
SOURCE_VOLTAGE = 5.0
CAPACITANCE = 100e-6
RESISTANCE = 470.0
REFERENCE_CURRENT = 10e-3
def build_models(simple_drop, ideality_factor):
saturation_current = shockley_diode_saturation_current(
simple_drop,
REFERENCE_CURRENT,
ideality_factor=ideality_factor,
)
return (
SimpleDiodeModel(simple_drop),
ShockleyDiodeModel(saturation_current, ideality_factor=ideality_factor),
)
def charge_curves(simple_model, shockley_model):
max_voltage = (SOURCE_VOLTAGE - simple_model.minimum_series_voltage()) * 0.999
voltage_grid = np.linspace(0.0, max_voltage, 1200)
simple_times = capacitor_resistor_charge_time(
CAPACITANCE,
RESISTANCE,
SOURCE_VOLTAGE,
voltage_grid,
initial_voltage=0.0,
diode_model=simple_model,
)
shockley_times = capacitor_resistor_charge_time(
CAPACITANCE,
RESISTANCE,
SOURCE_VOLTAGE,
voltage_grid,
initial_voltage=0.0,
diode_model=shockley_model,
)
common_time = np.linspace(0.0, max(simple_times[-1], shockley_times[-1]), 1200)
simple_voltage = np.interp(common_time, simple_times, voltage_grid)
shockley_voltage = np.interp(common_time, shockley_times, voltage_grid)
return common_time, simple_voltage, shockley_voltage
def render_plot(title, simple_model, shockley_model, outfile):
time_axis, simple_voltage, shockley_voltage = charge_curves(simple_model, shockley_model)
difference = shockley_voltage - simple_voltage
fig, axes = plt.subplots(2, 1, figsize=(7, 6), sharex=True)
axes[0].plot(time_axis * 1000.0, simple_voltage, label='Modèle de diode simple', linewidth=2)
axes[0].plot(time_axis * 1000.0, shockley_voltage, label='Modèle de diode de Shockley', linewidth=2)
axes[0].set_ylabel('Tension du condensateur (V)')
axes[0].set_title(title)
axes[0].legend(loc='lower right')
axes[0].grid(True, which='both', linestyle='--', linewidth=0.5)
axes[1].plot(time_axis * 1000.0, difference, linewidth=2)
axes[1].axhline(0.0, color='black', linewidth=1, alpha=0.5)
axes[1].set_xlabel('Temps (ms)')
axes[1].set_ylabel('Delta de tension (V)')
axes[1].grid(True, which='both', linestyle='--', linewidth=0.5)
fig.tight_layout()
fig.savefig(outfile)
plt.close(fig)
render_plot(
'Courbe de charge du condensateur : approximation de diode Schottky',
*build_models(0.3, 1.05),
'capacitor_charge_schottky_simple_vs_shockley.svg',
)
render_plot(
'Courbe de charge du condensateur : approximation de diode silicium',
*build_models(0.7, 1.9),
'capacitor_charge_silicon_simple_vs_shockley.svg',
)Comparaison de diode Schottky
Comparaison de diode silicium
Pourquoi le modèle de Shockley est-il si différent ?
Le point clé est que ces deux modèles de diode répondent à des questions physiques différentes.
Le modèle de diode simple suppose une chute de tension directe fixe, par exemple 0.7V pour une diode en silicium. Cela signifie que le réseau RC voit toujours approximativement :
avec un V_D constant. En d’autres termes, la diode est traitée comme un décalage de tension toujours actif.
Le modèle de Shockley ne maintient pas la chute de tension de la diode constante. Au lieu de cela, la tension directe dépend du courant approximativement comme suit :
$$ I = I_S \left(e^{\frac{V_D}{nV_T}} - 1\right) $$donc lorsque le courant de charge change, la tension de la diode change également.
Dans cet exemple, les deux modèles sont ajustés uniquement en un point de fonctionnement : 10mA. Cela signifie qu’ils ne sont en accord qu’au voisinage de ce courant. Au tout début de la charge, le courant est proche de cette valeur de référence, donc les deux courbes commencent presque superposées.
Ensuite, le condensateur se charge et le courant diminue. C’est là que les modèles se séparent :
- Dans le modèle simple, la diode produit toujours la même chute de tension fixe.
- Dans le modèle de Shockley, le courant plus faible produit une tension directe plus faible.
- Puisque la diode de Shockley « consomme » désormais moins de la tension source, il reste plus de tension sur le chemin résistance-condensateur.
- Cela fait que le condensateur se charge plus rapidement, donc la courbe de Shockley passe au-dessus de la courbe du modèle simple.
C’est pourquoi la différence est la plus visible au milieu du processus de charge. Le modèle simple ne peut pas réagir au courant changeant, tandis que le modèle de Shockley fait exactement cela.
Pourquoi le delta atteint-il un pic ?
Le pic se produit pour deux raisons : l’une physique, l’autre numérique.
1. La raison physique
À t = 0, les deux modèles sont proches car le courant est proche du point d’ajustement. Lorsque le courant descend en dessous de 10mA, la tension directe de Shockley tombe en dessous de l’approximation à chute fixe, donc la tension du condensateur de Shockley prend de l’avance de plus en plus.
Cela fait que le delta augmente initialement.
2. La raison de tracé/simulation
Le code ne compare pas les deux modèles jusqu’à la fin asymptotique non restreinte de la solution de Shockley. Au lieu de cela, il construit une grille de tension uniquement jusqu’à :
max_voltage = (SOURCE_VOLTAGE - simple_model.minimum_series_voltage()) * 0.999Ainsi, les deux courbes ne sont comparées que jusqu’à ce qu’elles atteignent environ 99.9% de la tension finale du modèle simple.
Ensuite, les deux traces de tension sont rééchantillonnées sur un axe temporel commun à l’aide de np.interp(). Une fois que le modèle de Shockley atteint cette tension de comparaison supérieure, sa trace interpolée devient plate à la fin du graphique, tandis que le modèle simple rattrape encore son retard.
Cela signifie que :
- Au début, le delta est faible car les deux modèles partent de la même tension initiale.
- Au milieu, le modèle de Shockley prend de l’avance car sa chute directe diminue avec le courant.
- Vers la fin, la trace de Shockley a déjà atteint le plafond de comparaison choisi, donc le modèle simple rattrape progressivement son retard.
- En conséquence, le delta tracé diminue à nouveau et finit par revenir vers zéro.
Le pic n’est donc pas seulement une « caractéristique mystérieuse » de l’équation de la diode. Il résulte de la combinaison du comportement de la diode dépendant du courant et du fait que ce graphique particulier ne compare les deux modèles que sur une plage de tension fixe.