🎯 Objective

By the end of this lab, students will be able to:

This experiment focuses on implementing current-mode control in a buck converter and exploring its unique dynamic behavior. By introducing an inner current loop, students will observe improved transient response as well as instability phenomena such as subharmonic oscillation, and learn how ramp (slope) compensation stabilizes the system.

  • Implement and test a current-mode controlled buck converter with an inner inductor current loop.
  • Vary the load resistance to see its impact on the output voltage transient.
  • Observe the onset of subharmonic oscillation at higher duty ratios, and identify the conditions under which the system becomes unstable.
  • Apply ramp (slope) compensation and evaluate its effect on stabilizing the converter and restoring periodic operation.
  • Analyze how current-mode control shapes the converter dynamics, including transient response and steady-state behavior.

📚 Prerequisite

  • Experiment A1, A2, A3, C1, and C2.
  • Basic understanding of the Nyquist plot and the Nyquist Stability Criterion
  • Concept of gain margin and phase margin

🧠 Theory

In the last experiment, we have seen that we can regulate the output voltage of buck converter in a decent way. While the controller can be tuned based on the performance criteria, a trade off exist of increasing complexity to improving performance.

A couple of things to observe....(1) the converter inherently has a discrete time feature like a sampled system...ie. no matter what the controller does, the change to the converter happens once per switching interval. In our previous example, we kind of put this feature under the rug and ensure validity of the controller, by making the bandwidth close to 1/10 of the switching frequency where our average model has better fidelity. (2) though the inductor current is a state variable in this system, we didnt take advantage of controlling it yet. As you can see in the figure below, with a step change in reference for a voltage mode control, the inductor current behaved as a byproduct of the control action. We designed our controller looking at the plant transfer function from duty ratio to output voltage.

What if we could take advantage of inductor current measurment, can we inmprove the control performance which can be measured using the rise or settling time without increasing the overshoot? This is where current mode control comes in. In this experiment, we would focus on controlling the inductor current. It may not be apparent yet how does this help in improving the output voltage control performance, we will have to wait for the next lab where we will make the control architecture such that we will have two control loops--one to control the output voltage (outer loop) and one to control the inductor current (inner loop). The outer loop will set the reference for the inner loop. But hold your horses! let us first understand current mode control, where our objective is to control the inductor current.

Let us start from the basics. Let us focus this time on how the inductor current behaves if we give a step change in duty ratio, as shown in Fig. 2. The duty ratio is kept constant.

If we mark the time axis with instances t1, t2, t3...marking when the top switch transition from on to off and off to on. We will call these instance as k=1, 2, 3, 4, .... As we are operating over a constant switching frequency, t3 - t1 = t5-t3 = tn+2-tn = Tsw. Obviously, we are going through some transients in the intitial stage as output voltage settles to some steady state from initial zero voltage. Also the inductor current values at each of these instances keeps changing until steady state is reached at which point the peak and valley of the inductor current remains constant (our definition of periodic steady state). OR in other words, i(1) is not eual i(3) is not equal to i(5)....however, iL(50) = iL(52), iL(51) = iL(53) and so on...Given the discrete nature of the evolution, we can describe the evolution of the inductor current using difference equations rather than a differential equation.

What if instead of turning the switch off after a constant on time, we create a control law, such that the switch turns on at a finite interval determined by a clock with fixed frequency but turns off when the inductor current reaches a reference peak (a.k.a peak current mode control), as shown below.

A few interesting observation appears if we compare Fig. 1 and Fig. 2.

FeatureStep Duty (Fig 1)Peak Current Mode (Fig 2)
ControlOpen-loopClosed-loop (inner current)
System order (Output voltage behavior)2nd order (L + C)~1st order behavior
Inductor currentUncontrolled, large swingsRegulated, bounded
Output voltageOvershoot + ringingSmooth, monotonic

While the response is encouraging, it begs the following question is this peak current mode control stable under all condition? In order to investigate stability, let us find a discrete-time map of the inductor current at each time steps.

In each switching period:

  • clock turns the switch ON
  • inductor current rises with slope
  • when sensed current reaches the control threshold, switch turns OFF
  • then current falls with slope

For a buck converter,

Let:

  • = switching period
  • = duty ratio
  • = inductor current at the beginning of cycle , just after clock turns the switch ON
  • = current threshold at which switch turns OFF

During ON interval:

Turn-off occurs when current hits the threshold:

So ON time in cycle is

After turn-off, current falls for the remainder of the cycle:

with slope . Therefore the next cycle starts with

Substitute :

Simplify:

This is a first-order discrete-time map:

This already tells us something deep:

  • the coefficient multiplying is negative
  • so perturbations alternate sign from cycle to cycle

Now let us examine the perturbation dynamics.

Let be the steady-state beginning current.

Define the perturbation:

Subtract the steady-state equation from the full map. The constant term cancels, giving

This is the central result.

The perturbation evolves according to the multiplier

For discrete-time stability, we need

Therefore stability requires

equivalently in standard discrete-time form,iL(z)iref(z)=1+m2m11+m2m1z1.\boxed{ \frac{i_L(z)}{i_{ref}(z)} = \frac{1 + \frac{m_2}{m_1}}{1 + \frac{m_2}{m_1} z^{-1}}. }iref​(z)iL​(z)​=1+m1​m2​​z−11+m1​m2​​​.​ Here Iref is Ipeak what we are setting.

This result shows that the inner current loop behaves as a first-order discrete-time system with a pole atz=m2m1.z = -\frac{m_2}{m_1}.z=−m1​m2​​.

The speed at which the inductor current converges to its reference is governed by the ratio of the falling and rising slopes of the current waveform. When the down-slope m2m_2m2​ is much smaller than the up-slope m1m_1m1​, the ratio m2/m1m_2/m_1m2​/m1​ is small, and any perturbation in the current decays rapidly from one switching cycle to the next. In this case, the system corrects errors efficiently, leading to fast convergence toward the desired operating point.

When m2m1<1\left|\frac{m_2}{m_1}\right| < 1​m1​m2​​​<1 (i.e., D<0.5D < 0.5D<0.5), the pole lies inside the unit circle and the current tracks its reference. When m2m1>1\left|\frac{m_2}{m_1}\right| > 1​m1​m2​​​>1, the pole lies outside the unit circle, leading to subharmonic oscillation and loss of current tracking.

For a buck converter this directly translates to a duty ratio less than 0.5. See below three figures...one with stable..one at the onset of subharmonic osicllation (not the perturbation persist except it changes sign) ...and the last one with subharmonic oscillations....use the code on the right side to play with the

The impact of this subharmonic oscialltions include increase ripple at the output, loss of predictable behaviour, increased stress, EMI, escalate to chaos, as well as

Next, question can we operate for situations that require more than 50% duty ratio...for example during transients...or during steady state.

During one cycle:

  • ON slope:

m1=VinVoLm_1 = \frac{V_{in}-V_o}{L}m1​=LVin​−Vo​​

  • OFF slope:

m2=VoLm_2 = \frac{V_o}{L}m2​=LVo​​

Let:

  • ini_nin​: valley current at start of cycle
  • in+1i_{n+1}in+1​: next valley current

