Matlab--不完全微分PID控制算法及其仿真
在PID控制中,微分信号的引入可改善系统的动态特性,但也易引进高频干扰,在误差扰动突变时尤其显出微分项的不足。 。若在控制算法中加入低通滤波器,则可使系统性能得到改善。 克服上述缺点的方法之一是在PID算法中加入一个一阶惯性环节(低通滤波器) G f ( s ) = 1 / ( 1 + T f s ) G_{f}(s)=1/(1+T_{f}s) Gf(s)=1/(1+Tfs),可以使得系统得到改善。
不完全微分PID的结构如图(a)、(b)所示,其中图(a)是将低通滤波器直接加在微分环节上,图(b)是将低通滤波加在整个PID控制器之后。下面以图(a)为例进行仿真说明不完全微分PID如何改进了普通PID的性能。1233 通过对a所展示的不完全微分结构,其传递函数为: 注意事项:
u D ( k ) = k p T D s ( T f s + 1 ) ∗ E ( s ) u_{D(k)}=displaystylefrac {k_{p}T_{D}s}{(T_{f}s+1)}*E(s) uD(k)=(Tfs+1)kpTDs∗E(s) ( T f s + 1 ) U D ( s ) = k p T D s E ( s ) (T_{f}s+1)U_{D}(s)=k_{p}T_{D}sE(s) (Tfs+1)UD(s)=kpTDsE(s) T f s U D ( s ) + U D s = k p T D s E ( s ) T_{f}sU_{D}(s)+U_{D}s=k_{p}T_{D}sE(s) TfsUD(s)+UDs=kpTDsE(s) 然后微分得到后面上面式子
%PID Controler with Partial differential clear all; close all; 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; for k=1:1:100 time(k)=k*ts; yd(k)=1.0; %Linear model y(k)=-den(2)*y_1+num(2)*u_5; n(k)=0.01*rands(1); y(k)=y(k)+n(k); error(k)=yd(k)-y(k); %PID Controller with partly differential ei=ei+error(k)*ts; kc=0.30; ki=0.0055; TD=140; kd=kc*TD/ts; Tf=180; Q=tf([1],[Tf,1]); %Low Freq Signal Filter M=2; if M==1 %Using PID with Partial differential alfa=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); elseif M==2 %Using Simple PID u(k)=kc*error(k)+kd*(error(k)-error_1)+ki*ei; end %Restricting the output of controller if u(k)>=10 u(k)=10; end if u(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=y(k); error_1=error(k); end figure(1); plot(time,yd,r,time,y,k:,linewidth,2); xlabel(time(s));ylabel(yd,y); legend(Ideal position signal,Position tracking); figure(2); plot(time,u,r,linewidth,2); xlabel(time(s));ylabel(u); figure(3); bode(Q,r); dcgain(Q);
