8.2 Measuring Control Loop Parameters

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

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.