PID控制总结

1.PID介绍

在工业应用中 PID 及其衍生算法是应用最广泛的算法之一,它的应用已经超过一个世纪,母庸质疑它是最经典的一个控制算法,因为经典永不过时。搞自动化行业的就没有不知道PID。它是是当之无愧的万能算法,如果能够熟练掌握PID算法的设计与实现过程,对于一般的研发人员来说,就可以应对大多数问题了。而难能可贵的是,PID 控制算法又是最简单,经典的未必是复杂的,经典的东西常常是简单的,而且是最简单的,想想牛顿的力学三大定律吧,想想爱因斯坦的质能方程吧,何等的简单!简单的不是原始的,简单的也不是落后的,简单到了美的程度。这里附上一张PID控制框图,如下所示:
在这里插入图片描述
从框图中可以看到,PID必定有反馈量,根据反馈和目标值做误差计算,根据误差进行比例、积分、微分运算,最后输出到执行器。P为比例控制,I为积分控制,D为微分控制。
PID的难点从来不在与它的实现,而在于参数的整定,想要PID效果好,参数整定少不了。实际调试PID参数时,如果用一个波形显示的上位机工具,将被控制量通过波形曲线进行显示更加直观的查看调试效果,这样就能更好的观测系统的上升时间、超调量、调节时间,从而能快速的对参数进行整定。

2.PID数学模型

PID的数学模型非常简单,一般的教科书上有两种表达方法,其实都是一样,如下所示。这是数学上的定义,实际使用时需要对其进行离散化后才可方便使用。
为什么要进行离散化呢?
个人理解:从如下PID数学模型中看,它表达的是连续时间域,而单片机等微控制器都是不连续的,采样不连续、代码执行时间等。
离散化后分为位置式PID公式和增量式PID公式。
在这里插入图片描述

3.2位置式PID

3.2公式推导

在这里插入图片描述

3.2 C语言代码实现

typedef struct
{
	float Kp;     //比例系数Proportional
	float Ki;     //积分系数Integral
	float Kd;     //微分系数Derivative
	float Ek;     //当前误差
	float Ek_1;    //上一次误差 e(k-1)
	float Ek_2;    //上上一次误差 e(k-2)
	float Sum;    //累计积分位置
}PID_Param;

PID_Param CatPID;

void PID_Init(void)
{
	CatPID.Kp = 0;
	CatPID.Ki = 0;
	CatPID.Kd = 0;
	CatPID.Ek = 0;
	CatPID.Ek_1 = 0;
	CatPID.Ek_2 = 0;
	CatPID.Sum = 0;
}


float PositionPID_Calc(float TragetValue, float CurrentValue, PID_Param *PID)
{
	float Out;    //输出
	PID->Ek = TragetValue - CurrentValue; //当前偏差
	PID->Sum += PID->Ek;     //累计误差
	Out= PID->Kp * PID->Ek + (PID->Ki * PID->Sum) + PID->Kd * (PID->Ek - PID->Ek_1);  
	PID->Ek_1 = PID->Ek;  //刷新上一次的误差值
	return Out;
}

实际调试和是PID的时候,注意各系数的极性问题以及PID计算停止后清0相关的计算过程值。

4.增量式PID

4.1增量式PID介绍

位置式PID算法计算量较大,比较消耗处理器的资源,从位置式PID算法的公式中可知位置式算法需要很多的历史偏差,所以数据存储的空间比较多,累加求和的数据类型一般都会定义成浮点型,所以比较耗资源。
增量式PID则只需要近期两次的偏差,增量式PID计算出的是应该在当前控制信号上的调整值,如果计算出为正,则增强输出信号;如果计算出为负则减弱输出信号。
如果用Uk-1表示上次的输出控制信号值,那么当前的输出值应该为Uk,△U即为应该输出的增量值;
这两者之间的关系为:
在这里插入图片描述
上式变形得:
在这里插入图片描述

4.2增量式PID公式推导

增量式PID公式可由位置式PID公式推导出来。
当前误差采样后的输出值:
在这里插入图片描述
上一次误差采样后的输出值:
在这里插入图片描述
公式1为:
在这里插入图片描述
公式2为:
在这里插入图片描述
公式1和公式2是等效的,如果想不通就将Uk和Uk-1和替换成如下所示就瞬间明白了。
在这里插入图片描述

4.3 C语言代码实现

typedef struct
{
	 float Kp;     //比例系数Proportional
	 float Ki;     //积分系数Integral
	 float Kd;     //微分系数Derivative
	 float Ek;     //当前误差
	 float Ek_1;    //上一次误差 e(k-1)
	 float Ek_2;    //上上一次误差 e(k-2)
	 float Sum;    //累计积分位置
}PID_Param;

PID_Param CatPID;

void PID_Init(void)
{
	CatPID.Kp = 0;
	CatPID.Ki = 0;
	CatPID.Kd = 0;
	CatPID.Ek = 0;
	CatPID.Ek_1 = 0;
	CatPID.Ek_2 = 0;
	CatPID.Sum = 0;
}

float IncPID_Calc(float TragetValue, float CurrentValue, PID_Param *PID)
{
	float Out;    //输出
	PID->Ek = TragetValue - CurrentValue; //当前偏差
	Out= PID->Kp * PID->Ek -PID->Ki * PID->Ek_1+ PID->Kd * PID->Ek_2;  
	PID->Ek_2 = PID->Ek_1;  //刷新上上一次的误差值
	PID->Ek_1 = PID->Ek;  //刷新上一次的误差值
	return Out;
}

void main()
{
	PID_Init();
	While(1)
	{
	   //增量式PID计算出的应该是在当前控制信号上的增量
	   //所以要累加
	       PIDOut+=IncPID_Calc(TragetValue,CurrentValue,&CatPID);
	}
}

5.PID调试方法

5.1经验试凑法

参数整定找最佳,从小到大顺序查
  先是比例后积分,最后再把微分加
  曲线振荡很频繁,比例度盘要放大
  曲线漂浮绕大湾,比例度盘往小扳
  曲线偏离回复慢,积分时间往下降
  曲线波动周期长,积分时间再加长
  曲线振荡频率快,先把微分降下来
  动差大来波动慢。微分时间应加长
  理想曲线两个波,前高后低4比1
  一看二调多分析,调节质量不会低
调试经验分享:
对于PID调试,最好能用一个相关的波形显示软件将相关的值通过波形进行观察。根据波形分析出超调量、上升时间、调节时间等参数从而快速的进行PID参数的整定。
先调比例系数,将I和D设置成0,慢慢增大P直到系统出现震荡,此时再加入积分环节,慢慢增加积分系数,直到系统无余差。最后再加入微分环节,慢慢增大微分系数,此时加入干扰信号给系统,会发现系统有干扰时调节时间变短,一般的系统不需要加入微分环节,PI调节就足够了。PID调试需要多看多做,一般自己调试2个与PID相关的项目就能对有比较深刻的理解,光看别人写的文章你永远也学不会PID。以上的调试经验只适应位置式PID和增量式PID,你所用到的PID的数学模型不相同的话,以上调试经验则不适用。
评价一个控制系统是否优越,有三个指标:快、准、稳。 即上升时间短、无超调、调节时间短。

5.2 衰减曲线法

(1)4:1衰减曲线法
使系统处于纯比例作用下,在达到稳定时,用改变给定值的办法加入阶跃干扰,观察记录曲线的衰减比,然后逐渐从大到小改变比例度,使出现4:1的衰减比为止,如图5-2-1所示。记下此时的比例度δ。再按表5-2-1的经验公式来确定PID数值。
在这里插入图片描述
在这里插入图片描述

							图5-2-1  4:1衰减曲线法

(2)10:1衰减曲线法
有的过程,4:1衰减仍嫌振荡过强,可采用10:1衰减曲线法。方法同上,得到10:1衰减曲线,记下此时的比例度δ和上升时间T’s,再按表5-2-2的经验公式来确定PID的数值。衰减曲线如图如图5-2-2所示。
在这里插入图片描述
在这里插入图片描述

					图5-2-2  10:1衰减曲线法

采用衰减曲线法必须注意几点:
1)、加给定干扰不能太大,要根据生产操作要求来定,一般在5%左右,也有例外的情况。
2)、必须在工艺参数稳定的情况下才能加给定干扰,否则得不到正确的δ、Ts、和T’s值。
3)、对于反应快的系统,如流量、管道压力和小容量的液位调节等,要在记录纸上严格得到4∶1衰减曲线较困难,一般以被调参数来回波动两次达到稳定,就近似地认为达到4:1衰减过程了。

5.3 临界比例法

先在用纯比例控制,在闭合的调节系统中,从大到小地逐渐地改变调节器的比例度,就会得到一个临界振荡过程,如图5-3-1所示。这时的比例度叫临界比例度δ,周期为临界振荡周期Tk。记下δ和Tk,然后按表5-3-1的经验公式来确定调节器的各参数值。
在这里插入图片描述
在这里插入图片描述

							图5-3-1 临界震荡法

