嵌入式软件算法之 PID 闭环控制原理

前言
在机器人、工业控制等领域经常遇到需要目标控制的问题,如加热至目标温度、控制气压达到目标值或者是机器人关节转角位置/速度控制等。这时候就要加入传感器引入反馈量进行正负反馈调节,从而提高与控制目标的逼近程度。实现此类自动控制就要添加对反馈量的引入处理,嵌入式自动控制领域中最常用最容易实现的便是 PID 反馈控制,常见的平衡车、无人机、空调、热水器等均基于 PID 控制来实现。
一、嵌入式 PID 概述
1.1 闭环控制原理
闭环控制是相对于开环控制而言的,开环控制仅有单输入单输出,无反馈信号,常用于控制精度不高的场合。(当然对于本身输入输出线性相关性极好,开环精度高也是可以,比如高精度的步进电机,一个脉冲一步也是可以满足使用要求的但成本要大大提高)。

闭环系统通过增加输出的反馈实现对输入的差分控制,从而实现输出的自动调节,提高控制精度。

二、PID 实现原理
2.1 PID 适用场景
PID 反馈控制适用于线性控制系统,即输入量与输出量间有较好的线性相关性,比如温控系统,输入电压幅值经过系统转化为热量温度,大致存在一种对应关系,一个电压幅值对应一种温度。常用的 PID 控制场景有:电机位置控制、电机速度控制、电机扭矩力控、温控系统、气动/液压流速及压力控制系统、以及组合起来的姿态控制,运动控制等等。
2.2 PID 基本原理

PID 相当于三个系数—比例系数 Kp/积分系数 Ki/微分系数 Kd,Kp 直接作用于目标值与实际值的差值—比例控制,Ki 作用于从开始控制到当前每次目标值与实际值差值的和—积分控制,Kd 作用于上一次差值与当前差值的二次差值—微分控制。
根据系数的作用对象可以理解为比例控制作用于当前的误差,积分控制作用于过去的累计误差,微分控制作用于误差变化率起到预测变化趋势的作用,因此 PID 控制理论上对反馈信号现在、过去、将来的数据进行了融合。
2.3 增量式 PID 与绝对式 PID
PID 模型仅仅是理论上的,具体实现控制还需要控制逻辑来实现,因此转换成代码会有两种处理方式去实现—增量式与绝对式。绝对式 PID,又叫做位置式 PID,实现方式与理论模型一致,比较好理解:

增量式则是将 每一次的输出控制量分成上一次的控制量以及相对上一次增加的增量:

理论上两种效果是一致的,但从代码实现上还是有些区别的:位置式的将对过去的误差量信息放在了积分控制作用里,而增量式则是放在了上一次控制量中;增量式体现了迭代的思想,有点类似等差数列,因此增量式只对输出控制量做最值限制,而位置式则需要对输出以及积分项对应的累计误差做限制,防止积分超限;位置式不受限于上一次控制量的大小,因此实时性高,容易受当前的干扰影响,对应的增量式一部分控制量大小受上一次控制量大小影响,因此具备一定的迟滞性,换个方向理解就是对当前的干扰不够敏感,稳定性强,通过增量式公式可以看出,增量式 PID 中 Kp 作用于误差变化率相当于位置式中的 Kd,增量式中的 Ki 作用于当前误差相当于位置式中的 Kp,增量式中的 Kd 作用于误差变化率的二次变化率相当于新的量类似于加速度的样子;增量式 PID 不能实时修改 PID 参数,受限于增量式的理论公式,每一次中途修改参数会造成公式结构破坏,第二次从初始状态到目标转台的控制无法准确复现当前参数的效果,而位置式则在达到稳定时直接修改参数查看效果,因此对于响应快的控制系统想要实现快速多组参数调整或者是实现阶梯分段式控制,最好使用位置式,还有一点位置式对 PID 参数的拆分使用比较方便,如 PI 控制/PD 控制。
三、PID 调参
常用的调参数方法有参数整定和经验调参。
3.1 参数整定
参数整定的意思就是根据一些经验公式计算出 PID 参数。常用的是 ZN 整定,从网上查找的资料发现有两种方式整定:临界比例度法,阶跃激励响应。基本原理都可理解为获取系统参数特性从而根据经验公式计算出参数,区别就是获取系统参数的实现方法不一样。
3.1.1 临界比例度法
临界比例度法:通过调节系数 Kp 使得系统周期性震荡,然后根据震荡周期以及增益通过经验公式表得出最终的 PID 系数。通过以下两步即可得到:
1.调整 Kp 使得系统产生等幅震荡。这个过程保持 Ki 和 Kd 为零,由零逐渐增大 Kp 使得系统产生等幅震荡,刚好产生震荡的 Kp 称为临界比例增益 Kpr,临界比例度为 1/Kpr,震荡周期为两个波峰的间距 Tr。这个过程可以理解为提取系统闭环控制的一个临界系统特性,即描述一个等幅震荡曲线标的特性用振幅(用增益 Kpr)以及周期(增益 Tr)来表示。