In peak current-mode control, the switching instant is determined by comparing the inductor current to a reference signal. During the ON interval, the inductor current increases linearly with slope m1=(VinVo)/Lm_1 = (V_{in} - V_o)/Lm1​=(Vin​−Vo​)/L, while during the OFF interval it decreases with slope m2=Vo/Lm_2 = V_o/Lm2​=Vo​/L. In the absence of any additional compensation, the switch turns off when the inductor current reaches a fixed reference value. This creates a cycle-by-cycle discrete-time system in which the valley current at the beginning of one cycle determines the valley current in the next cycle.

When the duty ratio exceeds 0.5, the down-slope m2m_2m2​ becomes larger than the up-slope m1m_1m1​. Under these conditions, small perturbations in the inductor current do not decay but instead grow from one cycle to the next, often alternating in sign. This results in subharmonic oscillation, where the waveform repeats every two switching cycles rather than every cycle. The converter loses its periodic steady-state behavior, leading to degraded regulation, increased ripple, and potential stress on components.

To suppress this instability, a compensation ramp is added to the current feedback signal (or equivalently to the reference). The switching condition is modified to compare iL(t)+mati_L(t) + m_a tiL​(t)+ma​t with a constant reference, where mam_ama​ is the slope of the artificial ramp. This effectively increases the slope seen by the comparator during the ON interval from m1m_1m1​ to m1+mam_1 + m_am1​+ma​. As a result, the sensitivity of the switching instant to perturbations in current is reduced.

A small-signal analysis of the cycle-to-cycle dynamics shows that the evolution of perturbations can be described by a linear difference equation of the formΔin+1=λΔin,\Delta i_{n+1} = \lambda \Delta i_n,Δin+1​=λΔin​,

where the gain λ\lambdaλ depends on the inductor slopes and the compensation ramp. With ramp compensation, this gain becomesλ=mam2m1+ma.\lambda = \frac{m_a - m_2}{m_1 + m_a}.λ=m1​+ma​ma​−m2​​.

For the system to be stable, the magnitude of λ\lambdaλ must be less than unity. This leads to the well-known design condition that the compensation slope must satisfymam22.m_a \ge \frac{m_2}{2}.ma​≥2m2​​.

Physically, this condition ensures that the artificial ramp partially counteracts the steep down-slope of the inductor current, preventing perturbations from growing. A commonly used and near-optimal choice is ma=m2/2m_a = m_2/2ma​=m2​/2, which provides adequate stability while maintaining fast current-loop dynamics. If the ramp is too small, subharmonic oscillation persists; if it is too large, the system becomes over-damped and begins to resemble voltage-mode control, reducing the advantages of current-mode operation.

Thus, ramp compensation plays a critical role in ensuring stable and predictable operation of current-mode controlled converters, particularly at higher duty ratios where subharmonic oscillation would otherwise occur.

Comparator condition:iL(t)+mat=Irefi_L(t) + m_a t = I_{ref}iL​(t)+ma​t=Iref​

During ON:iL(t)=in+m1ti_L(t) = i_n + m_1 tiL​(t)=in​+m1​t

So:in+m1ton+maton=Irefi_n + m_1 t_{on} + m_a t_{on} = I_{ref}in​+m1​ton​+ma​ton​=Iref​ ton=Irefinm1+mat_{on} = \frac{I_{ref} - i_n}{m_1 + m_a}ton​=m1​+ma​Iref​−in​​

At turn-off:ipk=in+m1toni_{pk} = i_n + m_1 t_{on}ipk​=in​+m1​ton​


During OFF:in+1=ipkm2(Tston)i_{n+1} = i_{pk} - m_2 (T_s - t_{on})in+1​=ipk​−m2​(Ts​−ton​)

Substitute:in+1=in+m1tonm2(Tston)i_{n+1} = i_n + m_1 t_{on} - m_2 (T_s - t_{on})in+1​=in​+m1​ton​−m2​(Ts​−ton​) in+1=in+(m1+m2)tonm2Tsi_{n+1} = i_n + (m_1 + m_2)t_{on} - m_2 T_sin+1​=in​+(m1​+m2​)ton​−m2​Ts​


in+1=in+(m1+m2)Irefinm1+mam2Tsi_{n+1} = i_n + (m_1 + m_2)\frac{I_{ref} - i_n}{m_1 + m_a} - m_2 T_sin+1​=in​+(m1​+m2​)m1​+ma​Iref​−in​​−m2​Ts​

Let:in=i+i^ni_n = i^* + \hat{i}_nin​=i∗+i^n​

Then:i^n+1=λi^n\hat{i}_{n+1} = \lambda \hat{i}_ni^n+1​=λi^n​

After differentiation:λ=1m1+m2m1+ma\lambda = 1 - \frac{m_1 + m_2}{m_1 + m_a}λ=1−m1​+ma​m1​+m2​​

Simplify:λ=mam2m1+ma\lambda = \frac{m_a - m_2}{m_1 + m_a}λ=m1​+ma​ma​−m2​​

λ<1|\lambda| < 1∣λ∣<1

Focus on worst case (negative λ → oscillation):1<mam2m1+ma-1 < \frac{m_a - m_2}{m_1 + m_a}−1<m1​+ma​ma​−m2​​

Solve:ma>m2m12m_a > \frac{m_2 - m_1}{2}ma​>2m2​−m1​​

For buck converter

Since:m2m1=D1D\frac{m_2}{m_1} = \frac{D}{1-D}m1​m2​​=1−DD​

Worst case at high duty:mam22\boxed{ m_a \ge \frac{m_2}{2} }ma​≥2m2​​​


Without ramp

λ=m2m1\lambda = -\frac{m_2}{m_1}λ=−m1​m2​​

→ unstable if D>0.5D > 0.5


With ramp:

λ=mam2m1+ma\lambda = \frac{m_a - m_2}{m_1 + m_a}λ=m1​+ma​ma​−m2​​

→ ramp reduces magnitude of λ


ma=m22m_a = \frac{m_2}{2}ma​=2m2​​


Also:ma=m22\boxed{ m_a = \frac{m_2}{2} }ma​=2m2​​​

Why?

  • fast decay of perturbations
  • avoids over-damping
  • preserves current-mode benefits

ma<m22m_a < \frac{m_2}{2}ma​<2m2​​

→ subharmonic oscillation


mam2m_a \gg m_2ma​≫m2​

→ behaves like voltage-mode:

  • slower response
  • reduced benefit of current loop

Outer loop model:

Outer Voltage Loop Modeling in Current-Mode Control

In a buck converter operating under peak current-mode control, the inductor current is regulated on a cycle-by-cycle basis by an inner control loop. When this inner loop is sufficiently fast and stable (ensured by proper ramp compensation), the inductor current can be treated as a controlled input to the output stage. This allows the outer voltage loop to be modeled independently of the inductor dynamics.

The output stage of the converter consists of the capacitor and load resistance. Applying Kirchhoff’s current law at the output node givesCdVodt=iLVoR.C \frac{dV_o}{dt} = i_L - \frac{V_o}{R}.CdtdVo​​=iL​−RVo​​.

