嵌入式软件算法之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的各项输出功率参数。

相关推荐
fangzhanpeng1685 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心8 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552713 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552714 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝15 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552715 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552716 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552718 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552719 天前
Java I/O核心操作实战
人工智能·1024程序员节
u01030552720 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节