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
is the filter inductance.
is the load resistance.
is the switching period for each MOSFET. That is, , where is the switching frequency.
is the duty cycle of PWM input to the gate of each MOSFET. That is, , where is the ON time of the MOSFET.
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 'ee_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
The duty cycle depends on the input voltage, the turns ratio and the desired output voltage.
Duty = Output_Voltage/(Input_Voltage/TR);
I_fl_average = Output_Power/Output_Voltage; % Full load average current that flows through the load R_const = Output_Voltage/I_fl_average;
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*... 0.01);
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*... I_fl_average*0.01); figure; hold on; plot(del_I_range,L_range); hold on; L_del_I = (Input_Voltage/TR)*Duty*(1-Duty)/(2*fsw_Hz*del_I*... I_fl_average*0.01); plot(del_I,L_del_I, '*'); xlabel('Inductor current ripple (% of full load current)'); ylabel('Inductance (H)'); title('Inductance Vs Inductor Current Ripple');
C_min = (Input_Voltage/TR)*Duty*(1-Duty)/(8*(2*fsw_Hz)^2*L_min*... Output_Voltage*del_V*0.01);
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*... Output_Voltage*del_V_range*0.01); figure; hold on; plot(del_V_range,C_range); hold on; C = (Input_Voltage/TR-Output_Voltage)*Duty/(8*(2*fsw_Hz)^2*L_min*... Output_Voltage*del_V*0.01); plot(del_V,C,'*'); xlabel('Voltage Ripple (%)'); ylabel('Capacitance (F)'); title('Capacitance Vs Voltage Ripple');
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:
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('ee_push_pull_converter_ccm/Scopes/PI Controller Scope');
After the simulation, to view logged Simscape™ data using the Simscape Results Explorer, enter: