Clear Filters
Clear Filters

Closed-loop output impedance

50 views (last 30 days)
Lukas Grigelionis
Lukas Grigelionis on 1 Apr 2024 at 10:29
Commented: Pat Gipper on 18 Apr 2024 at 1:52
Is there a way to obtain the open-loop duty ratio to output voltage transfer function for the following example (https://se.mathworks.com/help/ident/ug/estimating-transfer-function-models-for-a-boost-converter.html) if it is modified by commenting out the variable resistor at the output and adding a series resistance of 0.1 Ohm to the inductor? I try to use this code with such a setup, but I get fairly different results between the estimated model and the analytical computation, most notably with regards to the phase. Does anyone have suggestions on what I could do to remedy this issue? Thanks in advance.
Running the code below under the given conditions gives me the following Bode plots
%% Estimating Transfer Function Models for a Boost Converter
%
% This example shows how to estimate a transfer function from frequency
% response data. You use Simulink(R) Control Design(TM) to collect
% frequency response data from a Simulink model and the |tfest| command to
% estimate a transfer function from the measured data. To run the example with
% previously saved frequency response data start from the *Estimating a Transfer
% Function* section.
%
% Copyright 2011-2023 The MathWorks, Inc.
%% Boost Converter
%
% Open the Simulink model.
mdl = 'iddemo_boost_converter';
open_system(mdl);
T_s = 1/100e3;
D = 0.375;
V_dc = 250;
V_o = V_dc/(1 - D);
L = 0.0084853;
C = 4.714e-6;
I_l = 0.64;%T_s*V_o*D*(1 - D)/(2*L);
G_vd_test = tf([-L*I_l V_dc-0.1*I_l],[L*C 0.1*C (1 - D)^2]);
figure();
bode(G_vd_test);
%%
% The model is of a Boost Converter circuit that converts a DC voltage to
% another DC voltage (typically a higher voltage) by controlled chopping or
% switching of the source voltage. In this model an IGBT driven by a PWM
% signal is used for switching.
%
% For this example we are interested in the transfer function from the PWM
% duty cycle set-point to the load voltage, Uout.
%% Collect Frequency Response Data
%
% We use the |frestimate| command to perturb the duty cycle set-point with
% sinusoids of different frequencies and log the resulting load voltage.
% From these we find how the system modifies the magnitude and phase of
% the injected sinusoids giving us discrete points on the frequency
% response.
%
% Using |frestimate| requires two preliminary steps
%
% * Specifying the frequency response input and output points
%
% * Defining the sinusoids to inject at the input point
%
% The frequency response input and output points are created using the
% |linio| command and for this example are the outputs of the |DutyCycle|
% and |Voltage Measurement| blocks.
ios = [...
linio([mdl,'/DutyCycle'],1,'input'); ...
linio([mdl,'/PS-Simulink Converter'],1,'output')];
%%
% We use the |frest.Sinestream| command to define the sinusoids to inject
% at the input point. We are interested in the frequency range 200 to 20k
% rad/s, and want to perturb the duty cycle by 0.03.
f = logspace(log10(200),log10(20000),10);
in = frest.Sinestream('Frequency',f,'Amplitude',0.03);%0.03);
%%
% The simulation time required to simulate the model with this sine-stream
% signal is determined using the |getSimulationTime| command and as we know
% the simulation end time used by the model we can get an idea of
% how much longer the sine-stream simulation will take over simply running
% the model.
getSimulationTime(in)/0.02
%%
% We use the defined inputs and sine-stream with |frestimate| to compute
% discrete points on the frequency response.
[sysData,simlog] = frestimate(mdl,ios,in);
bopt = bodeoptions;
bopt.Grid = 'on';
bopt.PhaseMatching = 'on';
figure, bode(sysData,'*r', G_vd_test,bopt)
%%
% The Bode response shows a system with a 56db gain, some minor resonance
% around 2500 rad/s and a high frequency roll off of around 20 db/decade
% matching what we would expect for this circuit.
%%
% The |frest.simView| command allows us to inspect the frestimate process
% showing the injected signal, measured output, and frequency response in
% one graphical interface.
%
frest.simView(simlog,in,sysData);
%%
% The figure shows the model response to injected sinusoids and the FFT of
% the model response. Notice that the injected sinusoids result
% in signals with a dominant frequency and limited harmonics indicating
% a linear model and successful frequency response data collection.
%
%% Estimating a Transfer Function
% In the previous step we collected frequency response data. This data
% describes the system as discrete frequency points and we now fit a
% transfer function to the data.
%
% We generated the frequency response data using Simulink Control Design,
% if Simulink Control Design is not installed use the following command to
% load the saved frequency response data
%
load iddemo_boostconverter_data
%%
% Inspecting the frequency response data we expect that the system can be
% described by a second order system.
sysA = tfest(sysData,2)
figure, bode(sysData,'r*',sysA,bopt)
%%
% The estimated transfer function is accurate over the provided frequency
% range.
%%
bdclose(mdl)
  1 Comment
Lukas Grigelionis
Lukas Grigelionis on 1 Apr 2024 at 10:32
I should note that I also replaced the converter's diode with another IGBT whose gate receives the inverted signal given to the vertical IGBT, so the converter has in effect been made synchronous. Could this have something to do with it?

Sign in to comment.

Answers (1)

Pat Gipper
Pat Gipper on 7 Apr 2024 at 0:51
Moved: Sabin on 17 Apr 2024 at 15:53
Placing a 0.1 Ohm load resistance on the output of this power supply is demanding way more current then it would normally supply. Try two things; 1) Switch back to a 30 Ohm load 2) Go back to a a diode as opposed to the IGBT that you replaced it with. Once you do these things do you get the same results as the original Mathworks demo at this link? Estimating Transfer Function Models for a Boost Converter - MATLAB & Simulink Example (mathworks.com)
  2 Comments
Lukas Grigelionis
Lukas Grigelionis on 9 Apr 2024 at 8:24
Moved: Sabin on 17 Apr 2024 at 15:53
Yes, I have since been able to obtain the same transfer functions as in the original demo, but it was sufficient to swtich back to a 30 Ohm load. The second IGBT did not affect the model significantly.
Pat Gipper
Pat Gipper on 18 Apr 2024 at 1:52
I apologize Lukas for this being posted as an answer, since I only provided a suggestion and not an answer. I don't have the model that was called out since it requires the System Identification Toolbox. If you post your model I can try to duplicate some of your results from the frestimate command. But I won't be able to produce the linearized portion. The low frequency phase shift of the linearized results looks incorrect to me, and should not be starting at -180 degrees.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!