PID 的 MATLAB 仿真程序: %PID Controler 不完全微分 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; rin(k)=1.0; %Linear model 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); %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; %M=1 不完全微分, %M=2 普通 Pid 控制!! 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=yout(k); error_1=error(k); end figure(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)微分先行和输入滤波 P ID 控制算法 微分先行 PID 控制算法的特点是只对输出量进行微分,而对给定值不进行 微分。这样,在改变给定值时,输出不会改变,而且由于被控量一般不会突变,即使给定值已发生改变,被控量也是缓慢变化的,从而不致引起微分项的突变。 微分先行 PID 控制算式为: dpp1ITTu (k)=k [e(k)-e(k-1)]+ kp[e(k)-2c(k-1)+c(k-2)]- k[c(k)-c(k-1)]TT (2-9) 输入滤波,输入滤波就是在计算微分项时,不是直接应用当前时刻的误差e(n),而是采用滤波值 e(n),即用过去和当前四个采样时刻的误差的平均值,再通过加权求和形式近似构成微分项 )3()2(3)1(3)(6)(...