Main Content

Verify Stability Margins and Analyze Sensitivity for LLC Resonant Converter

R2026b

In this step of the LLC Resonant Converter Controller Design Workflow example, you verify stability margins and analyze sensitivity for LLC resonant converter. Before deploying the LLC resonant converter voltage controller, verify that the closed loop remains stable across the full operating envelope. This live script performs classical control analysis in MATLAB: it evaluates gain margin, phase margin, and sensitivity peaks at the nominal operating point, and then sweeps load, source voltage, component tolerances, and sampling period to confirm the margins hold under realistic variation.

In this workflow, you:

  • Quantify stability margins (GM, PM, f c , M s , M t ) at the nominal operating point

  • Visualize open-loop Bode, sensitivity functions, and step-response behavior

  • Sweep load, output voltage, input voltage, resonant components, and control frequency

  • Roll up worst-case margins into a pass/fail sensitivity matrix for design review

Converter and Controller Parameterization

The stability and sensitivity analysis must operate on the same converter and controller data that the closed-loop simulation stage produced, so that this analysis reflects the gains that will actually be deployed. The file ctrlData.mat stores both the default gains generated by the automated tuning workflow and any custom gains you author manually. Use the drop-down to choose which parameterization source to load:

  • Option1 — Run ResonantConverterSim.slx to regenerate ctrlData.mat from the default tuning script, then load the default gains. Use this the first time you run the analysis or after changing plant parameters.

  • Option2 — Reuse the cached ctrlData.mat (skip the simulation) and load the default gains. Use this to iterate quickly when the plant has not changed.

  • Option3 — Reuse the cached ctrlData.mat and load the custom (hand-tuned) gains instead of the defaults. Use this to evaluate a manual retune against the same sensitivity criteria.

Parameterization = "Option1";

switch (Parameterization)

    case('Option1')
        %Parameterization Option-1
        simmodel = ResonantConverterSim;
        open_system(simmodel);
        out=sim(simmodel,'StopTime','0.01');
        savectrldatamat;
        %$ Controller Data
        load('ctrlData.mat')
        % Default Controller Gains
        CtrlParams.Kp   = ctrlData.Default.kpvolt; % Kp for PI
        CtrlParams.Ki   = ctrlData.Default.kivoltTs/TsVolt; % Ki for PI
        CtrlParams.Ts   = TsVolt; %  Controller Sample time
        CtrlParams.num  = ctrlData.Default.numecoef; % Controller S-domain Coefficients for Higher Order Compensator
        CtrlParams.den = ctrlData.Default.dencoef; % Controller S-domain Coefficients for Higher Order Compensator
        if ctrlData.Default.ctrltype ==1
            CtrlParams.Type = 'PI';
        else
            CtrlParams.Type = 'higherOrder';
        end
    case('Option2')

        %Parameterization Option-2
        ResonantConv = PlantParameters('Converter100W');
        PlantConfig=ResonantConv.PlantConfig; % tag to choose plant variant
        TsVolt = 50e-6;  % Controller Sample time
        parammodel = LLCCalcCtrlParams;
        open_system(parammodel);

        out = sim(parammodel,'StopTime','0.01');
        savectrldatamat;

        % Controller Data
        load('ctrlData.mat')
        % Default Controller Gains
        CtrlParams.Kp   = ctrlData.Default.kpvolt; % Kp for PI
        CtrlParams.Ki   = ctrlData.Default.kivoltTs/TsVolt; % Ki for PI
        CtrlParams.Ts   = TsVolt; %  Controller Sample time
        CtrlParams.num  = ctrlData.Default.numecoef; % Controller S-domain Coefficients for Higher Order Compensator
        CtrlParams.den = ctrlData.Default.dencoef; % Controller S-domain Coefficients for Higher Order Compensator

        if ctrlData.Default.ctrltype ==1
            CtrlParams.Type = 'PI';
        else
            CtrlParams.Type = 'higherOrder';
        end

    case('Option3')
        %Parameterization Option-3
        ResonantConv = PlantParameters('Converter100W');
        TsVolt = 50e-6;% Controller Sample time

        % Custom Controller Gains
        % Controller Data
        load('ctrlData.mat')
        CtrlParams.Kp   = ctrlData.Custom.kpvolt;
        CtrlParams.Ki   = ctrlData.Custom.kivoltTs/TsVolt;
        CtrlParams.Ts   = TsVolt;

        if ctrlData.Custom.ctrltype ==1
            CtrlParams.Type = 'PI';
        else
            CtrlParams.Type = 'higherOrder';
        end