临界比例法在以下两种情况下不能采用:
1.临界比例度过小,因为这时候调节阀很容易处于全开及全关位置,对于工艺生产不利,举例来说,对于一个用燃料油(或瓦斯)加热的炉子,如δ很小,接近双位调节,将一会儿熄火,一会儿烟囱浓烟直冲。
2.工艺上约束条件较严格时,因为这时候如达到等幅振荡,将影响生产的安全运行或者设备损坏。

6.PID算法优化

6.1 积分饱和问题及其解决方法

积分饱和:如果执行机构已到极限位置,仍然不能消除偏差,由于积分的作用,尽管计算PID方程式所得的运算结果继续增大或减小,但执行结构已无相应的动作,控制信号则进入深度饱和区。由于系统长时间无法达到目标值,累计偏差(积分)会变得越来越大,逐渐达到深度饱和的状态,此时我们再设置一个合理范围的目标值,系统就没有办法在短时间内响应了。
影响:饱和引起输出超调,甚至产生震荡,使系统不稳定。
改进方法:遇限削弱积分法、积分分离法、有限偏差法
在这里插入图片描述

							图6-3-1 积分分离法示意图

遇限削弱积分法思路:一旦控制量进入饱和区,则停止进行增大积分的运算。

积分分离法思路:当被控量和给定值偏差大时,取消积分控制,以免超调量过大;当被控量和给定值接近时,积分控制投入,消除静差。

有限偏差法思路:当算出的控制量超出限制范围时,将相应的这一控制量的偏差值作为有效偏差值进行积分,而不是将实际偏差值进行积分。

6.2 对采样值进行滤波

6.2.1 限幅滤波算法

方法解析:
根据经验判断,确定两次采样允许的最大偏差值(设定为A),每次检测到新值时判断。
如果本次值与上次值之差<=A,则本次值有效,
如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。
优点:能有效克服因偶然因素引起的脉冲干扰
缺点:无法抑制那种周期性的干扰,平滑度差

6.2.2 中位值滤波法

方法解析:
连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值
优点:能有效克服因偶然因素引起的波动干扰,对温度、液位等变化缓慢的被测参数有良好的滤波效果
缺点:对流量,速度等快速变化的参数不宜采用

6.2.3 算术平均滤波

方法解析:
连续取N个采样值进行平均运算,N值较大时:信号平滑度较高,但灵敏度较低N值较小时:信号平滑度较低,但灵敏度较高。N值的选取:一般12左右。
优点:适应于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。
缺点:对于测量速度较慢或要求数据计算速度较快的实时控制并不适用,比较浪费RAM

6.2.4 滑动平均滤波法

方法解析:
把连续取N个采样值看成一个队列,队列的长度固定为N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出)。
把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。N值的选取:一般取12左右。
优点:对周期性干扰有良好的抑制作用,平滑度高,适应于高频振荡的系统
缺点:灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差。不易消除由于脉冲干扰所引起的采样值偏差,不适用于脉冲干扰比较严重的场合,浪费RAM

6.2.5 中位值平均滤波法

方法解析:
相当于中位值滤波+算术平均滤波,连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值。
N值的选取:3-14
优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。
缺点:测量速度较慢,和算术平均滤波一样,浪费RAM。

6.2.6 一阶滞后滤波法

方法解析:
取a=0-1之间
本次滤波结果=(1-a)本次采样值+a*上次滤波结果
优点:对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合
缺点:相位滞后,灵敏度低,滞后程度取决于a值的大小,不能消除滤波频率高于采样频率的1/2的干扰信号

6.2.7 加权递推平均滤波法

方法解析:
是对递推平均滤波法的改进,即不同时刻的数据加以不同的权,通常是,越接近当前时刻的数据,权取得越大,给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。
优点:适用于有较大纯滞后时间常数的对象,和采样周期较短的系统
缺点:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号,不能迅速反应系统当前所受干扰的严重程度,滤波效果差。

6.3 变速积分PID控制