2.根据经验公式计算出 PID 系数。

3.1.2 阶跃激励响应
阶跃激励响应:给控制对象一个瞬时由 0 变为 1 的阶跃信号从而得到反馈的响应曲线,通过响应曲线的切线找到斜率最大的点—此处对应的切线为转折点切线,切线与 0 值以及目标值水平线的交点可以提取出系统特性参数 L 和 T,然后再通过经验公式计算出 PID 系统。步骤如下:
1.给阶跃激励信号得到阶跃响应曲线。给控制系统一个由 0 到恒定值的信号,如温控系统,温控 PWM 波占空比由 0 变为 50%,然后记录温度变化曲线。

2.根据经验公式计算出 PID 系数

3.2 经验方法
3.2.1 确定控制周期
控制周期与系统响应有关(控制量输入后,反馈量多久能体现控制效果),响应快控制周期就要短,响应慢控制周期相应慢一点就好,理论上越快控制精度越高,但也越占用 CPU 资源。大概的控制周期应该符合采样定律,控制周期要小于一半的响应时间。可以这样大致定出控制周期:给一个固定占空比的 PWM 波,实际测量多久能第一次到达稳定的目标值,实际的控制周期就要小于这个时间的一半。

以温控为例,假如给 30%的占空比,4 秒达到稳定温度 60 度,第一次到达 60 度用时 1 秒,PID 控制周期定在 500ms。
3.2.2 确定系数极性
确定极性就是确定系数的正负,取决于系统的是正反馈还是负反馈。
P 的极性:比例系数作用于误差,即目标值减去反馈值,负反馈时 P 的极性为正值,使得反馈值大于目标值时起到降低控制量的作用,正反馈时 P 的极性为负。负反馈随处可见如温控,偏差过大减小控制量,正反馈如平衡小车姿态控制,当倾斜角变大时,控制小车速度变大使得倾斜角变小。
I 的极性:积分系数作用于累计误差,于 P 的极性一致,正反馈为正值,负反馈为负值。
D 的极性:微分系数作用于误差变化率,一般微分项起到阻尼即阻止误差变化的作用,因此,D 的极性一般为负值,使得实际反馈值趋于斜率为零的直线。
3.2.3 确定系数数量级
P 的数量级:首先是测量的反馈量,以 PWM 控温为例子,温度反馈 0-200,对应 PWM 占空比 0-100,PID 的输出直接用于控制 PWM 的占空比,因此数量级在(100-0)/(200-0)=0.5 左右,调试时可直接尝试十位/个位/小数点后一两位的数量级系数进行初调。
I 的数量级:I 的作用主要与时间有关,时间越长 I 的作用越明显,实际控制中,I 是一直根据时间存在的,因此 I 的数量级要小一些一般可从小于 P 十倍到数量级进行调试。
D 的数量级:D 的数量级与系统响应有关,响应越快,误差变化率容易越大,因此大概的数量级可参照控制周期确定,前边已经确定了控制周期为 500ms,通过比对大概找到 500ms 内误差的最大值为 30,假定此时要以最大速度关闭它及将占空比从 30%降为 0,初步确定数量级大致为误差最大值 30/占空比 30=1,因此基本上在个位十位小数点后一位确定粗调范围。
3.2.4 调整参数
在前边确定数量级后就需要进行微调了。
下面以温控为例:
先调比例系数
再调微分系数
再调积分系数
加热时很迅速就达到目标值,但是温度过冲很大:
比例系数太大,致使在未到达设定温度前加温比例过高;
微分系数过小,致使对受控对象的变化不敏感。
加温经常达不到目标值,小于目标值的时间较多:
比例系数过小,加温比例不够;
积分系数过小,对恒偏差补偿不足。
基本上能够在控制目标上,但上下偏差大,经常波动:
微分系数过小,对变化反应不够快;
积分系数过大,使微分反应被淹没钝化;
设定的基本定时周期过短,加热没有来得及传到测温点。
受工作环境影响较大,在稍有变动时就会引起温度的波动:
微分系数多小,对变化反应不够快,不能及时反应;
设定的基本控制周期多长,不能及时修正。
四、PID 组合用法
4.1 拆分用法
拆分用法就是单独的用 P、I、D 系数去控制或者组合使用 PI/PD/ID。
单独使用 P:一般不单独使用 P,单独使用会造成围绕目标值大幅震荡的效果,常用场合类似电机控制速度如:距离目标位置越来越近时控制速度越来越小。控制量与反馈量无直接关系。
单独使用 I:这个常用,单独使用系数越小控制精度越高,因为积分系数作用在累计误差所以当前控制量会受到前边的误差影响,具有迟滞效果,一般用作积分跟随器,对响应较慢的如温控系统初调参数可以使用。单独使用 D:D 具有阻尼的效果,阻止误差变化,具备维持原控制效果的特性,因此用来控制稳定性,使得控制曲线更加趋于直线平滑。一般不单独使用,因为只能保持稳定,不能保证是目标值附近的稳定。
PI 组合:一般用于位置控制,单独使用 I 时初始控制缓慢,组合 P 使用能提升控制曲线超调前的斜率,比较常用。
PD 组合:一般用于速度控制,电机控速常用,可理解为响应+稳定组合。
ID 组合:不常用,缺乏 P 控制前期很慢,如果分段控制,在到达目标值前采用其它手段控制使得实际反馈在目标值附近,然后使用 ID 控制比较可取。
4.2 串联 PID
PID 的串联使用如下图所示,机器人关节转角的电机控制既要速度又要位置控制,如果涉及到力控,还需要加入电流环。常用于两个控制量之间有相关性。

