I have a limited understanding of control theory. I dealt with poles and zeroes and transfer functions in school. I've implemented several microprocessor-based control schemes for DC/DC converters. How these two things relate to each other, I've yet to figure out, and I'd like to. Basing designs on trial and error can work, but I prefer to have a deeper understanding of what I'm doing and what the consequences are.

Answers should focus on how to analyze the system, not on how to improve it. That said, if you have suggestions for improving the system, and wish to give an analytical reason why, that would be fantastic! Just as long as improvement is secondary to analysis.

My example system for the purposes of this question: enter image description here

  • C1: 1000uF
  • C2: 500uF
  • L1: 500 uH
  • Switching frequency: 4 kHz
  • R1: Variable
  • Input voltage: 400 volts
  • Output voltage target: 500 volts
  • Output current limit: 20 amps

I'm trying to regulate the output voltage, without exceeding an output current limit. I have voltage and current sensing, which go through various amplification stages I'm not analyzing at this juncture, but which do include some filtering. This is followed by an RC lowpass filter of 100 ohms and 1000 pF directly at the A/D converter. The A/D samples at 12 kHz. This value goes through a single-pole IIR moving-average filter of the last 64 samples.

After that, I have two PI loops. First, the voltage loop. The below is pseudocode, with values scaled to be volts, mA, and nanoseconds. Assume bounds checking is implemented correctly elsewhere. The structure of these loops defines P in terms of the maximum allowable droop if there's no integral term, and then defines the integral term such that a max'd out integrator can exactly compensate for that droop. The INTEGRAL_SPEED constants determine how quickly the integrators spool up. (This seems to me to be a reasonable way to make sure P and I gains always balance properly regardless of how I set my constants, but I'm open to other suggestions.)


current_setpoint = MAX_CURRENT_SETPOINT * voltage_error/VOLTAGE_DROOP

voltage_integral += voltage_error/VOLTAGE_INTEGRAL_SPEED
//insert bounds check here
current_setpoint += VOLTAGE_DROOP * voltage_integral/MAX_VOLTAGE_INTEGRAL


current_error = current_setpoint - current_feedback
pwm_on_time = MAX_ON_TIME * current_error/CURRENT_DROOP

current_integral += current_error/CURRENT_INTEGRAL_SPEED
//insert bounds check here
pwm_on_time += CURRENT_DROOP * current_integral/MAX_CURRENT_INTEGRAL

So I have a boost converter with two capacitors, a choke, a variable load (which could be a step function), feedback with single-pole RC filters, an A/D converter, single-pole IIR digital filters, and two PI loops feeding each other. How does one analyze such a thing from a control theory perspective (poles, zeroes, transfer functions, etc.), particularly to select my control loop parameters properly?

  • \$\begingroup\$ I started to answer this question and realized that you are asking about how an open-loop boost regulator can be analysed so that you can apply some algorithm (which I believe you want analysed) and then I noticed the output range of voltages and currents and realized you are using the wrong sort of topology (not real-world) for this power so I stopped right there are wrote this comment instead. OK you might choose to revamp the question to focus on a more realistic scenario but still analysing an algortithm and a circuit is a little much for one question. \$\endgroup\$
    – Andy aka
    Commented Sep 4, 2013 at 16:55
  • \$\begingroup\$ @Andyaka It's not open-loop, I'm measuring the voltage and current I'm regulating. (Unless I'm misunderstanding your comment.) Also, my company has been building converters using this topology for a couple decades now, in this power range and well beyond it. We use IGBTs and not FETs, if that's what you're referring to; that's probably completely unrealistic. The FET symbol was just at hand and the IGBT symbol wasn't, and the difference didn't seem to affect the question. \$\endgroup\$ Commented Sep 4, 2013 at 17:07
  • \$\begingroup\$ For example, we've done 400V->600V 85A 4kHz, 400V->750V 1000A 2 kHz, and 150V->600V 18A 12 kHz. All are in the field and quite stable. So the topology is practical, except the FET/IGBT disparity, which I've corrected. \$\endgroup\$ Commented Sep 4, 2013 at 17:15
  • \$\begingroup\$ @StephenCollings May I ask how/where you specify your high-current inductors from? I understand it is slightly off-topic but I am looking for some references to learn from. \$\endgroup\$
    – HL-SDK
    Commented Sep 4, 2013 at 17:49
  • 1
    \$\begingroup\$ @HL-SDK in this frequency and power range we've had good luck with a few companies, including American Magnetics, Precision Magnetics, and Electronic Craftsmen. Cores tend to be between three and five inch square laminations. It's all custom, though, with proprietary designs. Most magnetics companies won't sell you another customer's product, in my experience. \$\endgroup\$ Commented Sep 4, 2013 at 18:56