To analyze the dynamics, we linearize this equation around a steady-state operating point. Let Vo=Vo+v^oV_o = V_o^* + \hat{v}_oVo​=Vo∗​+v^o​ and iL=IL+i^Li_L = I_L^* + \hat{i}_LiL​=IL∗​+i^L​, where the hat variables represent small perturbations. Substituting and neglecting higher-order terms yieldsCdv^odt=i^Lv^oR.C \frac{d\hat{v}_o}{dt} = \hat{i}_L - \frac{\hat{v}_o}{R}.Cdtdv^o​​=i^L​−Rv^o​​.

Taking the Laplace transform,CsV^o(s)=I^L(s)V^o(s)R.C s \hat{V}_o(s) = \hat{I}_L(s) - \frac{\hat{V}_o(s)}{R}.CsV^o​(s)=I^L​(s)−RV^o​(s)​.

Rearranging,V^o(s)(Cs+1R)=I^L(s),\hat{V}_o(s)\left(Cs + \frac{1}{R}\right) = \hat{I}_L(s),V^o​(s)(Cs+R1​)=I^L​(s),

which leads to the transfer function from inductor current to output voltage:V^o(s)I^L(s)=1Cs+1R.\frac{\hat{V}_o(s)}{\hat{I}_L(s)} = \frac{1}{Cs + \frac{1}{R}}.I^L​(s)V^o​(s)​=Cs+R1​1​.

Thus, the output stage behaves as a first-order system with a single pole at ωp=1RC\omega_p = \frac{1}{RC}ωp​=RC1​.

We saw that in figure 2.....

When a step change is applied to the current reference in a buck converter, the response of the inductor current depends strongly on the output voltage. In the limiting case where the output voltage is zero, the inductor current does not decay during the OFF interval, since the down-slope m2=Vo/Lm_2 = V_o/Lm2​=Vo​/L is zero. As a result, the current reaches the reference within a single switching cycle and remains there, exhibiting ideal one-cycle tracking with no interaction from the output stage. However, as soon as the output voltage becomes nonzero, the situation changes fundamentally. The inductor current now decays during the OFF interval, and this decay is directly proportional to VoV_oVo​. Consequently, the next-cycle valley current depends not only on the reference but also on the output voltage. This introduces a coupling between the inner current loop and the outer voltage dynamics: the current influences the output voltage through the capacitor and load, while the output voltage simultaneously affects the current loop through the inductor slopes. Thus, even though current-mode control simplifies the system by regulating the peak current, the dynamics of the inner loop are inherently linked to the output voltage, and complete decoupling is only an approximation valid when the output voltage varies slowly or remains small.

Practical Implementation:

Case Study: Ramp Compensation in Peak Current-Mode Control

Consider a buck converter with:Vin=10 V,L=30μH,C=30μF,fs=50 kHzV_{in}=10\text{ V}, \quad L=30\mu H, \quad C=30\mu F, \quad f_s=50\text{ kHz}Vin​=10 V,L=30μH,C=30μF,fs​=50 kHz

The current sensor gain is:Ks=660 mV/A=0.66 V/AK_s = 660\text{ mV/A}=0.66\text{ V/A}Ks​=660 mV/A=0.66 V/A

The output voltage may vary from 0 to 10 V. The load resistance can vary, but the ramp-compensation requirement is mainly determined by the inductor current slopes, not directly by RRR.


1. Current slopes

During the ON interval, the inductor current rises with slopem1=VinVoLm_1=\frac{V_{in}-V_o}{L}m1​=LVin​−Vo​​

During the OFF interval, it falls with slopem2=VoLm_2=\frac{V_o}{L}m2​=LVo​​

As VoV_oVo​ increases, m1m_1m1​ decreases and m2m_2m2​ increases. This is why high-duty-ratio operation is more prone to subharmonic oscillation.


2. Stability without ramp compensation

Without ramp compensation, the cycle-to-cycle perturbation evolves asΔin+1=m2m1Δin\Delta i_{n+1}=-\frac{m_2}{m_1}\Delta i_nΔin+1​=−m1​m2​​Δin​

For stability,m2m1<1\left|\frac{m_2}{m_1}\right|<1​m1​m2​​​<1

For a buck converter,m2m1=VoVinVo\frac{m_2}{m_1}=\frac{V_o}{V_{in}-V_o}m1​m2​​=Vin​−Vo​Vo​​

So stability without ramp requiresVo<Vin2V_o < \frac{V_{in}}{2}Vo​<2Vin​​

For your 10 V input:Vo<5 VV_o < 5\text{ V}Vo​<5 V

Thus, without ramp compensation, peak current-mode control is naturally stable below 5 V output but becomes prone to subharmonic oscillation above 5 V.


3. Required ramp compensation

Ramp compensation modifies the switching condition fromiL=irefi_L=i_{ref}iL​=iref​

toiL+mat=irefi_L+m_a t=i_{ref}iL​+ma​t=iref​

where mam_ama​ is the artificial ramp slope in A/s.

A common design choice isma=m22m_a=\frac{m_2}{2}ma​=2m2​​

orma=Vo2Lm_a=\frac{V_o}{2L}ma​=2LVo​​

This is the “half down-slope” rule.


4. Convert ramp slope into sensor voltage

Your comparator sees the current-sensor voltage, not current directly:vsense=KsiLv_{sense}=K_s i_Lvsense​=Ks​iL​

So the required compensation ramp slope in volts per second isma,V=Ksmam_{a,V}=K_s m_ama,V​=Ks​ma​

Substituting:ma,V=KsVo2Lm_{a,V}=K_s\frac{V_o}{2L}ma,V​=Ks​2LVo​​

The ramp amplitude over one switching period isVramp=ma,VTsV_{ramp}=m_{a,V}T_sVramp​=ma,V​Ts​

whereTs=150000=20μsT_s=\frac{1}{50\,000}=20\mu sTs​=500001​=20μs

Therefore,Vramp=KsVo2LTs\boxed{ V_{ramp}=K_s\frac{V_o}{2L}T_s }Vramp​=Ks​2LVo​​Ts​​

Substitute Ks=0.66K_s=0.66Ks​=0.66, L=30μHL=30\mu HL=30μH, and Ts=20μsT_s=20\mu sTs​=20μs:Vramp=0.66Vo2(30μH)20μsV_{ramp}=0.66\cdot\frac{V_o}{2(30\mu H)}\cdot 20\mu sVramp​=0.66⋅2(30μH)Vo​​⋅20μs Vramp0.22Vo\boxed{ V_{ramp}\approx 0.22V_o }Vramp​≈0.22Vo​​

So the required ramp amplitude is about 22% of the output voltage.


5. Example values

Output Voltage VoV_oVo​Duty Ratio DDDStability Without RampRecommended Ramp VrampV_{ramp}Vramp​
3 V0.3Stable0.66 V
5 V0.5Boundary1.10 V
7 V0.7Unstable without ramp1.54 V
9 V0.9Strongly unstable without ramp1.98 V
10 V1.0Worst case ideal limit2.20 V

Thus, if the kit may operate up to nearly 10 V output, a practical ramp-compensation range of about 0–2.2 V peak-to-peak is appropriate.


6. Why adding ramp can reduce output voltage