end
Saved Controller default values to "ctrlData.mat"

The CtrlParams and ResonantConv structures are now populated with the gains, resonant-tank values, and operating conditions used by every downstream analysis block. All subsequent sections consume these two structures without redefining them.

Analyze Stability (Nominal Operating Point)

To characterize the closed-loop behavior at the design operating point, evaluate the classical stability metrics using the analytical plant model before running any parametric sweeps. The nominal values computed here become the reference against which the sweep results in the next section are compared, so a design that fails the nominal check should be retuned before sweeping.

results = LlcClassicalSensitivity('TF', CtrlParams, ResonantConv=ResonantConv);

The results object aggregates gain margin (GM), phase margin (PM), crossover frequency ( f c ), and the sensitivity peaks M s and M t at the nominal operating point. The three visualization subsections below (open-loop Bode, sensitivity functions, and step response) all read from this single structure, so the analytical model is evaluated only once.

To evaluate the stability metrics using the frequency-response data model instead, uncomment and run the following commands, and replace the results variable with resultsfre in the following sections.

% load('llcplantfre')
% resultsfre = LlcClassicalSensitivity('FRD', CtrlParams, PlantFRD=FREDataStore.F1.FRE, Pout=ResonantConv.Pout);

Using Open-Loop Bode

To locate the gain and phase crossovers and read off the classical stability margins, plot the open-loop Bode diagram of L ( s ) . The gain crossover frequency f c (where | L | = 0 dB) sets the closed-loop bandwidth, and the two crossover points define the phase and gain margins below.

The open-loop transfer function L ( s ) = G c ( s ) ⋅ G p ( s ) ⋅ G d e l a y ( s ) yields two classical stability margins:

  • Phase Margin (PM) = 1 8 0 ° + ∠ L ( j ω c ) — additional phase lag tolerable at the gain crossover frequency f c

  • Gain Margin (GM) = - | L ( j ω 1 8 0 ) | dB — additional plant gain tolerable at the phase crossover frequency

SensitivityPlots(results, 'plots', 'bode', 'Visible', 'on');

Figure LLC Open-Loop Bode Plot contains 2 axes objects. Axes object 1 with title Open-Loop Bode: L(s) = G indexOf c baseline (s) cdot G indexOf p baseline (s) cdot G indexOf Delay baseline (s) | GM = 49 . 3 dB, PM = 89 . 7 degree , f indexOf c baseline = 11 Hz, ylabel Magnitude [dB] contains 6 objects of type line, constantline, text. One or more of the lines displays its values using only markers Axes object 2 with xlabel Frequency [Hz], ylabel Phase [\\circ] contains 6 objects of type line, constantline, text. One or more of the lines displays its values using only markers

Using Sensitivity Functions

To capture worst-case disturbance amplification and closed-loop peaking across the entire frequency range (not just at the two crossover points), supplement GM and PM with the sensitivity functions S ( s ) and T ( s ) . Their peak values, M s and M t , provide a single scalar that bounds robustness against unmodeled dynamics and quantifies overshoot risk.

While GM and PM are widely used, they are single-point metrics evaluated at specific frequencies. They do not reveal:

  • How close the Nyquist curve passes to the critical point ( - 1 , 0 ) at intermediate frequencies between gain crossover ( ω g c ) and phase crossover ( ω p c ) frequencies.

  • The worst-case amplification of disturbances or plant uncertainty across the entire frequency range.

  • Whether a system with acceptable GM and PM might still exhibit excessive peaking (poor damping or near-instability at some frequency)

The sensitivity function S ( s ) quantifies how much the feedback loop attenuates or amplifies disturbances at the output.

The complementary sensitivity function T ( s ) describes how well the closed-loop system tracks the reference input.

S ( s ) = 1 1 + L ( s )

T ( s ) = L ( s ) 1 + L ( s )

