Improve Simulation Speed of Power Electronics Systems with Reduced Order Modeling
This example shows how to enhance the model simulation speed of an electro-thermal DC-DC step-down converter by converting a high-fidelity switch to a reduced order model (ROM) switch. This conversion enables faster design iterations and analysis.
Modeling high-fidelity semiconductor switches is useful when you want to study their switching behavior for designing gate drivers, selecting an appropriate deadtime, or designing a converter which utilizes different on-state operating points. If you do not require this detailed analysis, it is beneficial to convert the high-fidelity switch to a ROM by using the generateSemiconductorSwitchROM
function.
Configure Buck Converter
This example converts an Infineon® IMW120R045M1
1200V SiC MOSFET into a ROM switch subsystem. This figure shows the original buck converter model using high-fidelity Infineon switches.
To modify the parameters of the NChannelMOSFETBuckConverter
model, use the SetUpConverterParameters
script.
SetUpConverterParameters;
The converter steps down a DC input voltage of 1000 V to an unregulated output voltage of 800 V. The converter operates at a switching frequency of 50000 Hz, incorporating Infineon IMW120R045M1 1200V SiC MOSFET. Output voltage ripple is less than 2%. Required duty ratio: 0.812711 Estimated series inductance: 2.844487 mH Selected Capacitance: 0.220000 µF
Generate ROM Switch from Detailed Switch
The generateSemiconductorSwitchROM
function converts a high-fidelity semiconductor switch subsystem into a MOSFET (Ideal, Switching) or IGBT (Ideal, Switching) block, which represents a ROM. The ROM maintains the sufficient fidelity level of its original counterpart and improves the simulation speed by allowing the simulation to run at much larger time step. Despite the absence of the detailed switching transitions, you can still compute the switching loss by using the ee_getPowerLossSummary
function.
Configure Input Arguments
Specify the input parameters for the generateSemiconductorSwitchROM
function.
To view or edit the test harness, specify the test harness folder.
ROMInputs.testHarnessFolder = [pwd filesep 'switchTestHarness'];
Set the maximum switching frequency of the converter. This argument filters the current and voltage for the reverse recovery loss of the body diode.
ROMInputs.maxSwitchingFrequency = converterParams.SwitchFrequency; % Hz
Set the on-stage voltage of the gate driver.
ROMInputs.onStateGateSourceVoltage = 15; % Volts
Set the gate driver resistance during the turn on and turn off of the switch.
ROMInputs.onStateGateResistance = 2; % Ohms ROMInputs.offStateGateResistance = 2; % Ohms set_param([OriginalModel '/Gate Driver/Gate Driver'],"rHigh", string(ROMInputs.onStateGateResistance)) set_param([OriginalModel '/Gate Driver/Gate Driver'],"rLow", string(ROMInputs.offStateGateResistance))
Set the current breakpoints for the I-V curve of the switch.
ROMInputs.currentRangeIV = 0:0.1:30;
Set the voltage and current breakpoints for loss extraction.
ROMInputs.offStateSwitchVoltages = [0,200,800,1000]; ROMInputs.currentRangeLoss = [0,1,6,30];
Set the temperature breakpoints.
ROMInputs.temperatures = [25,100,175];
Set the initial device temperature and the Foster model parameters of the switch. You can find these parameters in the datasheet or in the SPICE subcircuits.
Tdevice = 27; thermalParams.fosterCoeff.thermalResistance = [0.278,0.201,0.158,0.0234]; thermalParams.fosterCoeff.thermalTimeConstant = [1.78e-2,2.98e-3,5.23e-4,1.52e-5];
Disable Thermal Network
For an accurate extraction of the I-V characteristic, set the Thermal network parameter of the blocks inside the switch subsystem to External
if possible. This adjustment ensures the maintenance of a constant junction temperature by facilitating the connection of a fixed temperature source to the junction. If you do not disable the thermal network, the ROM tool can still obtain accurate characteristics by capturing steady-state simulation results.
NChannelMOSFET = [OriginalModel,'/MOSFET/IMBG120R045M1']; set_param(NChannelMOSFET,"thermal_network_parameterization","ee.enum.thermalNetworkTopology.external") save_system(OriginalModel);
Run generateSemiconductorSwitchROM
Function
The model workspace of the ROMBuckConverter
model contains the pre-generated ROM parameters. To generate the ROM parameters again, set the runROMTool
variable to true
and run the ExtractROMParameters
script.
runROMTool = false; displayROMOutput = false; if runROMTool ExtractROMParameters; %#ok end
Enable Thermal Network in Original Model
Once you extract the ROM parameters, enable the thermal network in the original model.
set_param(NChannelMOSFET,"thermal_network_parameterization","ee.enum.thermalNetworkTopology.foster"); set_param(NChannelMOSFET,"Rth_Foster",mat2str(thermalParams.fosterCoeff.thermalResistance)); set_param(NChannelMOSFET,"thermal_time_constant_Foster",mat2str(thermalParams.fosterCoeff.thermalTimeConstant)); set_param(NChannelMOSFET,"Tvec_initial_Foster",mat2str(Tdevice.*ones(1,4))); save_system(OriginalModel);
Update ROMBuckConverter
Model with ROM Parameters
Store the extracted ROM switch parameters in its model workspace.
if runROMTool mdlWks = get_param(ROModel,'ModelWorkspace'); %#ok assignin(mdlWks,'SwitchParams',ROM.SwitchParams); assignin(mdlWks,'DiodeParams',ROM.DiodeParams); save_system(ROModel); end
Enable Thermal Network in ROMBuckConverter
Model
Parameterize the Foster model in the ROM Buck converter.
ROMMOSFET = [ROModel '/MOSFET/MOSFETROM']; set_param(ROMMOSFET,"thermal_network_parameterization","ee.enum.thermalNetworkTopology.foster"); set_param(ROMMOSFET,"Rth_Foster",mat2str(thermalParams.fosterCoeff.thermalResistance)); set_param(ROMMOSFET,"thermal_time_constant_Foster",mat2str(thermalParams.fosterCoeff.thermalTimeConstant)); set_param(ROMMOSFET,"Tvec_initial_Foster",mat2str(Tdevice.*ones(1,4))); save_system(ROModel);
Validate ROMBuckConverter
Model
Compare the simulation time of the ROM with the original model. The simulation speed of the ROM is faster than the speed of the original model.
[OriginalBuckOutput,ROMBuckOutput] = compareSimulationTime(OriginalModel,ROModel);
Original Model ROM ______________ ______ Elapsed Time (sec) 29.231 12.658
Plot and compare the output voltage and inductor current waveforms of the ROM against the original model.
plotOutputWaveforms(OriginalBuckOutput.simlogNChannelMOSFETBuckConverter,ROMBuckOutput.simlogROMMOSFETBuckConverter,converterParams.OutputVoltage,converterParams.LoadResistance)
Plot and compare the output voltage harmonics of the original model and the ROM.
compareOutputVoltageHarmonics(OriginalBuckOutput.simlogNChannelMOSFETBuckConverter.R.v,ROMBuckOutput.simlogROMMOSFETBuckConverter.R.v,converterParams.SwitchFrequency);
Plot and compare the junction temperature rise of the original model and the ROM.
compareJunctionTempRise(OriginalBuckOutput.simlogNChannelMOSFETBuckConverter,ROMBuckOutput.simlogROMMOSFETBuckConverter);
Plot and compare the efficiency of the original model and the ROM.
compareEfficiency(OriginalBuckOutput.simlogNChannelMOSFETBuckConverter,ROMBuckOutput.simlogROMMOSFETBuckConverter);
Original Model ROM ______________ ______ Total Loss (W) 159.65 162.79 Efficiency (%) 98.265 98.228
See Also
N-Channel MOSFET | generateSemiconductorSwitchROM
| MOSFET (Ideal, Switching)