- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)