一、什么是PID控制
关于PID控制,我们经常会提到下面的公式:
u
(
t
)
=
K
P
⋅
e
(
t
)
+
K
I
⋅
∫
0
t
e
(
t
)
d
t
+
K
D
⋅
d
e
(
t
)
d
(
t
)
u(t)=K_P\cdot e(t)+K_I\cdot \int_0^te(t)dt+K_D \cdot \frac{de(t)}{d(t)}
u(t)=KP⋅e(t)+KI⋅∫0te(t)dt+KD⋅d(t)de(t)
面对这些公式,初学者很容易感到沮丧。本文不准备从公式的角度说明PID的概念,而是通过简单的例子,直观上理解PID,建立一个基础的概念。
- plant:被控对象
- actuating signal:控制系统输出到被控变量的信号
- controlled variable:要控制的变量和参数
- commanded variable:期望值
- feedback path:反馈路径
- error term:误差项
不同行业叫法不同,但是要解决的问题只有一个:如何产生一个恰如其分的输入,将其传送至系统从而产生期望的输出。
如上图,我们的目标是找出问号中的具体策略,使得期望和实际的误差为零(Error Term)。因为物理条件限制,这个误差为零的过程需要时间。执行这个具体策略是部件称为控制器,可以将其理解为控制误差为趋向于零的策略,它决定了我们如何接近目标。
例子1:我要去球场中线!
你现在站在球场的左边线,并且想要去距离你50米的中线。我们想让人这个系统跑到中线,实际值0m和期望值50m之间的误差量是50m,人就是被控对象,输入到被控对象的信号是人的步行速度。
最简单的策略就是,用误差的乘以某个系数作为输入信号(输入给人的信号),可以想象这个系统在每次调整周期都会进行比较,因为系数是固定不变的,所以曲线可能是这样的:
下面是不同系数下,距离、速度随着时间的变化曲线。
例子2 飞行器的例子
这种控制存在一个问题:飞行器在到达指定高度时,误差为0,意味着他将会失去转速,也就是说没有升力。飞行器将会下落,直到再次有误差,则继续上升。
考虑到实际飞行器的受力情况,它将受到两个力:自身的重力和螺旋桨产生的升力。我们假设飞行器在转速达到100RPM(Revolition Per Minute)的时候所受的力恰好等于自身重力,飞行器在缩小与目标高度的过程中升力逐渐增加,如果升力达到100RPM尚未达到指定位置,飞行器也将会悬停(Hover)。这样的情况告诉我们单纯的比例控制是可能停在某个地方无法继续接近目标的:
- 比例系数设置为2,此时误差为50,飞机转速直接达到100RPM,根本无法起飞!
- 比例系数设置为5,此时误差为50,飞机转速达到250RPM>100RPM,向上加速,误差逐渐减少,速度也会缓慢降低至100,此时对应的高度应该为30,因为这个时候恰好等于100RPM
- 继续提高比例系数,最终悬停的地方可能会接近50,但是无法完全消除,这就是稳态误差的概念。
为什么会存在稳态误差?这是执行量在某个特殊值时因为其系统固有结构失去调节被控量的能力导致。简单来说就是我虽然继续调整这个被控量,但是因为系统约束导致我失控了(失去控制力了),或者你可以到达了系统的“稳态”。
这时候就需要考虑引入积分的概念。如果说比例的对象是当前的误差,那么积分的对象则是过去的误差,它表示过去一段时间的误差和,这个时间我们称之为积分时间,回到刚刚那个例子,当产生稳态误差时,比例项不会起到任何作用,但是因为积分的累计并不为零,所以将会继续产生大于100rpm的转速以打破这个稳态。那么比例和微分是否是完美的呢?
当飞行器非常接近目标高度时,比例环节可以忽略不记,但是累计误差将会使得速度进一步增加,直至超过指定的高度、速度,也就是上图左下角红色区域的超调,累计误差使得飞行器在50处来回振荡,因为始终存在累计误差,所以无法达到指定位置。这时候就要引入我们的微分环节了,微分时间衡量了误差降低的速度,当前误差-前面的误差=微分,PD过程误差逐渐减少,微分则为负数,这个负数将会被增加到我们的控制器的输出中,用于降低飞行器的速度。
最后我们的控制器长这个样子:
各个环节的系数调整,则成为PID参数整定过程。实际过程中我们可能只需要用到其中部分环节。
小结:P I D:
P proportional:现在
I integral:过去
D derivative:未来
相关文章
- 控制流程
- 博弈论在电动车和电网系统中分布式模型预测控制研究(Matlab代码实现)
- [k8s]k8s的控制层kubelet+docker配合调度机制(k8架构)
- 看我如何利用事件查看器绕过UAC(用户帐户控制)
- UIView下使用Animation控制动画
- 非常有用的并发控制-循环栅栏CyclicBarrier
- JavaScript流程控制语句(全)—if语句、switch语句、while循环、for循环等,关注收藏,持续更新
- OpenLayers的view与layer:控制显示内容
- 国外研发创新印刷传感器改变轮胎控制市场:成本可低至一美分
- WebRTC系列--视频编码控制之BALANCED(分辨率与帧率平衡模式)
- BLE 安卓APP控制LED灯的实现(转)