Adding ramp compensation changes the turn-off condition toiL+mat=irefi_L+m_a t=i_{ref}iL​+ma​t=iref​

This means the comparator trips before the inductor current itself reaches irefi_{ref}iref​. Therefore, for the same fixed current reference, the switch turns off earlier, the peak current decreases, the average inductor current decreases, and the output voltage drops.

During ON time,iL(t)=ivalley+m1ti_L(t)=i_{valley}+m_1tiL​(t)=ivalley​+m1​t

The turn-off condition isivalley+m1ton+maton=irefi_{valley}+m_1t_{on}+m_at_{on}=i_{ref}ivalley​+m1​ton​+ma​ton​=iref​

soton=irefivalleym1+mat_{on}=\frac{i_{ref}-i_{valley}}{m_1+m_a}ton​=m1​+ma​iref​−ivalley​​

Compared to no ramp,ton=irefivalleym1t_{on}=\frac{i_{ref}-i_{valley}}{m_1}ton​=m1​iref​−ivalley​​

the ON time is reduced by the added ramp.

A useful first-order estimate of the current reduction isiavgirefm1m1+ma\boxed{ \frac{i_{avg}}{i_{ref}}\approx \frac{m_1}{m_1+m_a} }iref​iavg​​≈m1​+ma​m1​​​

Therefore, for fixed irefi_{ref}iref​,Vo,with rampVo,without rampm1m1+ma\boxed{ \frac{V_{o,\text{with ramp}}}{V_{o,\text{without ramp}}} \approx \frac{m_1}{m_1+m_a} }Vo,without ramp​Vo,with ramp​​≈m1​+ma​m1​​​

This predicts the open-loop voltage drop caused by ramp compensation.


7. Example: Vo=7 VV_o=7\text{ V}Vo​=7 V

For Vin=10 VV_{in}=10\text{ V}Vin​=10 V, Vo=7 VV_o=7\text{ V}Vo​=7 V, and L=30μHL=30\mu HL=30μH,m1=10730μH=1.0×105 A/sm_1=\frac{10-7}{30\mu H}=1.0\times10^5\text{ A/s}m1​=30μH10−7​=1.0×105 A/s m2=730μH=2.33×105 A/sm_2=\frac{7}{30\mu H}=2.33\times10^5\text{ A/s}m2​=30μH7​=2.33×105 A/s

Recommended ramp:ma=m22=1.17×105 A/sm_a=\frac{m_2}{2}=1.17\times10^5\text{ A/s}ma​=2m2​​=1.17×105 A/s

The approximate current gain becomesiavgiref1.0×1051.0×105+1.17×1050.46\frac{i_{avg}}{i_{ref}} \approx \frac{1.0\times10^5}{1.0\times10^5+1.17\times10^5} \approx 0.46iref​iavg​​≈1.0×105+1.17×1051.0×105​≈0.46

So if irefi_{ref}iref​ is kept fixed, adding this ramp may reduce the average current to roughly 46% of its previous value. The output voltage will drop accordingly unless an outer voltage loop increases irefi_{ref}iref​.

Ramp compensation has two effects:

First, it stabilizes the current loop at high duty ratios by preventing cycle-to-cycle perturbations from growing.

Second, it reduces the effective current-loop gain, so for a fixed current reference the converter delivers less average current and the output voltage may drop.

In open-loop current-reference testing, this drop is expected and can be predicted. In closed-loop voltage regulation, the outer controller compensates by increasing irefi_{ref}iref​ until the desired output voltage is restored. Which we will do in the next lab.

🧰 Required Components

The components needed in this lab are:

  • Red Board
  • Blue Board
  • Oscilloscope
  • Signal Generator
  • Multimeter
  • Current probe (if interested in measuring inductor current)

🎥 Overview Video

This video gives you a quick glimpse of what you can expect from this lab.

🛡️ Safety

Watch out for potential safety issues.

  1. Confirm probe grounds are properly connected for each measurement.
  2. Don't power the blue board using both the USB-C cable and the power adapter.
  3. Always disconnect the power once you are done with the experiment.

⚠ Common Mistakes

  1. The gate of a MOSFET is directly connected to a microcontroller digital pin to perform switching actions without a gate driver.
  2. Incorrect grounding between comparator output, vref source, and carrier source. All of the signals are referenced relative to gnd of the blue board.
  3. Scope probe not set to dc-coupling.
  4. The reference of the scope channels are not properly set to zero at the start of the experiment. This will lead to incorrect reading of the signals.
  5. Forgetting to record Capacitances (C).

Arduino Code

Not applicable.

Current Mode Control -- Perturbation evolution

clear; clc; close all;

%% Buck converter parameters
Vin = 10;              % input voltage [V]
Vo  = 5;               % try 3 V or 7 V

L = 30e-6;             % inductor [H]
C = 30e-6;             % capacitor [F]

Rload = 1 / (1/10 + 1/10 + 1/51 + 1/10 + 1/10);
Iout  = Vo / Rload;

fs = 50e3;
Ts = 1/fs;

D = Vo/Vin;

%% Current slopes
m1 = (Vin - Vo)/L;
m2 = Vo/L;

Delta_i = m1 * D * Ts;

i_valley = Iout - Delta_i/2;
i_peak   = Iout + Delta_i/2;

%% Perturbation setup
di0 = 0.25 * Delta_i;
Ncycles = 10;

t_nom = [];
i_nom = [];

t_per = [];
i_per = [];

delta_i = zeros(1, Ncycles+1);
cycle_idx = 0:Ncycles;

set_pulse = ones(size(cycle_idx));

reset_times = [];
reset_vals  = [];

ival_per = i_valley + di0;
delta_i(1) = di0;

%% Build nominal and perturbed waveforms
for n = 0:Ncycles-1

    t0 = n*Ts;

    % Nominal cycle: fixed steady-state cycle
    ton_nom = D*Ts;

    t_nom = [t_nom, t0/Ts, (t0+ton_nom)/Ts, (t0+Ts)/Ts, NaN];
    i_nom = [i_nom, i_valley, i_peak, i_valley, NaN];

    % Perturbed cycle: event-based
    ton_per_raw = (i_peak - ival_per)/m1;

    if ton_per_raw <= 0
        ton_per = 0;
        i_next_per = ival_per - m2*Ts;
        mode_per = "immediate turn-off";

    elseif ton_per_raw >= Ts
        ton_per = Ts;
        i_next_per = ival_per + m1*Ts;
        mode_per = "stays ON";

    else
        ton_per = ton_per_raw;
        i_next_per = i_peak - m2*(Ts - ton_per);
        mode_per = "normal";
    end

    % Store perturbed waveform
    if ton_per == 0 || ton_per == Ts
        t_per = [t_per, t0/Ts, (t0+Ts)/Ts, NaN];
        i_per = [i_per, ival_per, i_next_per, NaN];
    else
        t_per = [t_per, t0/Ts, (t0+ton_per)/Ts, (t0+Ts)/Ts, NaN];
        i_per = [i_per, ival_per, i_peak, i_next_per, NaN];

        % Reset pulse at actual comparator trip time
        reset_times = [reset_times, n + ton_per/Ts];
        reset_vals  = [reset_vals, 1];
    end

    delta_i(n+2) = i_next_per - i_valley;

    fprintf('Cycle %d: perturbed = %s, delta_i = %.4f A\n', ...
        n, mode_per, delta_i(n+2));

    ival_per = i_next_per;