4.3 并联 PID
PID 的并联使用如下图所示,姿态角度与速度间无相关性,各自单独算一路控制信号引入其中。

五、PID 进阶
5.1 模糊 PID
PID 参数一般固定下来后不变,对于单一控制目标可能当前参数控制效果较好,但更换目标值后控制效果变差,重新调参数后得到另外一组 PID 系数。将不同组 PID 系数合并起来 P/I/D 系数各组便会有一个大致的区间,通过引入误差的变化率来决定当前时刻采用哪一个细分区间范围内的 PID 参数,从而实现一种 PID 参数动态调整的效果。这种控制效果常用在控制目标值范围较大的场合,如温控范围很广 100 度到 3000 度。
5.2 基于粒子群的 PID 参数寻优
粒子群优化算法是一种基于鸟类捕食机理而模仿产生的一种仿生进化算法,使用效果就是从一堆 PID 参数中寻找到最优的那个参数。与 ZN 整定不同,这里是在一堆参数中寻优,而 ZN 整定则是提取系统特性根据经验公式计算出 PID 参数,这里把粒子群列到 PID 的高级用法里是因为粒子群实现起来简单方便,相对于遗传、神经网络等一般的单片机都可以简单跑跑。
六、注意事项
不要一味追求高精度 PID 调参,满足使用要求即可,精度越高调试时间越多,闭环控制系统的稳定性会下降。可尝试针对不同控制的特性采用不同 PID 组合,如 PI/PD 等。
ZN 整定只能算初步参数,不一定完全计算出想要的效果,实际调参过程还是需要取了解一下进行微调。
对于超调大,稳定后精度很高的控制,可以做分段控制,未达目标值前采用固定的输出控制,反馈量接近目标值时再开启 PID 自动控制。
可尝试高阶的 PID 用法,很多项目场合会提高产品的稳定性。
总结
基本上调参无很大的捷径可走,都需要在稍微理解的基础上进行大量的调试。嵌入式中的 PID 只能多调试,多打印记录 PID 的系数以及对应 PID 的各项输出功率参数。
版权声明: 本文为 InfoQ 作者【芯动大师】的原创文章。
原文链接:【http://xie.infoq.cn/article/9c632a4f8e54b88ca8378b50b】。文章转载请联系作者。
评论