Frequency Response Analysis of S ( j ω ) and T ( j ω )

  • | S ( j ω ) | (Sensitivity magnitude): At each frequency, | S ( j ω ) | equals the factor by which output disturbances are amplified (or attenuated) by the feedback loop.

    • | S | < 1 (negative dB): The loop rejects disturbances at that frequency (good).

    • | S | > 1 (positive dB): The loop amplifies disturbances at that frequency (undesirable).

    • | S | = 1 (0 dB): No benefit from feedback.

  • | T ( j ω ) | (Complementary Sensitivity magnitude): At each frequency, | T ( j ω ) | equals the factor by which sensor noise propagates to the output.

    • | T | ≈ 1 at low frequencies: Good reference tracking.

    • | T | ≫ 1 : Noise amplification and potential instability.

    • | T | → 0 at high frequencies: Noise is rejected.

  • S ( s ) — disturbance-to-output transfer. Peak M s = max | S ( j ω ) | quantifies worst-case disturbance amplification. M s < 2 (6 dB) guarantees GM ≥ 6 dB and PM ≥ 2 9 ° .

  • T ( s ) — reference-to-output transfer. Peak M t = max | T ( j ω ) | indicates closed-loop resonance; M t > 1 implies overshoot ≈ ( M t - 1 ) × 1 0 0 % .

  • These satisfy S + T = 1 : improving one at any frequency necessarily limits the other.

SensitivityPlots(results, 'plots', 'sensitivity', 'Visible', 'on');

Figure LLC Sensitivity Functions contains an axes object. The axes object with title Sensitivity and Complementary Sensitivity | M indexOf s baseline = 0 . 03 dB, M indexOf t baseline = - 0 . 00 dB, xlabel Frequency [Hz], ylabel Magnitude [dB] contains 9 objects of type line, constantline, text. One or more of the lines displays its values using only markers These objects represent |S(j\omega)| — Sensitivity, |T(j\omega)| — Complementary Sensitivity.

Using Time-domain Step Response

To confirm that the frequency-domain metrics translate into acceptable transient behavior, examine the reference-tracking and disturbance-rejection step responses. Rise time, overshoot, and settling time on these plots correspond directly to the f c , M t , and M s values inspected above.

The time-domain step response complements the frequency-domain analysis by revealing transient behavior directly.

Reference Tracking T(s)

  • A unit step is applied at V r e f and the normalized output V o u t / V r e f is observed.

  • Shows how quickly and accurately the output voltage follows a reference change.

  • Look for: rise time (speed), overshoot (damping), and settling time (stability).

  • A well-tuned controller reaches the target quickly with minimal overshoot.

Disturbance Rejection S(s)

  • A unit step disturbance V d i s t is injected at the output and V o u t / V d i s t is observed.

  • Shows how effectively the controller suppresses load transients.

  • Peak value indicates worst-case output deviation; settling time indicates recovery speed.

  • Ideally this response decays to zero rapidly.

SensitivityPlots(results, plots='step', Visible='on');

MATLAB figure

Metrics Summary

To turn the individual GM, PM, f c , M s , and M t readings into a single accept/reject decision at the nominal operating point, view them on a shared dashboard with the acceptance zones marked. Any metric that lands in the red zone should be addressed by retuning before continuing to the parametric sweeps.

The horizontal bar indicators below consolidate all stability and sensitivity metrics at the nominal operating point. Each metric is evaluated against three zones: excellent (green), acceptable (yellow), and insufficient (red). A robust design requires all five metrics within the acceptable or excellent region.

MetricsDashboard(results, Visible='on');

Figure LLC Control Metrics Dashboard contains an axes object. The hidden axes object contains 85 objects of type rectangle, line, text. One or more of the lines displays its values using only markers

Nominal Operating Point Summary

To capture the nominal metrics as a compact record for design review and later comparison against the sweep bounds, print the margins and sensitivity peaks in tabular form with per-metric assessments. Attach or archive this table alongside the design so downstream reviewers can verify the accept/reject verdict without rerunning the analysis.

SensitivityPrintResults(results);
╔══════════════════════════════════════════════════════════════╗
║        LLC CLASSICAL SENSITIVITY ANALYSIS RESULTS            ║
╠══════════════════════════════════════════════════════════════╣
║  Converter: 100W  |  Method: TF      |  Controller: PI       ║
╚══════════════════════════════════════════════════════════════╝

┌────────────────────────────────────────────────────────────┐
│              KEY METRICS AT A GLANCE                       │
├──────────────────┬────────────────┬────────────────────────┤
│ Metric           │ Value          │ Assessment             │
├──────────────────┼────────────────┼────────────────────────┤
│ Crossover fc     │ 11.5 Hz        │ [!  ] Very low        │
│ Phase Margin     │ 89.7 deg       │ [OK ] Excellent       │
│ Gain Margin      │ 49.3 dB        │ [OK ] Excellent       │
│ Ms (peak |S|)    │ 0.03 dB        │ [OK ] Very robust     │
│ Mt (peak |T|)    │ -0.00 dB       │ [OK ] No resonance    │
│ Rise Time        │ 31 ms          │ [~  ] Slow            │
└──────────────────┴────────────────┴───────────────────────┘

