连续系统PID的Simulink仿真-3

利用简化S函数,实现连续系统PID的Simulink仿真-2中S函数同样的功能。

利用S函数简化形式实现被控对象的表达、控制器的设计及仿真结果的输出。在简化S函数中,flag-0时为S函数初始化,其中 sys包括6个参数:第1个参数表示连续系统的阶数;第2个参数表示离散系统的阶数;第3个参数表示S函数的输出个数;第4个参数表示S函数的输入个数;第5个参数表示直接馈通(DirFeedthrough),即输入信号是否在输出端出现的标识,取值为0或1;第6个参数表示模块采样周期的个数,S函数支持多采样周期的系统,x0=[为系统初始值设定; flag=1时为S函数被控对象微分方程的描述;flag=3时为S函数输出。仿真结果如图所示。

连续系统PID的Simulink仿真-3_第1张图片

仿真图:

连续系统PID的Simulink仿真-3_第2张图片

简化的S函数控制器程序:chap1_3ns.m

function [sys,x0]=s_function(t,x,u,flag)

kp=60;

ki=1;

kd=3;

if flag==0

sys=[0,0.1,3,0,1]; %Outputs=1,Inputs=3,DirFeedthrough=0;

x0=[ ];

clseif flag==3

sys(1)=kp*u(1)+ki*u(2)+kd*u(3);

else

sys=[];

end

简化的S函数被控对象程序:chap1_3nplant.m

function [sys,x0]=s_function(t,x,u,flag)

if flag==0

sys=[2,0,1,1,0,0]; %ContStates=2,Outputs=1,Inputs=l

x0=[0.0];

elseif flag==1

sys(1)=x(2)

sys(2)=-(25+10*rands(1))*x(2)+(133+30*rands(1))*u;

elseif flag==3

sys(1)=x(1);

else

sys=[ ];

end

作图程序:chap1_3nplot.m

close all;

plot(t,y(:,1).'r',ty(:,2),'k:','linewidth' ,2);

xlabel( 'time(s)');ylabel('yd,y');

legend('ldeal position signal','Position tracking');

你可能感兴趣的:(MATLAB,matlab,学习,PID控制)