end

%% Stability factor without ramp compensation
lambda = -m2/m1;

fprintf('\nEquivalent load resistance = %.3f ohm\n', Rload);
fprintf('Output current = %.3f A\n', Iout);
fprintf('Duty ratio = %.3f\n', D);
fprintf('m1 = %.3e A/s\n', m1);
fprintf('m2 = %.3e A/s\n', m2);
fprintf('Inductor ripple = %.3f A\n', Delta_i);
fprintf('Small-signal perturbation factor lambda = %.3f\n', lambda);

%% Plot
figure('Color','w','Position',[100 100 1100 850]);

% ------------------------------------------------------------
% Subplot 1: Set pulse
% ------------------------------------------------------------
ax1 = subplot(4,1,1);
hold on; grid on; box on;

stem(cycle_idx, set_pulse, 'filled', ...
    'LineWidth', 2.5, ...
    'MarkerSize', 5, ...
    'Color', [0 0.55 0], ...
    'MarkerFaceColor', [0 0.55 0]);

ylabel('Set');
title('Clock Set Pulse');

ylim([0 1.25]);
set(gca, 'FontSize', 12, 'LineWidth', 1.1);

% ------------------------------------------------------------
% Subplot 2: switching-cycle waveform
% ------------------------------------------------------------
ax2 = subplot(4,1,2);
hold on; grid on; box on;

plot(t_nom, i_nom, 'k-', 'LineWidth', 2.2);
plot(t_per, i_per, 'r--', 'LineWidth', 2.2);

for n = 0:Ncycles
    xline(n, ':', 'LineWidth', 1.0);
end

yline(i_peak, '--', 'i_{pk}', ...
    'LineWidth', 1.2, ...
    'LabelHorizontalAlignment','left', ...
    'LabelVerticalAlignment','bottom');

plot([0 0], [i_valley i_valley+di0], 'b-', 'LineWidth', 2);
text(0.05, i_valley + di0/2, '\Delta i_0', ...
    'FontSize', 12, ...
    'FontWeight','bold', ...
    'VerticalAlignment','middle');

ylabel('Inductor current, i_L [A]');
legend('Nominal cycle', 'Perturbed cycle', 'Location','northeast');

ylim([min([i_nom i_per],[],'omitnan')-0.2*Delta_i, ...
      max([i_nom i_per],[],'omitnan')+0.4*Delta_i]);

set(gca, 'FontSize', 12, 'LineWidth', 1.1);

% ------------------------------------------------------------
% Subplot 3: Reset pulse
% ------------------------------------------------------------
ax3 = subplot(4,1,3);
hold on; grid on; box on;

stem(reset_times, reset_vals, 'filled', ...
    'LineWidth', 2.5, ...
    'MarkerSize', 5, ...
    'Color', [0.85 0 0], ...
    'MarkerFaceColor', [0.85 0 0]);

ylabel('Reset');
title('Comparator Reset Pulse');

ylim([0 1.25]);
set(gca, 'FontSize', 12, 'LineWidth', 1.1);

% ------------------------------------------------------------
% Subplot 4: perturbation impulse plot
% ------------------------------------------------------------
ax4 = subplot(4,1,4);
hold on; grid on; box on;

stem(cycle_idx, delta_i, 'filled', ...
    'LineWidth', 2.5, ...
    'MarkerSize', 5, ...
    'Color', [0.1 0.4 0.8], ...
    'MarkerFaceColor', [0.1 0.4 0.8]);

yline(0, 'k-', 'LineWidth', 1.0);

for k = 1:length(delta_i)
    if delta_i(k) >= 0
        vAlign = 'bottom';
    else
        vAlign = 'top';
    end

    text(cycle_idx(k), delta_i(k), sprintf('%.4f', delta_i(k)), ...
        'HorizontalAlignment','center', ...
        'VerticalAlignment',vAlign, ...
        'FontSize',10);
end

xlabel('Time normalized to switching period, t/T_s');
ylabel('\Delta i_n [A]');
title('Perturbation Evolution at Cycle Boundaries');

set(gca, 'FontSize', 12, 'LineWidth', 1.1);

%% Link x-axes
linkaxes([ax1 ax2 ax3 ax4], 'x');
xlim(ax1, [0 Ncycles]);

xticks(ax1, 0:Ncycles);
xticklabels(ax1, compose('n=%d', 0:Ncycles));

xticks(ax2, 0:Ncycles);
xticklabels(ax2, compose('n=%d', 0:Ncycles));

xticks(ax3, 0:Ncycles);
xticklabels(ax3, compose('n=%d', 0:Ncycles));

xticks(ax4, 0:Ncycles);

Current Mode Control - Perturbation evolution under ramp compensation

clear; clc; close all;

%% Buck converter parameters
Vin = 10;              % input voltage [V]
Vo  = 7;               % try 3 V or 7 V

L = 30e-6;             % inductor [H]
C = 30e-6;             % capacitor [F]

Rload = 1 / (1/10 + 1/10 + 1/51 + 1/10 + 1/10);
Iout  = Vo / Rload;

fs = 50e3;
Ts = 1/fs;

D = Vo/Vin;

%% Current slopes
m1 = (Vin - Vo)/L;     % ON-time inductor current slope [A/s]
m2 = Vo/L;             % OFF-time inductor current slope magnitude [A/s]

%% Ramp compensation
useRampComp = true;

ma = 0.5*m2;           % artificial ramp slope [A/s]
% ma = 0;              % uncomment to remove ramp compensation

if ~useRampComp
    ma = 0;
end

%% Steady-state current levels
Delta_i = m1 * D * Ts;

i_valley = Iout - Delta_i/2;
i_peak   = Iout + Delta_i/2;

% Comparator reference at beginning of cycle.
% Ramp is added to the sensed current/reference comparison as:
%
%   i_L(t) + m_a t = I_ref
%
% Therefore the fixed comparator threshold must be:
%
%   I_ref = i_peak + m_a D T_s
%
Iref_comp = i_peak + ma*D*Ts;

%% Perturbation setup
di0 = 0.25 * Delta_i;
Ncycles = 10;

t_nom = [];
i_nom = [];

t_per = [];
i_per = [];

t_ramp = [];
i_ref_ramp = [];

delta_i = zeros(1, Ncycles+1);
cycle_idx = 0:Ncycles;

set_pulse = ones(size(cycle_idx));

reset_times = [];
reset_vals  = [];

ival_per = i_valley + di0;
delta_i(1) = di0;