思想:是设法改变积分项的累加速度,使其与偏差的大小相对应。偏差大时,积分累加速度慢,积分作用弱;反之,偏差小时,使积分累加速度加快,积分作用增强。
方法:设置一系数 f[E(k)],它是E(k)的函数,当|E(k)|增大时,f 减小,反之则增大。每次采样后,用 f[E(k)] 乘以E(k) ,再进行累加,即:
在这里插入图片描述
优点(与普通PID相比):实现了用比例作用消除大偏差,用积分作用消除小偏差的理想调节特性,从而完全消除了积分饱和现象大大减小了超调量,可以很容易地使系统稳定,改善了调节特品质适应能力强,一些用常规PID控制不理想的过程可以采用此种算法。参数整定容易,各参数间的相互影响小
与积分分离的比较:二者很类似,但调节方式不同。积分分离对积分项采用“开关”控制,而变速积分则是根据误差的大小改变积分项速度,属线性控制。因而,后者调节品质大为提高,是一种新型的PID控制。

6.4 专家PID控制

(1)当|e(k)|> M,时,说明误差的绝对值已经很大。不论误差变化趋势如何,都应考虑控制器按最大值或者最小值输出,已达到迅速调整误差,使误差绝对值以最大速度减小。此时它相当于开环控制。
(2)当e(k )e(k)>0时,说明误差在朝误差绝对值增大方向变化,或误差为某一常值,未发生变化。此时,如果|e(k)|≥M2,说明误差也较大,可考虑由控制器实施较强的控制作用,以达到扭转误差绝对值朝减小方向变化,并迅速减小误差的绝对值。
此时,如果|e(k)|<M2,此时,如果}e{k)|<M2, 说明尽管误差朝绝对值增大方向变化,但误差绝对值本身并不很大,可考虑控制器实施-般的控制作用,只要扭转误差的变化趋势,使其朝误差绝对值减小方向变化。
(3)当e(k)△e(k)<0、△e(k)△e(k - 1)>0或书e(k )= 0时,说明识差的绝对值朝减小的方向变化,或者已经达到平衡状态。此时,可考虑采取保持控制器输出不变。
(4)当e(k)△e(k)<0、 △e(k)△e(k-1)<0时,说明误差处于极值状态。如果此时误差的绝对值较大,即|e(k) >M2,可考虑实施较强的控制作用。
(5)当|e(k)|≤M3 时,说明误差的绝对值很小,此时加入积分,减少稳态误差。
思路:按照设备运行中的各个阶段的情况,即已经提前判断出PID运行过程的情况下可以采用这种方法,即已经得出了精准的模型的情况下。在运行中的各阶段直接采用预定好模型进行PID控制以达到最大效率,这类似数学中的分段函数思想。

6.5 模糊自适应PID控制

随着计算机技术的发展,人们利用人工智能的方法将操作人员的调整经验作为知识存入计算机中,根据现场实际情况,计算机能自动调整PID参数,这样就出现了智能PID控制器。这种控制器把古典的PID控制与先进的专家系统相结合,实现系统的最佳控制。这种控制必须精确地确定对象模型,首先将操作人员( 专家)长期实践积累的经验知识用控制规则模型化,然后运用推理便可对PID参数实现最佳调整。由于操作者经验不易精确描述,控制过程中各种信号量以及评价指标不易定量表示,模糊理论是解决这一问题的有效途径,所以人们运用模糊数学的基本理论和方法,把规则的条件、操作用模糊集表示,并把这些模糊控制规则以及有关信息(如评价指标、初始PID参数等)作为知识存入计算机知识库中,然后计算机根据控制系统的实际响应情况( 即专家系统的输入条件),运用模糊推理,即可自动实现对PID参数的最佳调整,这就是模糊自适应PID控制。模糊自适应PID控制器目前有多种结构形式,但其工作原理基本致。自适应模糊PID挖制器以误差e和误差变化er作为输入,可以满足不同时刻的e和ec对PID参数自整定的要求。利用模糊控制规则在线对PID参数进行修改,便构成了自适应。

6.6 带死区的PID

带死区的PID控制算法思想:系统进入稳态后,偏差值达到一定程度,就进行调节。若是偏差值小于设定的范围,就认为没有偏差。用公式表示如下:
在这里插入图片描述
引入死区控制的的主要目的是消除系统进入稳态后的波动,因为反馈元件的测量误差和干扰的影响,实际系统中反馈元件获得的测量值不会真正稳定在某一个具体的值,而与设定值之间总会存在偏差,而这一偏差并不是系统的真实偏差,引入死区就能较好的消除这一点。
注意:系统在稳态时,若偏差很小,进去死区后,如果偏差置0会造成积分项为0,如是系统存在静差将不能消除,因此需要人为处理这一点。死区的大小对系统的影响是不同的。太小可能达不到预期的效果,而太大则可能对系统的正常变化造成严重滞后,需要根据具体的系统对象来设定。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZuoYoPaPa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值