Für den 2-Level-3Phasen-300A-IGBT-Wechselrichter ist eine Dynamic Link Library (DLL) verfügbar. Durch Einbinden
dieser Bibliothek in numerische Simulationsprogramme lassen sich damit komplexe umrichtergespeiste Antriebe
simulieren. Sie kann kostenlos angefordert werden.
Beispiel:
% Level2_300A_800V_geschlWKuehler_ASM.m
% Transiente thermisch-elektrische Simulation 3Phasen-2Level-Wechselrichter, Last: Asynchronmotor (Motorbetrieb)
% Version 1.0, 02.05.2022
% IGBT-Modul 300A/1200V, Uzk=800V
% Kuehlkoerper: geschl. Wasserkuehler mit 14,5mm Deckplatte
% Waermeleitpaste: silikonfrei
% Kuehlmedium: Wasser 8l/min
% Last: Asynchronmotor, (Ls, Rs, Lh, Lr, Rr, Schlupf)
% Motordaten: nur LR-Last, dann Lh = 1E-10, Lr = 1E-10, Rr = 1E-10
% ------------------------------------------------------------------------
% Lib-Funktionen Level2_300A_800V_geschlWKuehler_ASM.m:
% call DatReset:
% alle Variable in der DLL initialisieren (ton/toff, Ut, Zth)
% call DatenSchreiben:
% Steuer-Datenfeld[] in der DLL übergeben und den Variablen zuweisen
% DatenfeldSchreiben[1] = d_SimuZeit_Ende Simulationszeitende
% DatenfeldSchreiben[2] = d_Ls123 Statorinduktivität
% DatenfeldSchreiben[3] = d_Lh123 Hauptinduktivität
% DatenfeldSchreiben[4] = d_Lr123 Rotorinduktivität
% DatenfeldSchreiben[5] = d_Rs123 Statorwiderstand
% DatenfeldSchreiben[6] = d_Rr123 Rotorwiderstand
% DatenfeldSchreiben[7] = d_S Schlupfwert
% DatenfeldSchreiben[8] = d_Tamb Tambient
% DatenfeldSchreiben[9] = i_Gate_S1 Gate Schalter 1
% DatenfeldSchreiben[10] = i_Gate_S2 Gate Schalter 2
% DatenfeldSchreiben[11] = i_Gate_S3 Gate Schalter 3
% DatenfeldSchreiben[12] = i_Gate_S4 Gate Schalter 4
% DatenfeldSchreiben[13] = i_Gate_S5 Gate Schalter 5
% DatenfeldSchreiben[14] = i_Gate_S6 Gate Schalter 6
% call DatBerechnenLesen:
% Berechnung in der DLL bis Simulationszeitende mit anschließender Übertragung der Meßdaten
% Ergebnisfeld[1] = d_Is1 Strom Stator 1
% Ergebnisfeld[2] = d_Is2 Strom Stator 2
% Ergebnisfeld[3] = d_Is3 Strom Stator 3
% Ergebnisfeld[4] = d_Ir1 Strom Rotor 1
% Ergebnisfeld[5] = d_Ir2 Strom Rotor 2
% Ergebnisfeld[6] = d_Ir3 Strom Rotor 3
% Ergebnisfeld[7] = d_Us1 Spannung Stator 1
% Ergebnisfeld[8] = d_Us2 Spannung Stator 2
% Ergebnisfeld[9] = d_Us3 Spannung Stator 3
% Ergebnisfeld[10] = d_Ur1 Spannung Rotor 1
% Ergebnisfeld[11] = d_Ur2 Spannung Rotor 2
% Ergebnisfeld[12] = d_Ur3 Spannung Rotor 3
% Ergebnisfeld[13] = d_T_Schalter1 Temperatur Schalter 1
% Ergebnisfeld[14] = d_T_Schalter2 Temperatur Schalter 2
% Ergebnisfeld[15] = d_T_Diode1 Temperatur Diode 1
% Ergebnisfeld[16] = d_T_Diode2 Temperatur Diode 2
% Eingabe Statorinduktivität (Ls1/2/3 in H)
d_Ls123 = 0.00019500;
% Eingabe Hauptinduktivität (Lh1/2/3 in H)
d_Lh123 = 0.01110000;
% Eingabe Rotorinduktivität (Lr1/2/3 in H)
d_Lr123 = 0.00023800;
% Eingabe Statorwiderstand (Rs1/2/3 in Ohm)
d_Rs123 = 0.015800;
% Eingabe Rotorwiderstand (Läufer)(Rr1/2/3 in Ohm)
d_Rr123 = 0.010000;
% Schlupfwert (0-1)
d_S = 0.040;
% Eingabe Tamb (0.00-300C)
d_Tamb = 25;
% Vorbelegung Variable
d_Is1 = 0;
d_Is2 = 0;d_Is3 = 0;
d_Ir1 = 0;
d_Ir2 = 0;
d_Ir3 = 0;
d_Us1 = 0;
d_Us2 = 0;
d_Us3 = 0;
d_Ur1 = 0;
d_Ur2 = 0;
d_Ur3 = 0;
d_T_Schalter1 = 0;
d_T_Schalter2 = 0;
d_T_Diode1 = 0;
d_T_Diode2 = 0;
% Externer Bibliothek laden
loadlibrary('Level2_300A_800V_geschlWKuehler_ASM_dll.dll' , 'Level2_300A_800V_geschlWKuehler_ASM_dll.h')
% Funktion DatReset in externer Bibliothek aufrufen (Daten zurücksetzen)
calllib('Level2_300A_800V_geschlWKuehler_ASM_dll' , 'DatReset');
% Datenfeld mit Daten zusammensetzen (1. Schaltmuster)
i_Gate_S1 = 1; i_Gate_S2 = 0; i_Gate_S3 = 1; i_Gate_S4 = 0; i_Gate_S5 = 1; i_Gate_S6 = 0;
d_SimuZeit_Ende = 0.00000823;
DatenfeldSchreiben = [d_SimuZeit_Ende, d_Ls123, d_Lh123, d_Lr123, d_Rs123, d_Rr123, d_S, d_Tamb, i_Gate_S1, i_Gate_S2, i_Gate_S3, i_Gate_S4, i_Gate_S5, i_Gate_S6];
% Funktion DatSchreiben in externer Bibliothek aufrufen (Daten nach DLL schreiben)
calllib('Level2_300A_800V_geschlWKuehler_ASM_dll' , 'DatSchreiben', DatenfeldSchreiben);
% Funktion DatBerechnenLesen in externer Bibliothek aufrufen (Daten in DLL berechnen, Daten von DLL lesen)
DatenfeldLesen = [d_Is1, d_Is2, d_Is3, d_Ir1, d_Ir2, d_Ir3, d_Us1, d_Us2, d_Us3, d_Ur1, d_Ur2, d_Ur3, d_T_Schalter1, d_T_Schalter2, d_T_Diode1, d_T_Diode2];
[~, Ergebnisfeld] = calllib('Level2_300A_800V_geschlWKuehler_ASM_dll' , 'DatBerechnenLesen', DatenfeldLesen);
disp(Ergebnisfeld);
% 2. Schaltmuster
i_Gate_S1 = 1; i_Gate_S2 = 0; i_Gate_S3 = 1; i_Gate_S4 = 0; i_Gate_S5 = 0; i_Gate_S6 = 1;
d_SimuZeit_Ende = 0.00002161;
DatenfeldSchreiben = [d_SimuZeit_Ende, d_Ls123, d_Lh123, d_Lr123, d_Rs123, d_Rr123, d_S, d_Tamb, i_Gate_S1, i_Gate_S2, i_Gate_S3, i_Gate_S4, i_Gate_S5, i_Gate_S6];
calllib('Level2_300A_800V_geschlWKuehler_ASM_dll' , 'DatSchreiben', DatenfeldSchreiben);
DatenfeldLesen = [d_Is1, d_Is2, d_Is3, d_Ir1, d_Ir2, d_Ir3, d_Us1, d_Us2, d_Us3, d_Ur1, d_Ur2, d_Ur3, d_T_Schalter1, d_T_Schalter2, d_T_Diode1, d_T_Diode2];
[~, Ergebnisfeld] = calllib('Level2_300A_800V_geschlWKuehler_ASM_dll' , 'DatBerechnenLesen', DatenfeldLesen);
disp(Ergebnisfeld);
% 3. Schaltmuster
i_Gate_S1 = 0; i_Gate_S2 = 1; i_Gate_S3 = 1; i_Gate_S4 = 0; i_Gate_S5 = 0; i_Gate_S6 = 1;
d_SimuZeit_Ende = 0.00003265;
DatenfeldSchreiben = [d_SimuZeit_Ende, d_Ls123, d_Lh123, d_Lr123, d_Rs123, d_Rr123, d_S, d_Tamb, i_Gate_S1, i_Gate_S2, i_Gate_S3, i_Gate_S4, i_Gate_S5, i_Gate_S6];
calllib('Level2_300A_800V_geschlWKuehler_ASM_dll' , 'DatSchreiben', DatenfeldSchreiben);
DatenfeldLesen = [d_Is1, d_Is2, d_Is3, d_Ir1, d_Ir2, d_Ir3, d_Us1, d_Us2, d_Us3, d_Ur1, d_Ur2, d_Ur3, d_T_Schalter1, d_T_Schalter2, d_T_Diode1, d_T_Diode2];
[~, Ergebnisfeld] = calllib('Level2_300A_800V_geschlWKuehler_ASM_dll' , 'DatBerechnenLesen', DatenfeldLesen);
disp(Ergebnisfeld);
% 4. Schaltmuster
i_Gate_S1 = 0; i_Gate_S2 = 1; i_Gate_S3 = 0; i_Gate_S4 = 1; i_Gate_S5 = 0; i_Gate_S6 = 1;
d_SimuZeit_Ende = 0.00005107;
DatenfeldSchreiben = [d_SimuZeit_Ende, d_Ls123, d_Lh123, d_Lr123, d_Rs123, d_Rr123, d_S, d_Tamb, i_Gate_S1, i_Gate_S2, i_Gate_S3, i_Gate_S4, i_Gate_S5, i_Gate_S6];
calllib('Level2_300A_800V_geschlWKuehler_ASM_dll' , 'DatSchreiben', DatenfeldSchreiben);
DatenfeldLesen = [d_Is1, d_Is2, d_Is3, d_Ir1, d_Ir2, d_Ir3, d_Us1, d_Us2, d_Us3, d_Ur1, d_Ur2, d_Ur3, d_T_Schalter1, d_T_Schalter2, d_T_Diode1, d_T_Diode2];
[~, Ergebnisfeld] = calllib('Level2_300A_800V_geschlWKuehler_ASM_dll' , 'DatBerechnenLesen', DatenfeldLesen);
disp(Ergebnisfeld);
% 5. Schaltmuster
i_Gate_S1 = 0; i_Gate_S2 = 1; i_Gate_S3 = 1; i_Gate_S4 = 0; i_Gate_S5 = 0; i_Gate_S6 = 1;
d_SimuZeit_Ende = 0.00006033;
DatenfeldSchreiben = [d_SimuZeit_Ende, d_Ls123, d_Lh123, d_Lr123, d_Rs123, d_Rr123, d_S, d_Tamb, i_Gate_S1, i_Gate_S2, i_Gate_S3, i_Gate_S4, i_Gate_S5, i_Gate_S6];
calllib('Level2_300A_800V_geschlWKuehler_ASM_dll' , 'DatSchreiben', DatenfeldSchreiben);
DatenfeldLesen = [d_Is1, d_Is2, d_Is3, d_Ir1, d_Ir2, d_Ir3, d_Us1, d_Us2, d_Us3, d_Ur1, d_Ur2, d_Ur3, d_T_Schalter1, d_T_Schalter2, d_T_Diode1, d_T_Diode2];
[~, Ergebnisfeld] = calllib('Level2_300A_800V_geschlWKuehler_ASM_dll' , 'DatBerechnenLesen', DatenfeldLesen);
disp(Ergebnisfeld);
% Externer Bibliothek aus dem Speicher entladen
unloadlibrary('Level2_300A_800V_geschlWKuehler_ASM_dll');
Ergebnis:
Is1 Is2 Is3 Ir1 Ir2 Ir3 Us1 Us2 Us3 Ur1 Ur2 Ur3 T_S1 T_S2 T_D1 T_D2
0.0001 0.0001 -0.0001 0 0 0 0.0000 0.0000 -0.000 0 0 0 25.0000 25.0000 25.0000 25.0000
8.2817 8.2817 -16.5633 8.1066 8.1066 -16.2131 120.4036 120.4036 -240.8073 145.6964 145.6964 -291.3929 25.0004 25.0000 25.0000 25.0000
1.3612 21.9210 -23.2821 1.3302 21.4560 -22.7862 -121.7651 240.4247 -118.6596 -145.1956 292.1178 -146.9222 25.0087 25.0000 25.0000 25.0016
1.3332 21.6487 -22.9819 1.3023 21.1807 -22.4830 -0.2728 -2.5241 2.7969 -0.0324 1.7593 -1.7269 25.0084 25.0000 25.0000 25.0018
-4.4217 33.0127 -28.5909 -4.3315 32.3007 -27.9692 -120.8192 239.1026 -118.2835 -145.3419 292.9829 -147.6410 25.0083 25.0001 25.0000 25.0018