%% Build nominal and perturbed waveforms
for n = 0:Ncycles-1

    t0 = n*Ts;

    % --------------------------------------------------------
    % Nominal cycle: fixed steady-state cycle
    % --------------------------------------------------------
    ton_nom = D*Ts;

    t_nom = [t_nom, t0/Ts, (t0+ton_nom)/Ts, (t0+Ts)/Ts, NaN];
    i_nom = [i_nom, i_valley, i_peak, i_valley, NaN];

    % Ramp-compensated reference line for display
    % Iref_effective(t) = Iref_comp - ma*t_in_cycle
    t_ramp = [t_ramp, t0/Ts, (t0+Ts)/Ts, NaN];
    i_ref_ramp = [i_ref_ramp, Iref_comp, Iref_comp - ma*Ts, NaN];

    % --------------------------------------------------------
    % Perturbed cycle: event-based
    %
    % Turn-off condition:
    %
    %   i_L(t) + ma*t = Iref_comp
    %
    % During ON time:
    %
    %   i_L(t) = ival_per + m1*t
    %
    % Therefore:
    %
    %   ton = (Iref_comp - ival_per)/(m1 + ma)
    % --------------------------------------------------------
    ton_per_raw = (Iref_comp - ival_per)/(m1 + ma);

    if ton_per_raw <= 0
        ton_per = 0;
        i_next_per = ival_per - m2*Ts;
        mode_per = "immediate turn-off";

    elseif ton_per_raw >= Ts
        ton_per = Ts;
        i_next_per = ival_per + m1*Ts;
        mode_per = "stays ON";

    else
        ton_per = ton_per_raw;
        i_turnoff_per = ival_per + m1*ton_per;
        i_next_per = i_turnoff_per - m2*(Ts - ton_per);
        mode_per = "normal";
    end

    % Store perturbed waveform
    if ton_per == 0 || ton_per == Ts
        t_per = [t_per, t0/Ts, (t0+Ts)/Ts, NaN];
        i_per = [i_per, ival_per, i_next_per, NaN];
    else
        t_per = [t_per, t0/Ts, (t0+ton_per)/Ts, (t0+Ts)/Ts, NaN];
        i_per = [i_per, ival_per, i_turnoff_per, i_next_per, NaN];

        % Reset pulse at actual comparator trip time
        reset_times = [reset_times, n + ton_per/Ts];
        reset_vals  = [reset_vals, 1];
    end

    delta_i(n+2) = i_next_per - i_valley;

    fprintf('Cycle %d: perturbed = %s, delta_i = %.4f A\n', ...
        n, mode_per, delta_i(n+2));

    ival_per = i_next_per;
end

%% Stability factor with ramp compensation
lambda = -(m2 - ma)/(m1 + ma);

fprintf('\nEquivalent load resistance = %.3f ohm\n', Rload);
fprintf('Output current = %.3f A\n', Iout);
fprintf('Duty ratio = %.3f\n', D);
fprintf('m1 = %.3e A/s\n', m1);
fprintf('m2 = %.3e A/s\n', m2);
fprintf('ma = %.3e A/s\n', ma);
fprintf('Inductor ripple = %.3f A\n', Delta_i);
fprintf('Comparator reference Iref = %.3f A\n', Iref_comp);
fprintf('Small-signal perturbation factor lambda = %.3f\n', lambda);

%% Plot
figure('Color','w','Position',[100 100 1100 900]);

% ------------------------------------------------------------
% Subplot 1: Set pulse
% ------------------------------------------------------------
ax1 = subplot(4,1,1);
hold on; grid on; box on;

stem(cycle_idx, set_pulse, 'filled', ...
    'LineWidth', 2.5, ...
    'MarkerSize', 5, ...
    'Color', [0 0.55 0], ...
    'MarkerFaceColor', [0 0.55 0]);

ylabel('Set');
title('Clock Set Pulse');

ylim([0 1.25]);
set(gca, 'FontSize', 12, 'LineWidth', 1.1);

% ------------------------------------------------------------
% Subplot 2: Inductor current + ramp-compensated reference
% ------------------------------------------------------------
ax2 = subplot(4,1,2);
hold on; grid on; box on;

plot(t_nom, i_nom, 'k-', 'LineWidth', 2.2);
plot(t_per, i_per, 'r--', 'LineWidth', 2.2);
plot(t_ramp, i_ref_ramp, 'b-.', 'LineWidth', 1.8);

for n = 0:Ncycles
    xline(n, ':', 'LineWidth', 1.0);
end

plot([0 0], [i_valley i_valley+di0], 'b-', 'LineWidth', 2);
text(0.05, i_valley + di0/2, '\Delta i_0', ...
    'FontSize', 12, ...
    'FontWeight','bold', ...
    'VerticalAlignment','middle');

ylabel('Inductor current, i_L [A]');
legend('Nominal cycle', 'Perturbed cycle', ...
       'Ramp-compensated reference', ...
       'Location','northeast');

ylim([min([i_nom i_per i_ref_ramp],[],'omitnan')-0.2*Delta_i, ...
      max([i_nom i_per i_ref_ramp],[],'omitnan')+0.4*Delta_i]);

set(gca, 'FontSize', 12, 'LineWidth', 1.1);

% ------------------------------------------------------------
% Subplot 3: Reset pulse
% ------------------------------------------------------------
ax3 = subplot(4,1,3);
hold on; grid on; box on;

stem(reset_times, reset_vals, 'filled', ...
    'LineWidth', 2.5, ...
    'MarkerSize', 5, ...
    'Color', [0.85 0 0], ...
    'MarkerFaceColor', [0.85 0 0]);

ylabel('Reset');
title('Comparator Reset Pulse');

ylim([0 1.25]);
set(gca, 'FontSize', 12, 'LineWidth', 1.1);

% ------------------------------------------------------------
% Subplot 4: perturbation impulse plot
% ------------------------------------------------------------
ax4 = subplot(4,1,4);
hold on; grid on; box on;

stem(cycle_idx, delta_i, 'filled', ...
    'LineWidth', 2.5, ...
    'MarkerSize', 5, ...
    'Color', [0.1 0.4 0.8], ...
    'MarkerFaceColor', [0.1 0.4 0.8]);

yline(0, 'k-', 'LineWidth', 1.0);

for k = 1:length(delta_i)
    if delta_i(k) >= 0
        vAlign = 'bottom';
    else
        vAlign = 'top';
    end

    text(cycle_idx(k), delta_i(k), sprintf('%.4f', delta_i(k)), ...
        'HorizontalAlignment','center', ...
        'VerticalAlignment',vAlign, ...
        'FontSize',10);
end

xlabel('Time normalized to switching period, t/T_s');
ylabel('\Delta i_n [A]');
title(sprintf('Perturbation Evolution: \\lambda = %.3f', lambda));

set(gca, 'FontSize', 12, 'LineWidth', 1.1);

%% Link x-axes
linkaxes([ax1 ax2 ax3 ax4], 'x');
xlim(ax1, [0 Ncycles]);

xticks(ax1, 0:Ncycles);
xticklabels(ax1, compose('n=%d', 0:Ncycles));

xticks(ax2, 0:Ncycles);
xticklabels(ax2, compose('n=%d', 0:Ncycles));

xticks(ax3, 0:Ncycles);
xticklabels(ax3, compose('n=%d', 0:Ncycles));

xticks(ax4, 0:Ncycles);

Matlab Code for using Control System Designer Toolbox

%% Open Control System Designer for Experiment C3
clear; clc; close all;

s = tf('s');

%% Plant: buck converter duty-to-output transfer function
G = 7.07e9/(s^2 + 1.28e4*s + 7.07e8);

