PID学习笔记(江协科技同款)
文章简述:
PID控制是一种闭环控制方法,包含比例(P)、积分(I)、微分(D)三个环节。P项快速响应但存在稳态误差,I项能消除稳态误差但响应滞后,D项预测变化趋势抑制震荡。本文详细介绍了三个环节的样子,原理与缺点。先呈现现象,而后再解释原理,使得讲述过程不枯燥。
闭环控制概念
PID是用来控制的,所以我们首先要知道“控制”的概念,闭环控制和开环控制
简单来说,闭环控制就是有反馈的调控,开环控制是没有反馈的调控
PID公式
如下图所示(Proportion Integration Differentiation)PID,表示比例,积分,微分
图中红色的字母就是今后我们要去调整的参数
其中最关键的就是误差公式:误差 = 目标值 - 实际值。误差,贯穿PID全文!
公式每个部分的分工
先从宏观上整体了解一下比例项,积分项,微分项的作用
PID调控极性(大了调小,小了调大)
前面说了误差很重要,这边约定一下PID的调控极性(啥是正向调控与反向调控)
也加强一下对目标值,实际值,输出值,的理解。
目标值(target)实际值(actual)输出值(out)
老师举的例子是:水多了加面,面多了加水。我这边再用AI举一个有数值的例子。
前面我们看到PID公式的有3个组成部分,我们一个个来解析,假设仅有p,仅有比例项,会发生什么?答:会有无法消除的稳态误差
稳态误差(静差)
什么是稳态误差?
我的理解:
稳态误差是系统稳定后,实际值和目标值之间“去不掉的差”。纯P项调控大概率导致稳态误差
纯P项调控(纯比例项调控):![]()
稳态误差的具体呈现
我们先直接看现象。
下图是:在纯p项调控模式下,直接将PID输出out值作为电机PWM占空比的 电机速度波形图
可以理解为(PID输出值 = 电机旋转力度 或 电机驱动力)
(红线为目标值(速度),紫线为实际值(速度))
如图,可以看见无论K_p多大,误差依旧存在(error = target - actual)
这就是稳态误差的具体呈现![]()
稳态误差为何出现,为何始终存在无法消除?(纯p项电机控速情况下)
我们来分析上图中Kp = 1的波形:![]()
可见,只要摩擦力等阻力存在,稳态误差不可避免
因为阻力存在,在纯P项的PID调控下(PID输出=电机驱动力)会出现一个死循环,像一个悖论,
有点绕,如下图:![]()
稳态误差原因总结:
我想要误差为0,于是我电机出力,但是电机出力,达成目标后(误差为0)会导致电机没力,于是速度被阻力拖下来,于是误差又出现了,所以我永远无法达成目标。
因为摩擦力,热量消耗等阻力产生了稳态误差,而摩擦力(电机),热量消耗(锅炉)等等是无法消失的,所以在仅有P项调节的PID的情况下,是无法消除稳态误差的。
而且,尽管调高K_p可以减少稳态误差,但是过大的K_p会导致超调,一点点的error变化都会导致剧烈的output变化(平衡车抽搐)
判断稳态误差是否存在:![]()
举个例子,当电机转速为100时,我给电机的PWM设置为0,即电机不给力了,此时电机就会因为阻力停止,所以电机这个系统是有稳态误差的,而且方向为“速度减小的方向”
积分消除稳态误差
积分的引入
我们来看纯 I 项调控的情况,即直接让积分项给到电机输出out
积分项的含义:K_i * (0~t 时刻的所有误差的积分(累加))
积分项的特点:
只要误差存在,那么积分项就会累加,于是输出out会持续变大!
输出持续变大,使得实际值持续变大,误差持续减小,最终误差消失。
误差消失,积分项不再累加,目标值 = 实际值,调控完毕。
完美克制稳态误差,我们先看现象
把积分项的累加效果想象为一个不断累积的水桶![]()
写成数学公式就是下图(纯积分):
既然纯积分控制就能达成目的了(目标值=实际值),那只要右边的积分项就行了啊,左边的那个K_p * error(t) 不要了,行吗?
能不能不要P项?
答:不行,积分项有弊端。
积分的弊端![]()
先看现象,左边是纯积分,爬升太慢!有右边是积分项 + 比例项,爬升快!![]()
我们直接拿数值推导来证明积分项 与 比例项的优缺点:
P项的优势:假设当前实际值为100,我突然要 -100(目标值),那么error = -100 - 100 =-200
假设k_p 为0.5。那么比例项输出 = 0.5 * -200 = -100。
此时是不是立刻就达到了-100,所以说P项的优点是调整迅速
而I项,假设k_i 也为0.5。那么I项输出 = 0.5 * (之前的误差积分值 -200)
看看,因为有了这个【之前的积分值】拖后腿,导致I项有 " 滞后性 "(惯性)
积分项:从100楼跳到-100楼
比例项:直接瞬移到-100楼
想象一下,积分一个水桶,水位为100,现在要变为-100,是不是要一点点往外舀水?
所以 纯 I 项 在目标值瞬间大幅变化的时候,表现很差!
而纯 P 项,那么就会产生稳态误差,之前讲过了:![]()
总结:
P项反应快,但是有稳态误差,I项能消除稳态误差,但是有滞后性,反应慢。
所以,我们要利用I项来消除稳态误差,同时结合P项来达到快速响应的目的!!!
比例项+积分项(PI控制)![]()
比例项与积分项系数取值![]()
所以说K_p和K_i的值都有优缺点,当他的值变大,那么它的优点与缺点都会同时变大!
要取一个合适的,兼顾的方案。
比例项与积分项波形图分析
我们用实际实验的波形图来深入理解PI控制的特点,也是调参过程。
当前公式:
下面是6个 PID控制电机转速 的波形图,按照箭头指向来查看P项与I项的值的优缺点
图中【爆冲】指的是P项的瞬间爬升的能力,【惯性】指的是I项的滞后性![]()
解释图4产生震荡的原因:
- 猛冲阶段(P项主导):
- 一开始误差很大(100 - 0 = 100),P项输出巨大,系统猛冲。
- 注意:此时 I 项(积分池)也在工作。但是积分池不大。
- 回落阶段(关键点):
- 当实际值快速接近 100 时(比如到了 95),误差瞬间变小(只剩 5)。
- P项输出瞬间减弱(从大推力变成了小推力)。
- 重点来了:此时系统可能面临一个较大的阻力(比如摩擦力、重力、或者空气阻力)。
- 动力不足:P项减弱得太快,而 I 项(积分)此时积累的值还不够大(因为它需要时间慢慢攒)。
- 结果:P项没劲了,I项还没顶上来,总驱动力小于阻力,系统就被阻力“打”回来了一点(速度下降,甚至位置回退)。这就是你看到的“实际值被拉下来”。
- 爬升阶段(I项主导):
- 实际值掉下来后,误差又变大了(比如从 5 变成 15)。
- 此时 P 项恢复了一点力气。
- 更重要的是,时间在流逝,I 项(积分池)一直在不断地累加这个正误差。桶里的水越来越多。
- 最终,I 项攒够了足以克服阻力的力量,把曲线慢慢地、坚定地推回到了 100,并消除了稳态误差。
P项不变I项过大
如下图,我们知道,P项负责(瞬间爬升),但是为啥下图中,图5 的P项系数对比与图2的没变,但是瞬间爬升的力度却变大了呢?
那咱说I项不是有之后性吗?I项变大的话,实际值变化曲线不应该更加"滞后"吗?不应该更加慢吗?为啥爆冲力度更大了。
注意:积分的“滞后性”是指它有惯性,而不是说积分项会导致实际值变化速度变慢,或者说实际值曲线变平缓。![]()
D项 (微分项)
粗略地理解,微分就是误差曲线某一点 做切线的斜率,斜率表示的是函数的变化趋势,所以微分项可以预测未来,提前调控。![]()
微分项作用原理
最关键的是搞懂D项的正负,在不同情况下,D项是怎么去抑制误差剧烈变化的
简单来说:D项会将陡峭的 实际值曲线 向实际值变化的相反方向 拉平缓
D项波形:
下图是倒立摆的波形图,P、I、D参数都有这边只放最重要的D项
在 1 号区域,波形平和
在 2 号区域,将D项取消后,仅剩PI调控,波形产生了震荡,而且这个震荡越来越大
在 3 号区域,D项参数置为2,则波形震荡减小
在 4 号区域,D项参数置为4,则波形震荡接近消除
老师在讲这个波形的时候举了一个赛车方向控制失控的例子,非常形象,在视频的45:00位置
【PID入门教程-电机控制 倒立摆 全程手把手打代码调试】 https://www.bilibili.com/video/BV1G9zdYQEr3?p=2&vd_source=ac0f433ef3a2ea9091f1ca48e9300c3d
调参经验总结
一般来说,对电机的速度控制用PI就足够了,不需要加入D项,因为电机速度控制这个系统一般不会来回震荡。
而对于电机或者倒立摆的定位控制,可以用PD控制器。因为定位控制一般稳态误差很小,而且是比较容易超调来回震荡的。
如果 PD 控制还有稳态误差,可以加入一点点I项,这点I项不能加大了,否则定位的控制很不稳定。
下面是AI的详细分析:
