先贴出代码,再讲解原理:
/* 定义PI值 */
#define KP 2048L
#define KI 136L
int16 Delta = 0; /* 差值 */
int32 AdjustVal = 0; /* 调节量 */
static int16 DeltaPrev = 0; /* 前一次差值 */
当然,实际调节中,会有一个输入量InputVal和一个目标值TargetVal.
Delta = TargetVal - InputVal;
AdjustVal = (int32)KP * (Delta - DeltaPrev)>>12;
AdjustVal += ((int32)KI * Delta >> 12);
DeltaPrev = Delta;
InputVal += AdjustVal;
P参数越大比例作用越强,动态响应越快,消除误差的能力越强。但实际系统是有惯性的,控制输出变化后,实际PV值变化还需等待一段时间才会缓慢变化。由于实际系统是有惯性的,比例作用不宜太强,比例作用太强会引起系统震荡不稳定。
比例作用的输出与误差的大小成正比,误差越大,输出越大,误差越小,输出越小,误差为零,输出为零。由于没有误差时输出为零,因此比例调节不可能完全消除误差,不可能使被控的PV值达到给定值。必须存在一个稳定的误差,以维持一个稳定的输出,才能使系统的PV值保持稳定。这就是通常所说的比例作用是有差调节,是有静差的,加强比例作用只能减少静差,不能消除静差(静差:即静态误差,也称稳态误差)。为了消除静差必须引入积分作用,积分作用可以消除静差,以使被控的PV值最后与给定值一致。引进积分作用的目的也就是为了消除静差,使PV值达到给定值,并保持一致。
积分作用消除静差的原理是,只要有误差存在,就对误差进行积分,使输出继续增大或减小,一致到误差为零,积分停止,输出不再变化,系统的PV值保持稳定,PV值等于SP值,达到无差调节的效果。
但由于实际系统是有惯性的,输出变化后,PV值不会马上变化,须等待一段时间才缓慢变化,因此积分的快慢必须与实际系统的惯性相匹配,惯性大、积分作用就应该弱,积分时间就应该大些,反之亦然。如果积分作用太强,积分输出变化过快,就会引起积分过头的现象,产生积分超调和震荡。通常参数也是由大往小调,即积分作用由小往大调,观察系统响应以能达到快速消除误差,达到给定值,又不引起震荡为准。
在实际调试中,只能先大致设定一个经验值,然后根据调节效果修改。
对于温度系数:P(%)20--60 I 3--10
对于流量系统:P(%)40--100 I 0.1--1
对于压力系统:P(%)30--70 I 0.4--3
对于液位系统:P(%)20--80 I 1--5
参数整定找最佳,从小到大顺序查
先是比例后积分,最后再把微分加
曲线震荡很频繁,比例度盘要放大
曲线漂浮绕大弯,比例度盘往小扳
曲线偏离回复慢,积分时间往小降
曲线波动周期长,积分时间再加长
曲线震荡频率快,先把微分降下来
动差大来波动慢,微分时间应加长
理想曲线两个波,前高后低4比1
一看二调多分析,调节质量不会低