%% Sensor / measurement gain
H = 0.25;

%% Controller: Start here and gradually add zero and poles.
C = 1;

%% Explicit sensor architecture, if supported
controlSystemDesigner('bode',G,C,H)

🧷 Jumper Settings

For this experiment, we will be using only the black board.

Blue Board:

JumperFunctionSettingNote
JP4Carrier waveform selection (Option 1: Constant, Option 2: External Carrier, Option 3: Sawtooth waveform internally generated)Do not populate ( we will use the current mode to generate q(t)-
JP5Reference signal selection (Option 1: a dc, whose magnitude can be varied using the potentiometer Rduty1, Option 2: any external signal that ranges between 0 and 5 V, Option 3: Voltage mode (we will use this later on for closed-loop control)Do not populate-
JP3The PWM input signal to the deadtime generation circuit can be provided in three ways. (Option 1: Using an external PWM source, for example, an Arduino generating PWM pulses, Option 2: Internal PWM that is generated by the PWM generation circuit, and Option 3: Using current-mode control.)Position 3. We will use peak current mode control -
JP1The gate of the high-side MOSFET [qH (in Blue Board) or PWM_H(in Red Board)] can be fed three signals. (Option 1: q1 signal from the dead time compensation circuit, Option 2: gnd, Option 3: q2 signal from the dead time compensation circuit). Note that q1 follows q(t) and q2 is complementary.Position 1. We will use the half-bridge in synchronous mode.
JP2The gate of the low-side MOSFET [qL (in Blue Board) or PWM_L(in Red Board)] can be fed three signals. (Option 1: q2 signal from the dead time compensation circuit, Option 2: gnd, Option 3: q1 signal from the dead time compensation circuit). Note that q1 follows q(t) and q2 is complementary.Position 1. We will use the half-bridge in synchronous mode.
JP6Filter selection for the onboard measured inductor current. (Option 1: RC filter with a cut-off frequency at 159 Hz, Option 2: RC filter with a cut-off frequency at 1.59 MHz, Option 3: No filter).Position 3. We are interested in measuring the unfiltered inductor current in this experiment.
JP7Selection between only voltage mode or outer-loop voltage mode and inner loop current mode control. (Option 1: Only voltage mode. Option 2: Outer-loop voltage-mode control sends the reference to the inner-loop current-mode control.Do not populate. We will send the reference current externally. THIS IS CRITICAL, or else we might destroy the board.
JP8Selection between Type I or Type II voltage mode control. (Option 1: Type I, Option 2: Type II)Do not populate
JP9Current mode control. The clock pulse (rising edge) is internally generated (position 1) or externally provided (position 2). This indirectly determines the switching frequency in current-mode control.Position 1. We will use the internal clock pulse.
JP10Voltage feedback to the analog controller. Option 1. Vhigh_sns is fed back (useful for Boost converter voltage control, Option 2. Vmid_sns is fed back (useful for Buck converter voltage control)Do not populate

Red Board:

JumperFunctionSettingNote
J7Populating this jumper provides the 12 V supply to the gate driver. (Option 1: 12 V is internally generated, Option 2: An External supply is needed)Position 1. We will provide the internally generated 12V supply to the gate driver.-
J10 and J11These jumpers allow changing the direction of current measurement through the Rsense resistor. (Option 1: Current can be measured flowing from L2 to Vmid terminals, Option 2: Current can be measured flowing from Vmid to L2 terminals)Position 1. (We will set it up to measure the buck converter current.)

Keep all the other jumpers unpopulated.

⚙️ Circuit Configuration & Setting up the experiment

We will configure the red and blue boards to operate as a synchronous buck converter by connecting an external inductor (recommended value: 30 µH) and a load resistor using Bank A and Bank B in parallel. This configuration allows the load resistance to be varied by adding parallel resistors, enabling operation from no-load to the following approximate values: 51 Ω, 8.36 Ω, 4.55 Ω, 3.13 Ω, and 2.38 Ω. If a current probe is available, the inductor current should also be measured. The system is powered via USB. The reference signal to the controller can be provided either through the on-board potentiometer and tactile switch or using a signal generator. Please be extra cautious: The signal Vref. should always stay between 0 and 5 V, else we will destroy the voltage controller IC on the blue board.

Use the checklist below to mark each step as you complete it. You can download it later on to verify that you have performed all the steps.

Startup & Setup Checklist

Red Board + External Components
Blue Board
Blue Board
Red Board
All signals are measured with respect to GND (black test points).
I_ref(t) is now provided from Ext. Vref within the blue board.
Blue Board
Red Board
Initial Power-Up (Before Signal Injection)
Ext. Ref Setup
Connect and Verify

🧪 Experiment

Download the checklist above and ensure you have completed all steps before we power on. We will go through the following steps:

  1. First, let us gain a general understanding of the current mode-control operation in steady state. Probe the following signals on the oscilloscope: Set (Blue Board), Reset (Blue Board), q(t) (PWM signal, Blue Board), and inductor current (using iL_filt1). Ensure all signals share a common ground reference and are properly scaled for clear observation on the oscilloscope. What do you observe, in particular, what turns on q(t) and what turns off q(t)? Take a scope shot for the report such that at least two cycles are visible. Note any deviation compared to the theoretical expectation.
  2. Next, let us probe the following signals on the oscilloscope: Iref (same as Ext. Ref. on Blue Board), Reset (Blue Board), q(t) (PWM signal, Blue Board), and inductor current (using iL_filt1). What do you observe, in particular? Are you observing peak current being controlled? Take a scope shot for the report such that at least two cycles are visible. What is the operating duty ratio? Note any deviation compared to the theoretical expectation.
  3. Next, let us probe the following signals on the oscilloscope: Iref (same as Ext. Ref. on Blue Board), Output voltage, Vmid (Red Board), q(t) (PWM signal, Blue Board), and inductor current (using iL_filt1). Let us reduce Iref by using the Ref. potentiometer. What is the lowest duty ratio you can operate in a periodic steady state? Take a scope shot for the report such that at least two cycles are visible.
  4. Let us increase Iref by using the Ref. potentiometer. What is the maximum duty ratio you can operate in a periodic steady state (just before the onset of subharmonic oscillation, which will show up as jitter)? Take a scope shot for the report such that at least two cycles are visible. What is the output voltage ripple (you can measure this by looking at Vmid in ac-coupled mode)?
  5. If you push, Iref beyond, do you observe sub-harmonic oscillation? Take a scope shot for the report such that at least four cycles are visible. What is the output voltage ripple (you can measure this by looking at Vmid in ac-coupled mode)? We will add a ramp compensation later.
  6. We are now ready to perform transient measurements.
  7. Set Iref such that the output voltage (Vmid) is 4 V. Using the single trigger on the scope on the Iref, press and release the tactile switch. What do you observe, in particular, on the transient of the inductor current and output voltage? Take a scope shot for the report such that it captures the entire output voltage trajectory until it reaches steady state are visible.
  8. Next, we will vary the load and observe the same transient waveform. In particular, measure the time constant from the output voltage waveform and note if there is overshoot of the output voltage using the table below. Observe carefully how the pole location (time constant) changes with the change in load. Capture the data so we can later run a moving average on the inductor current and understand its dynamics in an average sense.

Transient Response for a Step Change in Reference Current

Apply a step change in Iref and observe both the inductor current and output voltage.

Important: For each load case, adjust Iref individually so that the output voltage reaches approximately 4 V before applying the step. Then apply the step change in Iref using the tactile switch and measure the output-voltage time constant. The theoretical estimate is τ = RC. The measured pole is calculated from the measured time constant as p = -1/τmeas.
Subgroup: Load Variation — No Ramp Compensation

Fixed condition: Vin = 10 V, Vo ≈ 4 V for each load case, fs = 50 kHz.

Case File Name Load R (Ω) Load Condition Iref Setting for Vo ≈ 4 V Theoretical τ = RC (µs) Measured τ (µs) Measured Pole, p = -1/τmeas (rad/s) Stability Observations: iL and vo
1 Very Light Load
2 Light Load
3 Medium Load
4 Medium-Heavy Load
5 Heavy Load
  1. Ensure the load resistance is set so that a net resistance of two 10 Ohms and one 51 Ohm is ON (we are at medium load).
  2. Next, let us probe the following signals on the oscilloscope: q(t) (same as Ext. Ref. on Blue Board), Ramp1 (Blue Board), output voltage (Vmid, Red Board), and inductor current (using iL_filt1). Let us try to push the output voltage to 7 V by increasing Iref. What do you observe? Are you able to get to 7 V? If not, increase Ramp1 (by using the potentiometer Ramp_gain1) to stabilize the inductor current. As you increase Ramp1, the waveform exits subharmonic oscillation, lowering the effective duty ratio and hence the output voltage. Increase Iref and adjust Ramp1 just enough such that you ultimately get a stable inductor current and 7 V at the output.
  3. Next, we will observe the effect of the compensating ramp on the transient response and on the steady-state output voltage when Iref is kept constant, even as the ramp changes.

Transient Response for a Step Change in Reference Current

Study the effect of ramp compensation on the transient response when Iref is kept constant and the load is fixed.

Measurement guidelines: Keep Iref constant across all ramp cases. Apply the same step change in Iref using the tactile switch. Measure rise time from 10% to 90% of the final output-voltage change. Record the steady-state output voltage and note the behavior of both iL and vo.
Subgroup: Ramp Variation — Constant Iref, Fixed Load

Fixed condition: Vin = 10 V, Load R = 4.55 Ω, L = 30 µH, C = 30 µF, fs = 50 kHz.

Case File Name Ramp Setting Iref Rise Time, 10–90% (µs) Steady-State Vo (V) Stability Observations: iL and vo
1 Baseline Constant
2 1 V / 20 µs Constant
3 2 V / 20 µs Constant
  1. Next, we will observe the effect of the compensating ramp on the transient response and on the steady-state output voltage when Iref is adjusted a priori to meet the 7 V output voltage. Without changing Iref, decrease Ramp1 such that you ultimately get a stable inductor current and 7 V at the output. You should be back to the baseline operating condition of Step 10.

Transient Response for a Step Change in Reference Current

Study the effect of ramp compensation on the transient response when Iref is adjusted to achieve the same output voltage.

Measurement guidelines: For each ramp case, adjust Iref so that the output voltage reaches approximately 7 V. Apply the step change in Iref. Measure rise time from 10% to 90% of the final output-voltage change. Record stability and waveform behavior.
Subgroup: Ramp Variation — Adjusted Iref, Fixed Load

Fixed condition: Vin = 10 V, Load R = 4.55 Ω, L = 30 µH, C = 30 µF, fs = 50 kHz.

Case File Name Ramp Setting Iref (for Vo ≈ 7 V) Rise Time, 10–90% (µs) Steady-State Vo (V) Stability Observations: iL and vo
1 Baseline
2 1 V / 20 µs
3 2 V / 20 µs

Turn off Checklist

Before we close the experiment, please ensure:

Turn-Off & Shutdown Checklist

🧠 Observations & Analysis

Now, let us analyze the data you collected to write a brief report that solidifies our understanding. Structure the report to include the following:

  1. Restate the objectives of this experiment in your own words. Your response should address the following: How does controller design (Type I vs Type II) influence the transient response of a buck converter? What is the effect of controller gain on rise time, overshoot, and settling time? How does the load resistance influence the transient response, and how does this compare to the effect of controller design?
  2. Theory: Explain the role of the controller in shaping transient response: Why does increasing gain generally reduce rise time but increase overshoot? What is the role of the integrator (Type I) in steady-state accuracy? What additional feature does a Type II controller introduce, and how does it improve performance? Discuss how phase margin is related to: Overshoot, Damping, and Robustness.
  3. Using the scope shot of Step 3, explain the controller action and switching signal. Explain how the inductor current transients during the step change. Can you identify the effect of the reference feedforward on the controller output?
  4. Gain Variation Analysis (Type I Controller): Using the data collected in Subgroup 1, analyze the effect of increasing gain: As gain increases, how does rise time change? How does overshoot vary? Does the system transition from overdamped → underdamped behavior?
  5. Load Variation Analysis (Type I Controller) Using the data collected in Subgroup 2, analyze the effect of load variation: As load resistance increases (heavy → light load), how does: Does the system become more or less damped at light load?
  6. Gain Variation Analysis (Type II Controller)
  7. Using the data collected in Subgroup 3, repeat the same analysis: Compare rise time and overshoot trends with Type I. For the same overshoot, does Type II achieve faster response? For the same rise time, does Type II reduce overshoot? Explain why Type II outperforms Type I, referring to: Phase boost, improved phase margin near crossover.
  8. Using the data collected in Subgroup 4, repeat the analysis and compare the results with those from Type I. At which load condition does Type II provide the most benefit? At which load condition do Type I and Type II behave similarly? Explain why controller influence reduces at heavy load.
  9. Controller vs Plant Dominance: Based on your observations, when does the controller dominate system behavior? When does the plant (LC + load) dominate behavior? Explain how this depends on: Load resistance and Damping
  10. What would be the trade-off of changing the controller structure from Type II to Type III?
  11. If you have step 14, show your theoretical calculations along with experimental results and compare them.
  12. Write a short conclusion summarizing the main findings of the experiment. Your conclusion should address: How does controller design influence transient performance? Why does Type II provide improved performance over Type I? The role of load in determining system damping. The importance of balancing speed and stability in control design.

✔ Conclusion

The experiment demonstrates that controller design and gain strongly shape the transient response, with Type II control achieving a superior balance between speed and damping, while load conditions ultimately determine the system’s inherent performance limits.

🔍 References & further reading

  • Erickson, R.W. and Maksimovic, D. (2020). Fundamentals of Power Electronics. 3rd Edition, Springer, Berlin.
  • J. H. B. Deane, "Chaos in a current-mode controlled boost DC-DC converter," in IEEE Transactions on Circuits and Systems I: Fundamental Theory and Applications, vol. 39, no. 8, pp. 680-683, Aug. 1992, doi: 10.1109/81.168922
  • Dave Perreault: Lecture 27: Current mode control, https://www.youtube.com/watch?v=WJNPGXivqew&t=354s