┌──────────────────────────────────────────────────────────────────────────┐
│                        DETAILED RESULTS                                  │
├────────────┬──────────────────┬────────────────────┬─────────────────────┤
│ Category   │ Parameter        │ Value              │ Assessment          │
├────────────┼──────────────────┼────────────────────┼─────────────────────┤
│ Plant      │ Kdc_eff          │ 5.74e-05 V/Hz      │ [!  ] Very small    │
│            │ Output pole fp   │ 180.4 Hz           │                     │
│            │ ESR zero fz      │ 350.9 kHz          │                     │
│            │ Operating fs     │ 113.65 kHz         │                     │
│            │ k = Lm/Lr        │ 14.17              │ [!  ] High (flat gain) │
├────────────┼──────────────────┼────────────────────┼─────────────────────┤
│ Controller │ Type             │ PI                 │                     │
├────────────┼──────────────────┼────────────────────┼─────────────────────┤
│ Stability  │ Crossover fc     │ 11.47 Hz           │ [!  ] Very low      │
│            │ Phase Margin     │ 89.7 deg           │ [OK ] Excellent     │
│            │ Gain Margin      │ 49.3 dB (x292)     │ [OK ] Excellent     │
│            │ Ms               │ 1.0034 (0.03 dB)   │ [OK ] Very robust   │
│            │ Ms frequency     │ 180.4 Hz           │                     │
├────────────┼──────────────────┼────────────────────┼─────────────────────┤
│ Performance │ Rise time        │ 31 ms              │ [~  ] Slow          │
│            │ Disturbance BW   │ ~11 Hz             │ [!  ] Very low      │
│            │ Overshoot        │ 0%                 │ [OK ] Excellent     │
└────────────┴──────────────────┴────────────────────┴─────────────────────┘

┌────────────────────────────────────────────────────────────┐
│              ROBUSTNESS CLASSIFICATION                     │
├────────────────────────────────────────────────────────────┤
│  [***] Ms < 1.6 dB : VERY ROBUST                         │
│        Guaranteed: GM > 10 dB, PM > 50 deg                │
├────────────────────────────────────────────────────────────┤
│  Scale:  [***] Very Robust  [** ] Robust                  │
│          [*  ] Acceptable   [!  ] Fragile                 │
└────────────────────────────────────────────────────────────┘

───────────────────────────────────────────────────────────────
  Stability: EXCELLENT  |  Performance: POOR (fc=11 Hz)
───────────────────────────────────────────────────────────────

Analyze Robustness (Parametric Sweeps)

Passing at the nominal operating point is necessary but not sufficient — the controller must hold acceptable margins across the range of loads, source voltages, component tolerances, and sampling rates it will encounter in the field. To verify this, sweep each source of variation independently while holding the others at nominal, and record the worst-case metrics per sweep. Each subsection below states the physical driver of the variation and the parameters held constant, so the resulting margin trend can be interpreted directly.

Load Variation (10% to 100% rated power)

To verify that light-load operation does not erode gain margin or push the crossover frequency below the design floor, sweep the load resistance from full load to 1 0 × nominal (10% load). At light load, the plant pole moves to lower frequencies and the plant gain rises, both of which can compress the phase margin near crossover.

Sweep load resistance from nominal (full load) to 1 0 × nominal (10% load). As R l o a d increases, the converter operates at lighter loads, shifting the plant pole and gain.

  • Constant: V i n , V o u t , controller gains, T s , resonant tank ( L r , C r )

  • Varies: P o u t = V o u t 2 / R l o a d decreases with increasing resistance

Rnom = ResonantConv.Vout^2 / ResonantConv.Pout;
RloadRange = linspace(Rnom, 10*Rnom, 10)';

[sweepRload, ~] = ParametricSweep(ResonantConv, CtrlParams, ...
    SweepParam='Rload', Range=RloadRange, Visible='on');

