MATLAB Examples

Push-Pull Buck Converter in Continuous Conduction Mode

This example shows how to control the output voltage of a push-pull buck converter. The current flowing through the inductor is never zero, therefore the DC-DC converter operates in Continuous Conduction Mode (CCM). To convert and maintain the nominal output voltage, the PI Controller subsystem uses a simple integral control. During startup, the reference voltage is ramped up to the desired output voltage.


The converter operates in CCM only if

  • $K > K_{critical}$ ,


  • $K = 2 * L/(R * Tsw)$ .
  • $K_{critcal} = 1 - D$ .
  • $L$ is the filter inductance.
  • $R$ is the load resistance.
  • $T_{sw}$ is the switching period for each MOSFET. That is, $T_{sw} = 0.5/f_{sw}$ , where $f_{sw}$ is the switching frequency.
  • $D$ is the duty cycle of PWM input to the gate of each MOSFET. That is, $D = T_{on}/T_{sw}$ , where $T_{on}$ is the ON time of the MOSFET.

Open Model


Specify the Design Parameters

The system is required to generate and maintain an output voltage of 80 V with a full load power capability of 1000 W. The input voltage is 400 V and the transformer turns ratio is 2. The full load includes a constant load and a cyclic load. The 'pe_push_pull_converter_ccm_data.m' script defines the design parameters as variables in the MATLAB® workspace.

Input_Voltage           = 400;                                %  Input voltage to the push-pull converter [V]
Output_Voltage          = 80;                                 %  Desired output voltage from the push-pull converter [V]
Output_Power            = 1000;                               %  Full load power output [W]
fsw_Hz                  = 40000;                              %  MOSFET switching frequency [Hz]
primary_winding         = 200;                                %  Number of turns in the primary winding
secondary_winding       = 100;                                %  Number of turns in the secondary winding
TR                      = primary_winding/secondary_winding;  %  Turns ratio
Kp                      = 0.01;                               %  Proportional gain for PI controller
Ki                      = 20;                                 %  Integral gain for PI controller
del_I                   = 40;                                 %  Peak-peak inductor ripple current as a percentage of full load current
del_V                   = 1;                                  %  Peak-peak output voltage ripple as a percentage of output voltage
share_constload         = 70;                                 %  Percentage of load current drawn by constant load
share_cyclicload        = 100-share_constload;                %  Percentage of load current drawn by cyclic load
cyclic_load_period      = 1/20;                               %  Cyclic load period
cyclic_load_pul_width   = 50;                                 %  Pulse width of the current pulses drawn by the cyclic load
Ts                      = 1e-7;                               %  Sampling time for the solver

Calculate the Open-Loop Duty Cycle

The duty cycle depends on the input voltage, the turns ratio and the desired output voltage.

Duty = Output_Voltage/(Input_Voltage/TR);

Determine the Constant Load Resistance

I_fl_average = Output_Power/Output_Voltage;                     %  Full load average current that flows through the load
R_const = Output_Voltage/I_fl_average;

Calculate the Filter Inductance

Choose the inductance value based on the input and output specifications of the converter. The inductance value depends on the input and output specifications of the converter. For this example, the converter is required to work in CCM for 20-100% of full load power. When, at the lower boundary condition, the power is 20% of full load power, the average load current is 20% of full load average current, I_fl_average. At the end of each cycle at the lower boundary condition, the inductor current goes to zero. The inductor ripple current, del_I, at this point is twice the average output load current, that is 40% of the full load average output current.

L_min = (Input_Voltage/TR)*Duty*(1-Duty)/(2*fsw_Hz*del_I*I_fl_average*...

Plot Inductance Versus Inductor Current Ripple

Generate this plot to see how the filter inductance relates to the inductor ripple current (expressed as a percentage of full load current). For this example, the marker at 40% corresponds to an inductance of 1.2e-04 H.

del_I_range = 20:0.1:50;     %  Percentage of full load current (20-50%)
L_range = (Input_Voltage/TR)*Duty*(1-Duty)./(2*fsw_Hz*del_I_range*...
hold on;
hold on;
L_del_I = (Input_Voltage/TR)*Duty*(1-Duty)/(2*fsw_Hz*del_I*...
plot(del_I,L_del_I, '*');
xlabel('Inductor current ripple (% of full load current)');
ylabel('Inductance (H)');
title('Inductance Vs Inductor Current Ripple');

Choose a Filter Capacitance

C_min = (Input_Voltage/TR)*Duty*(1-Duty)/(8*(2*fsw_Hz)^2*L_min*...

Plot Capacitance Versus Voltage Ripple

Generate this plot to see how capacitance for limiting the output voltage ripple varies depending on the design parameters. For this example, the marker at 1% Output Voltage Ripple corresponds to a capacitance of 9.766e-06 F.

del_V_range = 0.5:0.1:5;
C_range = (Input_Voltage/TR-Output_Voltage)*Duty./(8*(2*fsw_Hz)^2*L_min*...
hold on;
hold on;
C = (Input_Voltage/TR-Output_Voltage)*Duty/(8*(2*fsw_Hz)^2*L_min*...
xlabel('Voltage Ripple (%)');
ylabel('Capacitance (F)');
title('Capacitance Vs Voltage Ripple');

Run the Simulation


View Simulation Results

To view summary results during or after the simulation, open the Circuit Scope block from the model window or by entering, at the MATLAB command prompt:

open_system('pe_push_pull_converter_ccm/Circuit Scope');

To view the control and error data during or after the simulation, open the PI Controller Scope block from the model window or, enter:

open_system('pe_push_pull_converter_ccm/PI Controller Scope');

After the simulation, to view logged Simscape™ data using the Simscape Results Explorer, enter: