PID 控制器
原文见 https://zju-helloworld.github.io/Wiki/
转载存档,仅供个人学习所用,All Credits to ZJU-Hello World ZhouShichan .
标准 PID¶
PID(Proportional-Integral-Derivative)控制器是一种线性控制器,根据被控对象给定值 \(r(t)\) 和实际值 \(y(t)\) 的控制偏差
构成控制律
或以传递函数表示
其中积分分量能够提升系统的稳态性能;微分分量能够改善系统的动态性能。
在数字 PID 控制中,使用的是离散化的 PID 控制器。在模拟 PID 的理论基础上,以一系列采样时刻点 \(kT\) 代表连续时间 \(t\),以矩形法数值积分近似代替积分,以一阶后向差分近似替代微分,可得离散 PID 表达式
在标准的数字 PID 控制器的基础上,还可以引入一系列优化算法,形成非标准控制算法,以改善系统品质,满足不同控制系统的需要。
PID 优化¶
积分项优化¶
无扰动操作(Bumpless Operation)¶
无扰动操作包括参数初始化过程和变参数的情况。考虑在控制器工作过程中改变积分增益参数,可能引起输出的较大变化,不利于控制。因此将积分项改进为积分增益与误差乘积的累积,而不是误差累积后再乘以积分增益。积分项表示为:
梯形积分(Trapezoidal Rule)¶
为尽量减小余差,提高积分项的运算精度,可将矩形积分改为梯形积分。积分项表示为:
抗积分饱和(Anti-windup)¶
积分饱和现象指若系统存在一个方向的偏差,控制器输出由于积分作用的不断累加而持续增大,若超出执行机构正常运行范围便进入了饱和区。一旦系统出现反向偏差,控制器输出逐渐从饱和区退出,进入饱和区越深则退出所需时间越长。在这段时间内,执行机构仍停留在极限位置,而不能随偏差反向立即做出相应的改变,此时将造成控制性能恶化。抗积分饱和法在计算控制器输出 \(u(k)\) 时,首先判断上一时刻 \(u(k-1)\) 是否已超出限制范围:若 \(u(k-1) > \epsilon_u\),只累加负偏差;若 \(u(k-1) < \epsilon_l\),只累加正偏差。积分项表示为:
其中阈值区间 \([\epsilon_l,\epsilon_u]\) 根据实际情况人为指定。
积分分离(Integration Separation)¶
积分环节的作用主要为消除静差,提高控制精度。但在短时间系统输出产生较大偏差时,可能会造成积分过度积累,使控制量过大,引起系统超调甚至振荡。此时需要引入积分分离,当被控量与给定值偏差较大时,取消积分作用;接近时引入积分控制。积分项表示为:
其中 \(t_0\) 表示引入积分控制的时刻,阈值区间 \([\epsilon_l,\epsilon_u]\) 根据实际情况人为指定。
变速积分(Changing Rate)¶
基于积分分离优化的思想,根据系统偏差大小改变积分的速度,偏差越大,积分越慢,反之则越快,形成连续的变化过程。为此,设置系数 \(f[e(k)]\),当 \(|e(k)|\) 增大时,\(f\) 减小,反之增大,其值在 \([0,1]\) 变化。积分项表示为:
系数 \(f\) 与当前偏差 \(e(k)\) 的关系可以是线性的,可设为
其中阈值 \(0 \le \epsilon_l < \epsilon_u\) 根据实际情况人为指定。
微分项优化¶
只对输出微分(Derivative of the process variable)¶
为避免由于给定值频繁升降(尤其是阶跃)而引起的系统振荡,可采用只对输出微分的优化算法,其特点是只对系统输出进行微分。这样,在改变给定值时,微分项输出仅与被控量的变化相关,而这种变化通常是比较缓和的,从而能够明显改善系统的动态特性。此方案也称为 “微分先行” 。
简单的离散形式优化的微分项表示为:
也可以通过权重值将误差微分和输出微分结合起来:
其中 \(w_0 \in [0,1]\)。
微分滤波(Derivative Filter)¶
微分项可改善系统的动态特性,但也易引进高频干扰,在误差扰动突变时尤其显出微分项的不足。因此,可以在控制算法中加入一阶惯性环节(低通滤波器),可使系统性能得到改善。可将滤波器直接加在微分环节上或控制器输出上。此方案也称为“不完全微分”。
事实上,还可以针对系统的频域特性设计合适的滤波器,这里不做更深入的探究。
对微分环节输出进行一阶滤波,微分项表示为:
其中系数 \(w_0\in [0,1]\) 和阈值区间 \([\epsilon_l,\epsilon_u]\) 根据实际情况人为指定。
其他优化¶
时间间隔自动采样(Automatic Time Interval Sampling)¶
理论上离散 PID 的采样时间间隔是一致的,但实际应用中,由于资源有限或任务过重,PID 每次计算之间的时间间隔可能不是一致的。因此,在调用 PID 进行计算时,将自动获取和记录计算时刻,来计算每次的采样间隔 \(T_i\) ,并用于积分项计算和微分项计算。
角度最小差值(Period-Sub)¶
由于角度是周期性的,所以从角度 \(A\) 到角度 \(B\) 可以有两种路径,两种路径往往一长一短,其中较短路径是令人感兴趣的。由于角度分弧度值和角度值以及其周期性的特性,这种最短路径特性可以扩大到任意周期上。因此,周期性由圆来代表。周期的大小用圆上刻度来表示,当周期大小为0,即圆上没有刻度时,采用直接相减的方式。
对于角度的控制,需要考虑是否选择最短的变换路径。在 PID 的计算过程中,这一点可以通过更改误差值 \(e(j)\) 的计算方式来实现:
带死区(Dead Band)¶
为避免控制作用过于频繁,消除由于频繁动作所引起的振荡,必要时可采用带死区的 PID 控制算法,即判断控制偏差是否小于给定阈值,若小于则不输出。当阈值过大时,在阈值点的输出会从 0 突变,对输出造成干扰。更一般的,给定阈值区间 \([\epsilon_l,\epsilon_u]\),当控制偏差在阈值区间之外时,正常输出;当控制偏差在 \([\epsilon_l+ \delta, \epsilon_u -\delta)\) 时,输出为 \(({\epsilon_l+\epsilon_u})/{2}\);当控制偏差在 \([\epsilon_l,\epsilon_l+ \delta) \cup [\epsilon_u -\delta, \epsilon_u]\) 时,进行插值处理。控制器输出表示如下:
其中阈值区间 \([\epsilon_l, \epsilon_u]\) 根据实际情况人为指定,\(\delta=(\epsilon_u-\epsilon_l)/10\)。
给定值平滑(Setpoint Ramping)¶
当给定值出现较大的阶跃变化,很容易引起超调。使用线性斜坡函数或一阶滤波为给定值安排过渡过程,使其从其旧值逐渐变化到新值,以避免阶跃变化产生的不连续性,进而使对象运行平稳,适用于高精度伺服系统的位置跟踪。
实际应用中,一般给出最大阶跃范围。若超出该范围,对给定值进行一阶滤波处理。给定值表示如下:
其中阈值 \(\epsilon_2\) 及系数 \(w_1\in (0,1]\) 根据实际情况人为指定。
前馈校正(Feed-forward)¶
在前馈控制(开环)中考虑系统的已知信息,再将输出加到 PID 控制器(闭环)的控制输出,形成复合校正,能够进一步提升整体的系统性能。前馈校正通路由于不受反馈的影响,不会造成系统的振荡,从而能够在不影响稳定性的情况下改善系统的响应。前馈量通常可以单独提供控制器输出的主要部分;PID 控制器则用来补偿给定值和实际值之间的误差。
前馈量依可量测扰动或给定量来产生,构成按扰动补偿和按输入补偿两种复合控制形式。


我们重点关注按输入补偿的复合控制系统设计。由上图 (b) ,系统输出为
如果选择前馈补偿装置传函 \(G_n(s)=\frac1{G_2(s)}\),则有
使得系统输出复现输入,具有理想的时间响应特性。实际这种全补偿难以实现,因此一般采用部分补偿,常用的方法有取输入信号的一阶导数作为前馈补偿信号,即:
实际中由于控制器工作频率可能高于给定信号频率,此时若采用后向差分则不能获得平滑的前馈量。可以考虑采用跟踪微分器。