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:
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 |
After running the entire testplan on the test schematic LLC/8.2_LLC Closed Loop.sxsch, the overview test report contains the five summary graphs followed by the individual test reports.