参数整定要求 通过整定选择合适的参数,首先要保证系统稳定,这时最基本的要求 在热工生产过程中,通常要求控制系统有一定稳定裕度,即要求过程有一定的衰减比,一般为4:1~10:1 在保证稳定的前提下,要求控制过程有一定的快速性和准确性.所谓快速性就是要求控制系统的动态偏差(余差)尽量的小,而快速性就是要求控制过程的时间尽可能地短. 常用整定方法 当闭环特征方程为二阶时,可以通过理论计算求出各参数与衰减比的对应关系 如上图: 被控对象的传递函数为 ,采用比例控制器为,求解合适的比例带δ值,使得系统衰减比为4:1; 解: 1.求得系统闭环传递函数为: 2. 已知衰减率φ为: 系统闭环特征方程为: = =0.665=66.5% 工程整定方法 A 经验法(试凑法) 试凑法的整定步骤如下所述: 1)先采用比例作用,设置积分时间T1=∞微分时间TD=0,根据经验设置比例带δ,将系统投入闭环运行,稳定后做阶跃扰动试验,改变比例带δ值,使被调量的阶跃响应曲线出现4:1衰减震荡,记录此时的比例带δ 2)比例积分作用: 在1)的基础上,首先将δ增大10%~20%,做阶跃扰动试验,然后将积分时间Ti 由大到小的变化,直到得到4:1衰减曲线为止.先增加比例带的原因是加入积分后,系统稳定性,比原来单纯比例调节时要降低,增加δ补偿加积分作用后而引起得稳定性的降低. 3)积分时间保持不变,加入比例带,观察控制过程有无改善,如有改善则继续调整,直到满意为止.否则,将原比例带减小一些,再调整积分时间,力求改善控制过程.如此反复试凑,直到找到满意的比例带和积分时间为止. 4)最后再加入微分作用,将微分时间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
复制代码
下图是四步整定之后,闭环控制系统的阶跃响应曲线: 由图中曲线可知,每一步整定完成之后,闭环控制系统的准确性和快速性都略有上升. B 临界比例带法(边界稳定法) 临界比例带法的应用较为广泛,将控制器设置为纯比例作用,将系统自动投入运行并将比例带由大到小进行改变,直到产生等幅振荡为止,此时控制系统处于边界稳定状态,记录下此刻的比例带 和振荡周期Tcr ,然后根据下表中的经验公式进行计算,算出控制器的各个参数. | | | | | 2 | | | | 2.2 | | | | | | |
具体步骤如下所述: 1) 将控制器的积分时间置于最大,即T1=∞,微分时间TD=0,比例带δ置于一个较大的数值 2) 将控制系统投入闭环运行,待系统稳定之后,逐步减小比例带,直到系统出现等幅振荡,记录此时的比例带δcr 和振荡周期Tcr , 3) 将比例带δcr 和振荡周期Tcr 代入上表,计算控制系统各个参数. 根据上述步骤写出代码如下: - % 初始pid参数
- kp=1; ti=1e32; td=1e-32;
- % getDelta(kp, ti, td)
- % figure
- % step(getLoop(kp, ti, td))
- history(1, :) = [kp, ti, td];
- % 整定p, 调整衰减比接近1:1
- if getDelta(kp, ti, td) > 1
- while getDelta(kp, ti, td) > 1
- % getDelta([kp, ti, td])
- kp = kp*1.01; % kp增大,衰减比减小
- end
- elseif getDelta(kp, ti, td) < 1
- while getDelta(kp, ti, td) < 1
- % getDelta([kp, ti, td])
- kp = kp*0.99; % kp增大,衰减比减小
- end
- end
- % 计算临界比例带
- [Y, T] = step(getLoop(kp, ti, td));
- [pks, locs] = findpeaks(Y);
- tcr = T(locs(2))-T(locs(1));
- % 计算对应的三种控制参数
- % history(1, :) = [kp, ti, td];
- % history(2, :) = [kp/2, 1e32, 1e-32];
- % history(3, :) = [kp/2.2, 0.85*tcr, 1e-32];
- history(4, :) = [kp/1.7, 0.5*tcr, 0.125*tcr];
- % 绘制图片
- % step(getLoop(history(2, :))); hold on;
- % step(getLoop(history(3, :))); hold on;
- figure
- step(getLoop(history(1, 1),history(1, 2),history(1, 3))); hold on;
- step(getLoop(history(4, 1),history(4, 2),history(4, 3))); hold on;
- legend('initial respond','respond after setting pid')
- 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
复制代码
对上边的系统进行整定,我们先将系统比例带设置由大到小,直到系统等幅振荡.此时闭环系统阶跃响应如下: (num=100;i=0; for sigma=0:1:0 den=[0.00227 100*sigma*0.1 100]; damp(den); sys=tf(num,den); i=i+2; step(sys,0.1) hold on end grid hold off lab1='|?=0'; text(2,8,lab1); ) 因为我们是模拟实际情况查找比例带,而不是由公式对临界比例带进行计算,因此此时系统的衰减比实际上为0.9992,而非1. 代入上边表格数据时,我发现了一个bug,按照上面表格进行计算,闭环系统采用p控制,pi控制都会导致系统闭环不稳定,而采用pid控制能使系统闭环稳定.整定后的系统的快速性大为改善,然而其准确性略有下降. 临界比例带法(边界稳定法) 如果在生产过程中不允许出现等幅振荡,则只能退而求其次,采用衰减曲线法.我们只能退而求其次,选择衰减曲线法,将上边方法中的等幅振荡过程改为4:1震荡过程.其具体步骤与上边临界比例带法类似如下: 1) 设置控制器的积分时间Ti=∞,微分时间TD=0,比例带δ置于较大的数值 2) 将系统投入闭环运行,待数值稳定之后,做阶跃扰动试验,观察控制过程,若过渡时间衰减率φ大于要求的数值,则应逐步减小比例带值,直到系统过度曲线出现φ=0.75或φ=0.9为止.记录此时的比例带δs ,在φ=0.75时的衰减曲线上求取衰减周期Ts ,或在φ=0.9的衰减曲线上求取上升时间tr 3) 将比例带δ\deltaδ和振荡周期TTT代入上表,计算控制系统各个参数 对于衰减率φ=0.75\varphi=0.75φ=0.75的情况,其实现代码如下: - % 初始pid参数
- % 初始pid参数
- kp=1; ti=1e32; td=1e-32;
- history(1, :) = [kp, ti, td]; % 记录初始值
- % 整定p, 调整衰减比接近4:1
- if getDelta(kp, ti, td)>4
- while getDelta(kp, ti, td)>4
- % getDelta([kp, ti, td])
- kp = kp*1.01; % kp增大,衰减比减小
- end
- elseif getDelta(kp, ti, td)<4
- while getDelta(kp, ti, td)<4
- % getDelta([kp, ti, td])
- kp = kp*0.99; % kp增大,衰减比减小
- end
- end
- % 计算临界比例带
- [Y, T] = step(getLoop(kp, ti, td));
- [pks, locs] = findpeaks(Y);
- ts = T(locs(2))-T(locs(1));
- % 记录不同比值
- history(2, :) = [kp, 1e32, 1e-32]; % p控制
- history(3, :) = [kp/1.2, 0.5*ts, 1e-32]; % pi控制
- history(4, :) = [kp/0.8, 0.3*ts, 0.1*ts]; % pid控制
- % 绘图
- figure
- step(getLoop(history(1, 1),history(1, 2),history(1, 3))); hold on;
- step(getLoop(history(2, 1),history(2, 2),history(2, 3))); hold on;
- step(getLoop(history(3, 1),history(3, 2),history(3, 3))); hold on;
- step(getLoop(history(4, 1),history(4, 2),history(4, 3))); hold on;
- legend('initial respond','respond after setting p','respond after setting pi','respond after setting pid')
- 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
复制代码 将所得到的结果绘制在坐标轴上,得到图像如下. 由此可见,在引入积分控制后,控制系统的准确度有所下降.但加入pid控制之后,总体的控制效果比初始情况大为改善. 对于衰减率φ=0.9\varphi=0.9φ=0.9的情况下,其实现代码如下: - % 初始pid参数
- kp=1; ti=1e32; td=1e-32;
- history(1, :) = [kp, ti, td]; % 记录初始值
- % 整定p, 调整衰减比接近4:1
- if getDelta(kp, ti, td)>10
- while getDelta(kp, ti, td)>10
- % getDelta([kp, ti, td])
- kp = kp*1.01; % kp增大,衰减比减小
- end
- elseif getDelta(kp, ti, td)<10
- while getDelta(kp, ti, td)<10
- % getDelta([kp, ti, td])
- kp = kp*0.99; % kp增大,衰减比减小
- end
- end
- % 计算临界比例带
- [Y, T] = step(getLoop(kp, ti, td));
- [pks, locs] = findpeaks(Y);
- ts = T(locs(2))-T(locs(1));
- % 记录不同比值
- history(2, :) = [kp, 1e32, 1e-32]; % p控制
- history(3, :) = [kp/1.2, 0.5*ts, 1e-32]; % pi控制
- history(4, :) = [kp/0.8, 0.3*ts, 0.1*ts]; % pid控制
- % 绘图
- figure
- step(getLoop(history(1, 1),history(1, 2),history(1, 3))); hold on;
- step(getLoop(history(2, 1),history(2, 2),history(2, 3))); hold on;
- step(getLoop(history(3, 1),history(3, 2),history(3, 3))); hold on;
- step(getLoop(history(4, 1),history(4, 2),history(4, 3))); hold on;
- legend('initial respond','respond after setting p','respond after setting pi','respond after setting pid')
- 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
复制代码 将所得到的结果绘制在坐标轴上,得到图像如下. 我们得到的结果与衰减率φ=0.75\varphi=0.75φ=0.75的情况类似,得到结论: 在引入积分控制后,控制系统的准确度有所下降.但加入pid控制之后,总体的控制效果比初始情况大为改善. D响应曲线法(动态特性参数法) 前面三种方法都是针对系统的闭环特性进行整定,而响应曲线法是根据系统的开环状态下,通过阶跃扰动试验得到pid控制的各种参数. 下面是响应曲线法的执行步骤: 1) 给对象一个阶跃输入,记录其输出. 2) 判断对象是否有自平衡能力: 2.1)若对象由自平衡能力,过响应曲线拐点P作切线交稳态值渐近线y(∞)A点,交时间轴于C点,过直线段上任意一点A作时间垂线并交于B点,则? 2.2) 若对象无自平衡能力,做响应曲线渐近线交时间轴于C,过直线段上任一点A做时间垂线并交于B,则 ? 3) 查下表,确定控制器的整定参数 代码如下: % 初始化开环系统 g = tf(25, [80 24 1]); [Y, T] = step(g); % 寻找拐点P及其斜率 [val, minindex] = min(diff(Y, 2)); PX = T(minindex); PY = val; k = (Y(minindex+1) - Y(minindex))/(T(minindex+1) - T(minindex)); % 找到点C CX = PX - PY/k; CY = 0; AY = Y(end); AX = PX + (AY - PY) / k; % 计算 tau,epsilon tau = CX; epsilon = AY / (AX - CX); % 记录pid参数 history(1, :) = [1, 1e32, 1e-32]; % 不加pid控制 history(2, :) = [epsilon*tau, 1e32, 1e-32]; % p控制 history(3, :) = [epsilon*tau, 3.3*tau, 1e-32]; % pi控制 history(4, :) = [epsilon*tau, 2*tau, 0.5*tau]; % pid控制 figure step(getLoop(history(1, 1),history(1, 2),history(1, 3))); hold on; step(getLoop(history(2, 1),history(2, 2),history(2, 3))); hold on; step(getLoop(history(3, 1),history(3, 2),history(3, 3))); hold on; step(getLoop(history(4, 1),history(4, 2),history(4, 3))); hold on; legend('initial respond','respond after setting p','respond after setting pi','respond after setting pid'); 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 执行上述代码,我们得到结果如下: 由上图可见,p控制,pi控制的效果并不是很好,但是引入pid控制之后,系统的动态特性大为改善,这时因为我们所选的被控对象的惯性较大. 各种整定方法的总结与比较 下面对四种工程整定方法做出总结并加以比较,在本次实验中,我们共使用了四种整定方法: 1) 经验法: 花费时间长,难以总结出一般规律 2) 临界比例带法: 方法简单且易用,但是实际情况下难以实现,且整定后的系统容易发生不稳定振荡; 3) 衰减曲线法: 衰减曲线法作为临界比例带法的改进,方法较简单,且在实际情况下有条件实现,但是在实际整定过程中难以实现完美的4:1衰减模型; 4) 响应曲线法: 简单省时,可以直接通过开环特性整定闭环系统,但是计算误差较大. 在实际的编程中,我们发现各种程序的运行效率由高到低如下: 响应曲线法>临界比例带法>衰减曲线法>经验法.经验法中因为需要大量试凑,所以程序的运行时间实在太长,且我这个小破电脑还动不动死机; 在临界比例带正定方法的实现过程中,出现了系统不稳定,因此我们在这里对pid控制方法的稳定想加以总结: 5) P控制: 比例控制的放大系数Kp大小应适当. 5.1) 若Kp 过小,则控制通道难以屏蔽干扰通道的效果,使得总体上的控制效果较差. 5.2) 若Kp 过大,则系统容易出现不稳定震荡; 6) PI控制: 引入积分控制,控制系统的稳定性会下降.因此我们在试凑法中整定Ti 之前要适当增加比例带δ; 7) PID控制: 引入微分控制后,系统的稳定性增加,因此可以适当降低比例带δ。
以上的Word格式文档51黑下载地址: |