www.gusucode.com > ident_featured 案例代码 matlab源码程序 > ident_featured/iddemo_BoostConverter.m
%% 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. % % The example requires Simulink Control Design(TM) and % Simscape Power Systems(TM). % Copyright 2011-2015 The MathWorks, Inc. %% Boost Converter % % Open the Simulink model. mdl = 'iddemo_boost_converter'; open_system(mdl); %% % 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,'/Voltage Measurement'],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); %% % 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',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) %% Additional Information % For more information on identification of dynamic systems with System % Identification Toolbox visit the % <http://www.mathworks.com/products/sysid/ System Identification Toolbox> % product information page.