3 Answers 3


Most of what is covered in basic controls study is linear time invariant systems. If you're lucky, you may also get discrete sampling and z transforms at the end. Of course, switching mode power supplies (SMPS) are systems that evolve through topological states discontinuously in time, and also mostly have nonlinear responses. As a result, SMPS are not well analyzed by standard or basic linear control theory.

Somehow, in order to continue to use all the familiar and well understood tools of control theory; like Bode plots, Nichols charts, etc., something must be done about the time invariance and nonlinearity. Take a look at how the SMPS state evolves with time. Here are the topological states for the Boost SMPS:

enter image description here

Each of these separate topologies is easy to analyze on it own as a time invariant system. But, each of the analyses taken separately isn't of much use. What to do?

While the topological states switch abruptly from one to the next, there are quantities or variables that are continuous across the switching boundary. These are usually called state variables. The most common examples are inductor current and capacitor voltage. Why not write equations based on the state variables for each topological state and take some kind an average of the state equations by combining as a weighted sum to get a time invariant model? This is not exactly a new idea.

State-Space Averaging -- State averaging from the outside in

In the 70's Middlebrook 1 at Caltech published the seminal paper about state-space averaging for SMPS. The paper details combining and averaging topological states to model low frequency response. Middlebrook's model averaged states over time, which for fixed frequency PWM control comes down to duty cycle (DC) weighting. Let's start with the basics, using the boost circuit operating in continuous conduction mode (CCM) as an example. On state duty cycle of the active switch relates the output voltage to input voltage as:

\$V_o\$ = \$\frac{V_{\text{in}}}{1-\text{DC}}\$

The equations for each of the two states and their averaged combinations are:

\$\begin {array} {cccc} &\text {Active State} &\text {Passive State} &\text {Ave State} \\ \text {State Var $\backslash $ Weight} &\text {DC} &\text {(1 - DC)} & \\ \frac {\text {di} _L} {\text {dt}} &\frac {V_ {\text {in}}} {L} &\frac {-V_C + V_ {\text {in}}} {L} &\frac {(-1 + \text {DC}) V_C + V_ {\text {in}}} {L} \\ \frac {\text {dV} _C} {\text {dt}} & - \frac {V_C} {C R} &\frac {i_L} {C} - \frac {V_C} {C R} &\frac {(R - \text {DC} R) i_L - V_C} {C R} \end {array}\$

Ok, that takes care of averaging the states, resulting in a time invariant model. Now for a useful linearized (ac) model, a perturbation term needs to be added to the control parameter DC and each state variable. That will result in a steady state term summed with a twiddle term.

\$\text{DC}\rightarrow \text{DC}_o + d_{\text{ac}}\$
\$i_L\rightarrow I_{\text{Lo}} + i_L\$
\$V_c\rightarrow V_{\text{co}} + v_c\$
\$V_{\text{in}}\rightarrow V_{\text{ino}} + v_{\text{in}}\$

Substitute these into the averaged equations. Since this is a linear ac model, you just want the 1st order variable products, so discard any products of two steady state terms or two twiddle terms.

\$\frac{d v_c}{\text{dt}}\$ = \$\frac{\left(1-\text{DC}_o\right) i_L-I_{\text{Lo}} d_{\text{ac}}}{C} -\frac{v_c}{C R}\$
\$\frac{d i_L}{\text{dt}}\$ = \$\frac{d_{\text{ac}} V_{\text{co}}+v_c \left(\text{DC}_o-1\right)+v_{\text{in}}}{L}\$

This is just the usual linear variation about an operating point. Also, since we are looking for an AC solution, \$\frac{d}{\text{dt}}\$ can always be replaced by s (or \$\text{j$\omega $}\$). Solving to get output voltage \$v_c\$ as related to \$d_{\text{ac}}\$ yields:

\$\frac{v_c}{d_{\text{ac}}}\$ = \$\frac{-V_{\text{co}} \text{DC}_o+V_{\text{co}}-L I_{\text{Lo}} s}{C L s^2+\text{DC}_o^2-2 \text{DC}_o+\frac{L s}{R}+1}\$

From this transfer function it is possible to see the location of the right half plane zero \$f_{\text{rhpz}}\$ and the complex pole pair location \$f_{\text{cp}}\$ .

\$f_ {\text {rhpz}}\$ = \$\frac{V_{\text{co}} \left(1-\text{DC}_o\right){}^2}{2 \pi L i_o}\$

\$f_{\text{cp}}\$ = \$\frac{1-\text{DC}_o}{2 \pi \sqrt{L C}}\$

For the circuit values of L1=500uH, C2=500uF, Vin=400V, Vo=500V, and R1=25 Ohms; \$f_ {\text {rhpz}}\$ is 5093 Hz and \$f_{\text{cp}}\$ is 255 Hz.

enter image description here

The gain and phase plots show the complex poles and the right half plane zero. Q of the poles is so high because ESR of L1 and C2 have not been included. To add extra model elements now would require going back and adding them into the starting differential equations.

I could stop here. If I did, you would have the knowledge of a cutting edge technologist ... from 1973. The Vietnam war would be over, and you could stop sweating that ridiculous selective service lotto number you'd got. On the other hand, shiny nylon shirts and disco would be hot. Better keep moving.

PWM Averaged Switch Model -- State averaging from the inside out

In the late 80's, Vorperian (a former student of Middlebrook) had a huge insight regarding state averaging. He realized that what really changes over a cycle is the switch condition. It turns out that modeling converter dynamics is much more flexible and simple when averaging the switch than when averaging circuit states.

Following Vorperian 2, we work up an averaged PWM switch model for the CCM boost. Starting from the point of view of a canonical switch pair (active and passive switch together) with input-output nodes for active switch (a), passive switch (p), and the common of the two (c). If you refer back to the figure of the 3 states of the boost regulator in the state space model, you will see a box is drawn around the switches that show that connection of the PWM average model.

You will want equations that relate the input and output voltages \$V_{\text{ap}}\$ and \$V_{\text{cp}}\$, and input and output currents \$i_a\$ and \$i_c\$ in an average sort of way. By inspection, and knowledge of what these simple voltages and currents look like, get:

\$V_{\text{ap}}\$ = \$\frac{V_{\text{cp}}}{\text{DC}}\$


\$i_a\$ = DC \$i_c\$

Then add the perturbation

\$\text{DC}\rightarrow \text{DC}_o + d_{\text{ac}}\$
\$i_a\rightarrow I_a + i_a\$
\$i_c\rightarrow I_c + i_c\$
\$V_{\text{ap}}\rightarrow V_{\text{ap}} + v_{\text{ap}}\$
\$V_{\text{cp}}\rightarrow V_{\text{cp}} + v_{\text{cp}}\$


\$v_{\text{ap}}\$ = \$\frac{v_{\text{cp}}}{\text{DC}_o}\$ - \$\frac{d_{\text{ac}} V_{\text{ap}}}{\text{DC}_o}\$


\$ i_a\$ = \$i_c \text{DC}_o + i_c d_{\text{ac}}\$

These equations can be rolled into an equivalent circuit suitable for use with SPICE. The terms with the steady state DC combined with small signal ac voltages or currents are functionally equivalent to an ideal transformer. The other terms can be modeled as scaled dependent sources. Here is an AC model of the boost regulator with an averaged PWM switch:

enter image description here

The Bode plots from the PWM switch model look very similar to the state space model, but not quite the same. The difference is due to addition of ESR for L1 (0.01Ohms) and C2 (0.13Ohms). That means loss of about 10W in L1 and output ripple of about 5Vpp. So, the Q of the complex pole pair is lower, and the rhpz is hard to see since it's phase response is covered by the ESR zero of C2.

enter image description here

The PWM switch model is very powerful intuitive concept:

  • The PWM switch, as derived by Vorperian, is canonical. That means the model shown here can be used with boost, buck or boost-buck topologies as long as they are CCM. You just have to change connections to match p with passive switch, a with active switch, and c with the connection between the two. If you want DCM you will need a different model ... and it's more complicated than the CCM model ... you can't have everything.

  • If you need to add something to the circuit like ESR, there is no need to go back to the input equations and start over.

  • It is easy to use with SPICE.

  • PWM switch models are widely covered. There is an accessible write up in "Understanding Boost Power Stages in Switchmode Power Supplies" by Everett Rogers (SLVA061).

Limitations? The models here don't comprehend any of the resonance or switching frequency effects (like Nyquist sampling), so stay at least a decade lower than \$f_s\$ with loop bandwidths. A fundamental assumption is that time constants like L1/R1 and R1C2 are much larger than the switching period \$T_s\$ (if either are less than about 10x \$T_s\$, it's time to start worrying about accuracy).

Now you are into the 1990's. Cell phones weigh less than a pound, there's a PC on every desk, SPICE is so ubiquitous that it is a verb, and computer viruses are a thing. The future starts here.

1 G. W. Wester and R. D. Middlebrook, "Low - Frequency Characterization of Switched Dc - Dc Converters," IEEE Transactions an Aerospace and Electronic Systems, Vol. AES - 9, pp. 376 - 385, May 1973.

2 V. Vorperian, "Simplified Analysis of PWM Converters Using the Model of the PWM Switch : Parts I and II," IEEE Transactions on Aerospace and Electronic Systems, Vol. AES - 26, pp. 490 - 505, May 1990.

  • \$\begingroup\$ Very nice answer! You slightly touch upon DCM being more complex. Do you have any literature about this? I would like to model a boost converter in DCM with variable switching frequency as the control parameter (and not the duty cycle as control parameter) for the current. \$\endgroup\$
    – Simon R
    Commented May 12, 2020 at 7:15

A gross simplification of control theory:

Basically, you need to start with a model. It's fairly easy to model the physical converter you're analyzing. There are mathematical models out there that replicate the electrical behaviour of the boost converter with a high degree of accuracy.

What gets tricky is modelling your control system. One tool that comes to mind is PSIM, which allows you to model many digital parameters as discrete blocks (quantization, A/D conversion, IIR filter, delays, etc.) - this gives you an easy sandbox to play around with without risking hardware.

The next step is to analyze the 'plant' from control to output, to understand what exactly you're trying to compensate. This is usually done open-loop, by setting a DC operating point (no feedback), injecting perturbations over a range of frequencies and measuring the responses.

Once you get your open-loop response, you can design a compensator which will ensure sufficient operating margins for stability (sufficient phase margin at the gain zero crossing, sufficient attenuation at 180 degrees of phase). Then, you implement your controller in block (or in pseudocode) form in the simulation, and test the closed-loop response.


Using a simulation tool would be useful but the basics of the circuit is that you are transferring energy 4,000 times a second and the power to the load is that energy transfer multiplied by the number of times per second that energy is transferred.

So if the load power is 4kW, you need to transfer 1 joule of energy in each cycle. That then leads on to how much current you need to put into your 500uH inductor. Energy stored is \$\frac{L I^2}{2}\$ and this equals 1 therefore I = \$\sqrt{\frac{2}{500 \times 10^{-6}}}\$ = 63A.

When the IGBT goes open circuit, that energy is released via diode S1 into the load circuit.

Because for an inductor \$ E = L \frac{di}{dt}\$ we can work out how long the IGBT needs to be "on" for - this is dt and of course we know di = 63A. We also know E (400V) and L.

This works out as dt = \$\frac{500 \times 10^{-6}\times 63}{400}=79\mu s\$

If the load resistor was smaller you need to transfer more power and the peak current into the inductor would be higher and this of course means a longer period that the IGBT stays on for.

dt is your input to the circuit and it can be as high as nearly 250\$\mu s\$ (4kHz) but for the example above (half power load) 79\$\mu s\$ would appear to do the job. The only other thing to calculate is how much ripple voltage you will see and to do this you'll have to apply Q=CV to the capacitor and in particular \$\frac{dq}{dt} = C \frac{dv}{dt}\$.

\$\frac{dq}{dt} = \$ current and \$\frac{dv}{dt} = \$ voltage ripple but I'm losing the will to live now so maybe you can work this out.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.