PID控制算法的MATLAB仿真分析.docx

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

PID的MATLAB仿真程序:

%PIDControler不完全微分

clearall;closeall;

ts=20;sys=tf([1],[60,1],”inputdelay”,80);dsys=c2d(sys,ts,”zoh”);

[num,den]=tfdata(dsys,”v”);

u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;ud_1=0;

y_1=0;y_2=0;y_3=0;error_1=0;

ei=0;

fork=1:1:100time(k)=k*ts;rin(k)=1.0;

%Linearmodel

yout(k)=-den(2)*y_1+num(2)*u_5;

D(k)=0.01*rands(1);

yout(k)=yout(k)+D(k);

error(k)=rin(k)-yout(k);

%PIDControllerwithpartlydifferentialei=ei+error(k)*ts;

kc=0.30;ki=0.0055;TD=140;

kd=kc*TD/ts;

Tf=180;

Q=tf([1],[Tf,1]); %LowFreqSignalFilter

M=2; %M=1不完全微分,

%M=2一般Pid掌握!!

ifM==1

%UsingPIDwithPartialdifferentialalfa=Tf/(ts+Tf);

ud(k)=kd*(1-alfa)*(error(k)-error_1)+alfa*ud_1;

u(k)=kc*error(k)+ud(k)+ki*ei;ud_1=ud(k);

elseifM==2 %UsingSimplePIDu(k)=kc*error(k)+kd*(error(k)-error_1)+

ki*ei;end

%Restrictingtheoutputofcontrollerifu(k)=10

u(k)=10;

end

ifu(k)=-10

u(k)=-10;

end

u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=yout(k);error_1=error(k);

endfigure(1);

plot(time,rin,”b”,time,yout,”r”);

xlabel(”time(s)”);ylabel(”rin,yout”);

由仿真结果可以看出,承受不完全微分型PID算法,引入不完全微分后能有效抑制一般PID的缺乏,尽管不完全微分算法比一般PID掌握算法要简单的多,但由于其良好的掌握特性,近年来越来越广泛的应用。

图〔2-6〕不完全微分型〔r输入,b输出,下同〕图〔2-7〕一般PID掌握

2)微分先行和输入滤波PID掌握算法

微分先行PID掌握算法的特点是只对输出量进展微分,而对给定值不进展

微分。这样,在转变给定值时,输出不会转变,而且由于被控量一般不会突变,即使给定值已发生转变,被控量也是缓慢变化的,从而不致引起微分项的突变。

微分先行PID掌握算式为:

?u(k)=k

[e(k)-e(k-1)]+kpT[e(k)-2c(k-1)+c(k-2)]-kTd[c(k)-c(k-1)] 〔2-9〕

TTp p

T

T

1 I

输入滤波,输入滤波就是在计算微分项时,不是直接应用当前时刻的误差e(n),而是承受滤波值e(n),即用过去和当前四个采样时刻的误差的平均值,再通过加权求和形式近似构成微分项

KT ? ?

u (n)? P D e(n)?3e(n?1)?3e(n?2)?e(n?3)

D 6T (2-10)

KT ? ?

?u (n)? P D e(n)?2e(n?1)?6e(n?2)?2e(n?3)?e(n?4)

D 6T (2-11)

仿真分析:设被控对象的传递函数为:

G(s)=e-80s

60s+1

仿真程序:

%PIDControler微分先行

clearall;closeall;

ts=20;sys=tf([1],[60,1],”inputdelay”,80);dsys=c2d(sys,ts,”zoh”);

[num,den]=tfdata(dsys,”v”);

u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;ud_1=0;

y_1=0;y_2=0;y_3=0;error_1=0;error_2=0;ei=0;

fork=1:1:400time(k)=k*ts;

c1=gama*Td

文档评论(0)

189****1877 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体天津卓蹊信息咨询有限公司
IP属地天津
统一社会信用代码/组织机构代码
91120102MADL1U0A9W

1亿VIP精品文档

相关文档