IC解密先采用比例作用,设置积分时间T1=∞微分时间TD=0,根据经验设置比例带δ,将系统投入闭环运行,稳定后做阶跃扰动试验,改变比例带δ值,使被调量的阶跃响应曲线出现4:1衰减震荡,记录此时的比例带δ
2)比例积分作用: 在1)的基础上,首先将δ增大10%~20%,做阶跃扰动试验,然后将积分时间Ti 由大到小的变化,直到得到4:1衰减曲线为止.先增加比例带的原因是加入积分后,系统稳定性,比原来单纯比例调节时要降低,增加δ补偿加积分作用后而引起得稳定性的降低.
3)积分时间保持不变,加入比例带,观察控制过程有无改善,如有改善则继续调整,直到满意为止.否则,将原比例带减小一些,再调整积分时间,力求改善控制过程.如此反复试凑,直到找到满意的比例带和积分时间为止.
4)最后再加入微分作用,IC解密将微分时间TD 由小到大的调整.观察每次实验过程,直到满意为止.
根据上述思路,写出代码如下:
- % 主函数
- % 初始化pid参数
- kp=1; ti=1e32; td=0;
- % 定义状态值,方便debug
- status = 0; % 状态: 0-未整定,1-整定好p,2-整定好i,3-整定好d,整定完成
- gg0=getLoop(kp, ti, td);
- figure
- step(gg0);
- hold on
- % 整定p, 调整衰减比接近4:1
- while getDelta(kp, ti, td)>4
- % getDelta([kp, ti, td])
- kp = kp*1.01; % kp增大,衰减比减小
- end
- status = 1
- gg1=getLoop(kp, ti, td);
- step(gg1);
- hold on
- % 整定i, 调整衰减比接近4:1
- kp = kp * 0.9; % 减小kp,补偿引入积分作用造成的稳定性下降
- while getDelta(kp, ti, td)>4
- % getDelta([kp, ti, td])
- ti = ti*0.9;
- end
- status = 2
- gg2=getLoop(kp, ti, td);
- step(gg2);
- hold on
- % 整定d, 调整衰减比接近4:1
- kp = kp * 0.9; % 减小kp,补偿引入积分作用造成的稳定性下降
- td=1e-32;
- while getDelta(kp, ti, td)>4
- % td
- % getDelta(kp, ti, td)
- td = td*1.1;
- end
- status = 3
- gg3=getLoop(kp, ti, td);
- step(gg3);
- legend('intianl respond','respond after setting p','respond after setting i','respond after setting d');
- hold off
- % 返回pid参数为[kp, ti, td]的闭环控制系统的回路方程
- function gg = getLoop(kp, ti, td)
- % 构建方程
- g = tf(25, conv([4 1], [20 1])); % 开环系统
- gc_p = tf(kp, 1); % p控制
- gc_i = tf(kp, [ti 0]); % i控制
- gc_d = tf([kp*td 0], 1); % d控制
- gc = parallel(parallel(gc_p, gc_i), gc_d); % pid控制器
- gg = feedback(series(g, gc), 1); % 总控制系统
- end
- % 计算pid参数为[kp, ti, td]的闭环控制系统的阶跃响应衰减比
- function delta = getDelta(kp, ti, td)
- % 得到控制系统阶跃响应曲线
- gg = getLoop(kp, ti, td);
- Y = step(gg);
- % 计算衰减比
- V = findpeaks(Y);
- delta = (V(1)-Y(end))/(V(2)-Y(end));
- end