Figure Parametric Sweep - Rload contains 5 axes objects and another object of type subplottext. Axes object 1 with title GM Variation, xlabel Output Power [W], ylabel GM [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 2 with title PM Variation, xlabel Output Power [W], ylabel PM [deg] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 3 with title fc Variation, xlabel Output Power [W], ylabel fc [Hz] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 4 with title Ms Variation, xlabel Output Power [W], ylabel Ms [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 5 with title Mt Variation, xlabel Output Power [W], ylabel Mt [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal.

Output Voltage Variation (Vout +/- 10%)

To verify robustness against reference setpoint changes (for example, from a downstream setpoint command or a droop-controlled bus), sweep V o u t by ± 1 0 and observe how the resulting operating-frequency shift affects the margins. Because the required gain M changes with V o u t , the operating point slides along the FHA gain curve, where the slope (and therefore the plant gain at crossover) is not constant.

Sweep V o u t ± 1 0 . Changes the required gain M , moving the operating frequency on the FHA gain curve.

  • Constant: V i n , P o u t , controller gains, T s , resonant tank ( L r , C r )

  • Varies: R l o a d = V o u t 2 / P o u t changes with output voltage

VoutRange = linspace(0.9*ResonantConv.Vout, 1.1*ResonantConv.Vout, 10)';

[sweepVout, ~] = ParametricSweep(ResonantConv, CtrlParams, ...
    SweepParam='Vout', Range=VoutRange, Visible='on');

Figure Parametric Sweep - Vout contains 5 axes objects and another object of type subplottext. Axes object 1 with title GM Variation, xlabel Output Voltage [V], ylabel GM [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 2 with title PM Variation, xlabel Output Voltage [V], ylabel PM [deg] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 3 with title fc Variation, xlabel Output Voltage [V], ylabel fc [Hz] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 4 with title Ms Variation, xlabel Output Voltage [V], ylabel Ms [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 5 with title Mt Variation, xlabel Output Voltage [V], ylabel Mt [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal.

Input Voltage Variation (Vin +/- 10%)

To verify tolerance to grid or DC-bus variation upstream of the converter, sweep V i n by ± 1 0 and observe how the resulting change in required gain M = V o u t / ( V i n / 2 n ) moves the operating point along the FHA gain curve. High-line and low-line corners typically produce the most different margins, so both extremes need to satisfy the acceptance criteria.

Sweep V i n ± 1 0 . The required gain M = V o u t / ( V i n / 2 n ) changes with input voltage, shifting the operating frequency.

  • Constant: V o u t , P o u t , controller gains, T s , resonant tank ( L r , C r )

  • Varies: Operating point on the FHA gain curve moves as V i n changes

VinRange = linspace(0.9*ResonantConv.Vin, 1.1*ResonantConv.Vin, 10)';

[sweepVin, ~] = ParametricSweep(ResonantConv, CtrlParams, ...
    SweepParam='Vin', Range=VinRange, Visible='on');

Figure Parametric Sweep - Vin contains 5 axes objects and another object of type subplottext. Axes object 1 with title GM Variation, xlabel Input Voltage [V], ylabel GM [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 2 with title PM Variation, xlabel Input Voltage [V], ylabel PM [deg] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 3 with title fc Variation, xlabel Input Voltage [V], ylabel fc [Hz] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 4 with title Ms Variation, xlabel Input Voltage [V], ylabel Ms [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 5 with title Mt Variation, xlabel Input Voltage [V], ylabel Mt [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal.

Component Tolerance ((Lr, Cr +/- 10%)

To verify robustness against manufacturing tolerances of the resonant tank, sweep L r and C r together by ± 1 0 and observe how the resonant frequency f r 1 = 1 / ( 2 π L r C r ) and plant-gain slope shift at the operating point. Because the two components appear together in f r 1 , sweeping them jointly captures the worst-case combined effect that a single-component sweep would miss.

Sweep resonant inductor and capacitor together by percentage deviation. Component tolerances shift f r 1 = 1 / ( 2 π L r C r ) and alter the plant gain slope at the operating point.

  • Constant: V i n , V o u t , P o u t , controller gains, T s

  • Varies: Resonant frequency f r 1 , impedance Z r , quality factor Q

LrCrRange = linspace(-10, 10, 10)';

[sweepLrCr, ~] = ParametricSweep(ResonantConv, CtrlParams, ...
    SweepParam='LrCr', Range=LrCrRange, Visible='on');

Figure Parametric Sweep - LrCr contains 5 axes objects and another object of type subplottext. Axes object 1 with title GM Variation, xlabel Lr/Cr Deviation [%], ylabel GM [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 2 with title PM Variation, xlabel Lr/Cr Deviation [%], ylabel PM [deg] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 3 with title fc Variation, xlabel Lr/Cr Deviation [%], ylabel fc [Hz] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 4 with title Ms Variation, xlabel Lr/Cr Deviation [%], ylabel Ms [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 5 with title Mt Variation, xlabel Lr/Cr Deviation [%], ylabel Mt [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal.

Control Frequency Variation (20% to 200% rated)

To verify that the digital sampling delay does not erode phase margin below the acceptable threshold, sweep T s from 10 μ s to 100 μ s and observe how the phase margin degrades as the update rate slows. This sweep is important when considering deployment on a lower-cost target where the ISR budget forces a longer sampling period than the nominal design assumed.

Sweep sampling period from 10 μ s to 100 μ s. The digital delay e - 1 . 5 T s s erodes phase margin as control frequency decreases.

  • Constant: V i n , V o u t , P o u t , controller gains, resonant tank ( L r , C r )

  • Varies: PWM delay magnitude — longer T s adds more phase lag at crossover

TsRange = linspace(10e-6, 100e-6, 10)';

[sweepTs, ~] = ParametricSweep(ResonantConv, CtrlParams, ...
    SweepParam='Ts', Range=TsRange, Visible='on');

Figure Parametric Sweep - Ts contains 5 axes objects and another object of type subplottext. Axes object 1 with title GM Variation, xlabel Sample Time [s], ylabel GM [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 2 with title PM Variation, xlabel Sample Time [s], ylabel PM [deg] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 3 with title fc Variation, xlabel Sample Time [s], ylabel fc [Hz] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 4 with title Ms Variation, xlabel Sample Time [s], ylabel Ms [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal. Axes object 5 with title Mt Variation, xlabel Sample Time [s], ylabel Mt [dB] contains 4 objects of type line, constantline, patch. One or more of the lines displays its values using only markers These objects represent Sweep, Nominal.

Sensitivity Matrix

To distill the five parametric sweeps into a single design-review artifact, the worst-case spread (min/max) of GM, PM, f c , and M s from each sweep is shown as one row. A Limit row shows each metrics acceptance threshold (read from the definition in MetricsLimits.m), and an Assessment row grades each metrics from Excellent to Fail, so a low f c shows as Below tgt, a bandwidth shortfall, not a stability failure. The result shows at a glance which parameter (load, source voltage, component tolerance, or sampling rate) affects each margin, and by how much. Use the createSensitivityMatrix.m to create the matrix.

createSensitivityMatrix(ResonantConv,sweepRload, sweepVout, sweepVin, sweepLrCr, sweepTs)
==================================================================================
  SENSITIVITY MATRIX - LLC 100W HalfBridge
==================================================================================
  Variation         |     GM [dB] |    PM [deg] |     fc [Hz] |     Ms [dB] |
                    |   min / max |   min / max |   min / max |   min / max |
----------------------------------------------------------------------------------
  Rload (1x-10x)    | 49.3 / 69.0 | 63.8 / 89.7 |   10 /   11 | 0.03 / 2.03 |
  Vout +/-10%       | 47.6 / 50.9 | 88.9 / 90.4 |   11 /   11 | 0.00 / 0.08 |
  Vin +/-10%        | 48.5 / 50.2 | 89.7 / 89.7 |   10 /   13 | 0.03 / 0.03 |
  L,C +/-10%        | 47.7 / 51.2 | 89.6 / 89.7 |    9 /   14 | 0.03 / 0.03 |
  Ts (10-100us)     | 43.3 / 63.5 | 89.4 / 89.9 |   11 /   11 | 0.00 / 0.08 |
----------------------------------------------------------------------------------
  Limit             |        >= 6 |       >= 45 |       >= 50 |        <= 6 |
  Assessment        |   Excellent |        Good |   Below tgt |        Good |
==================================================================================

Read the matrix by row for the per-sweep drift, and by the Limit and Assessment rows at the bottom for where each metric lands overall. GM, PM, and M s grading Good or Excellent means the controller holds desirable stability margins across the entire swept range. However, f c is flagged Below tgt because crossover sits under its bandwidth target. This slows the output-voltage transient but does not affect stability. Because f c is set by the loop gain rather than tuned directly, a faster response comes from raising the controller (PI) gains, which increases the crossover frequency at the expense of some gain or phase margin.

See Also

Topics