注意:
注释代码是基于采样周期ts=20s形式… ;频域到时域变化请参考 MATLAB编程测试传递函数的响应曲线(系统辨识第一篇)。
/weixin_37928884/article/details/127799637
% 传递函数:一阶惯性加滞后% 1% exp(-80*s) * --------%60 s + 1clear;close all;clc;% 采样周期ts与tdelay有关、修改ts观察tdelay变化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;% 设定初值u,由于滞后,故y的输出在刚开始有输入的滞后时间内为零tdelay = dsys.InputDelay + 1;for m=1:tdelayu_(m)=0;end%-----------------计算PID使用-----------------%y_1=0;y_2=0;y_3=0;error_1=0;error_2=0;%-----------------计算PID使用-----------------%ei=0;for k=1:1:2000/tstime(k)=k*ts;rin(k)=1.0;%Step Signal%yout(k)=-den(2)*y_1+num(2)*u_5;yout(k)=-den(2)*y_1+num(2)*u_(tdelay);error(k)=rin(k)-yout(k);kp=0.45;kd=12;ki=0.0048; ei=ei+(error(k)+error_1)/2*ts;u(k)=kp*error(k)+kd*(error(k)-error_1)/ts+ki*ei;if u(k)>=10u(k)=10;endif u(k)<=-10u(k)=-10;end%u_5=u_4;%u_4=u_3;%u_3=u_2;%u_2=u_1;%u_1=u(k);for m=2:tdelayu_(m)=u_(m-1);endu_(1)=u(k);%-----------------计算PID使用-----------------%y_3=y_2;y_2=y_1;y_1=yout(k);error_2=error_1;error_1=error(k);%-----------------计算PID使用-----------------%endfigure(1);plot(time,rin,'b',time,yout,'r');xlabel('time(s)');ylabel('rin,yout');
pid参数自整定用到Simulink,这里给出调节PID方法:
第一种:经验法 参考pid调试经验,观察现象调试参数
/download/weixin_37928884/86764992
第二种:自整定法
第一步:选择Discrete-time;
第二步:Sample time(-1 for inherited)20;
第三步:去掉Use filtered derivative;
第四步:点击Tune…按钮,弹出自整定界面;
第五步:点击Update Block,将自整定pid参数返回PID(Z)块配置中。
MATLAB的m文件代码采用Simulink中整定pid参数,运行结果如下:
综上所述,以上方法可行…