DVM Tutorial
|
The DVM Bode Plot test objective measures the gain crossover, gain margin, and phase margin for a single line voltage and load current. Executing multiple Bode plot tests and aggregating the results can generate a visual picture of the control loop behavior over all line and load conditions. DVM automates the process of executing the tests and generating the summary curves.
Since a SIMPLIS AC analysis can be run only after a successful periodic operating point (POP) analysis, each Bode plot test first runs a POP analysis and then the AC analysis. With the data for both analyses available, DVM makes steady-state measurements, including efficiency, on the POP data, and then makes AC measurements on the AC analysis data. The Bode plot tests can, therefore, generate both AC data and steady-state data.
This example demonstrates how to gather the usual AC scalar measurements and make measurements on the steady-state data, in particular, the efficiency and switching frequency of the converter.
The schematic design for this example is an LLC converter operating
from a PFC converter output of 380V. The output voltage is 24V and the
output power level is 120W. The schematic for this example is shown below
and from SIMPLIS_dvm_tutorial_examples.zip
at this path:
LLC/8.2_LLC Closed Loop.sxsch
Features of the above schematic:
To generate the scalar measurement of the converter switching frequency, the DVM CLK probe was placed on the schematic and connected to the POP trigger output.
The fixed probe measurement Frequency is applied to the DVM CLK probe to generate the scalar named Frequency(CLK) with the value measured from the simulation.
The testplan Alias() function is used to create three scalar measurement aliases for each scalar (Nominal, Minimum, and Maximum) with one for each line voltage.
After all simulations complete, the summary curves are generated
with the CreateXYScalarPlot() function. As with the example in 8.1 Adding Power Losses
to a Testplan, a post-process script runs using the SIMetrix script
version of the CreateXYScalarPlot() function, which is
SimplisDVMAdvancedUtilMeasurementCreateXYScalarPlot().
The testplan for this example, as shown below, contains Bode plot tests at load levels from 5% to 100% of full load at three input voltages, Minimum, Nominal, and Maximum. As with the example in 8.1 Adding Power Losses to a Testplan, this testplan uses 5% load steps from 5% to 40% of full load and 10% load steps from 40% to 100% of full load. The final summary curves are generated from five different tests to allow for easy report customization.
*** | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
*** 8.2_efficiency_and_loop_characteristics.testplan | |||||||||||
*** | |||||||||||
*** | |||||||||||
*?@ Analysis | Objective | Source | Load | Label | Create | Create | Create | Create | Create | Create | PostProcess |
*** | |||||||||||
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 5%) | Efficiency and Loop Characterization|Vin Nominal|5% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 10%) | Efficiency and Loop Characterization|Vin Nominal|10% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 15%) | Efficiency and Loop Characterization|Vin Nominal|15% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 20%) | Efficiency and Loop Characterization|Vin Nominal|20% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 25%) | Efficiency and Loop Characterization|Vin Nominal|25% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 30%) | Efficiency and Loop Characterization|Vin Nominal|30% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 35%) | Efficiency and Loop Characterization|Vin Nominal|35% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 40%) | Efficiency and Loop Characterization|Vin Nominal|40% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 50%) | Efficiency and Loop Characterization|Vin Nominal|50% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 60%) | Efficiency and Loop Characterization|Vin Nominal|60% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 70%) | Efficiency and Loop Characterization|Vin Nominal|70% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 80%) | Efficiency and Loop Characterization|Vin Nominal|80% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 90%) | Efficiency and Loop Characterization|Vin Nominal|90% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Nominal) | LOAD(OUTPUT:1, 100%) | Efficiency and Loop Characterization|Vin Nominal|100% Load | alias(Efficiency,eta_nom) | alias(Avg(ILOAD), iload_nom) | alias(gain_crossover_freq, gxover_nom) | alias(gain_margin, gmargin_nom) | alias(phase_margin, pmargin_nom) | alias( Frequency(CLK) , sw_freq_nom ) | |
*** | |||||||||||
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 5%) | Efficiency and Loop Characterization|Vin Maximum|5% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 10%) | Efficiency and Loop Characterization|Vin Maximum|10% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 15%) | Efficiency and Loop Characterization|Vin Maximum|15% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 20%) | Efficiency and Loop Characterization|Vin Maximum|20% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 25%) | Efficiency and Loop Characterization|Vin Maximum|25% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 30%) | Efficiency and Loop Characterization|Vin Maximum|30% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 35%) | Efficiency and Loop Characterization|Vin Maximum|35% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 40%) | Efficiency and Loop Characterization|Vin Maximum|40% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 50%) | Efficiency and Loop Characterization|Vin Maximum|50% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 60%) | Efficiency and Loop Characterization|Vin Maximum|60% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 70%) | Efficiency and Loop Characterization|Vin Maximum|70% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 80%) | Efficiency and Loop Characterization|Vin Maximum|80% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 90%) | Efficiency and Loop Characterization|Vin Maximum|90% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Maximum) | LOAD(OUTPUT:1, 100%) | Efficiency and Loop Characterization|Vin Maximum|100% Load | alias(Efficiency,eta_max) | alias(Avg(ILOAD), iload_max) | alias(gain_crossover_freq, gxover_max) | alias(gain_margin, gmargin_max) | alias(phase_margin, pmargin_max) | alias( Frequency(CLK) , sw_freq_max ) | |
*** | |||||||||||
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 5%) | Efficiency and Loop Characterization|Vin Minimum|5% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 10%) | Efficiency and Loop Characterization|Vin Minimum|10% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 15%) | Efficiency and Loop Characterization|Vin Minimum|15% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 20%) | Efficiency and Loop Characterization|Vin Minimum|20% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 25%) | Efficiency and Loop Characterization|Vin Minimum|25% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 30%) | Efficiency and Loop Characterization|Vin Minimum|30% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 35%) | Efficiency and Loop Characterization|Vin Minimum|35% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 40%) | Efficiency and Loop Characterization|Vin Minimum|40% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 50%) | Efficiency and Loop Characterization|Vin Minimum|50% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 60%) | Efficiency and Loop Characterization|Vin Minimum|60% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 70%) | Efficiency and Loop Characterization|Vin Minimum|70% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 80%) | Efficiency and Loop Characterization|Vin Minimum|80% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 90%) | Efficiency and Loop Characterization|Vin Minimum|90% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
Ac | BodePlot(OUTPUT:1) | SOURCE(INPUT:1, Minimum) | LOAD(OUTPUT:1, 100%) | Efficiency and Loop Characterization|Vin Minimum|100% Load | alias(Efficiency,eta_min) | alias(Avg(ILOAD), iload_min) | alias(gain_crossover_freq, gxover_min) | alias(gain_margin, gmargin_min) | alias(phase_margin, pmargin_min) | alias( Frequency(CLK) , sw_freq_min ) | |
*** | |||||||||||
NoSimulation | Efficiency and Loop Characterization|Efficiency Summary | ..\scripts\8.2_efficiency_and_loop_characteristics_post_process.sxscr | |||||||||
NoSimulation | Efficiency and Loop Characterization|Gain Crossover Frequency | ..\scripts\8.2_efficiency_and_loop_characteristics_post_process.sxscr | |||||||||
NoSimulation | Efficiency and Loop Characterization|Gain Margin | ..\scripts\8.2_efficiency_and_loop_characteristics_post_process.sxscr | |||||||||
NoSimulation | Efficiency and Loop Characterization|Phase Margin | ..\scripts\8.2_efficiency_and_loop_characteristics_post_process.sxscr | |||||||||
NoSimulation | Efficiency and Loop Characterization|Switching Frequency | ..\scripts\8.2_efficiency_and_loop_characteristics_post_process.sxscr |
© 2015 simplistechnologies.com | All Rights Reserved