- 比例环节:快速接近目标
- 积分环节:防止稳态误差
- 微分环节:减少振荡
被控对象可以分为两个部分,分别是执行器,用于产生力或者能量从而改变系统,和处理,比如说温控的加热过程。在现实世界中,执行器往往不能执行所有来自控制器的输出,因为他有速度约束(Rate constraint)和饱和(Saturation)。
一、执行器饱和
上图所示,只考虑比例环节。因为系统存在稳态误差,所以控制系统的误差将会保持不变,输出的控制信号将会一直增加,执行器(比如电机)的转速也会逐渐提升,但是由于电机的物理限制,到达某个转速后,就无法继续增加转速了,我们称执行器饱和。这种饱和是常见的:
我们希望这个执行器是线性的,也就是我给多少控制信号他就执行多少。
二、由饱和引起的Windup
只考虑积分环节,此时飞行器出现了一种特殊情况,飞行器被你的手抓住了。抓住一段时间后,积分项的累计使得控制输出——转速越来越快,直到达到电机的最大转速, 因为积分环节并不知道执行器达到了其物理极限(也就是饱和),兢兢业业地增加控制速度。对于执行器没有什么影响,顶多是不执行。
问题出现在,释放之后。假设这个飞行器电机的最大转速是1000RPM,释放时下发的速度是2000RPM,此时释放飞行器,他会突然以最大的加速度朝着目标高度前进,误差会逐渐降低,但是因为下发的速度实在太大,就算到达了目标高度也不会停止,而是继续往上升,误差项变成了负数,积分环节的将会反向进行调整,从而加速速度的降低,我们不得不等待这个积分环节将下发速度降低到额定转速以下,才能继续减少上升的加速度。等待的这段时间,飞行器早就不知道飞到哪里去了。
我们需要做点什么来防止这种Windup,这里的Windup就是指积分环节的累计导致控制朝着远离目标值的方向保持加速一段时间,出现的原因就是因为执行器饱和。
我们需要对积分环节做限幅操作(Clamping),也就是关掉积分项。
解决的方法就是增加一个饱和限制,目的是正确识别这个Windup,然后停止积分环节的累计。两个条件满足,便可以判断是这种情况:
- 比较输入和饱和值不等
- 输入误差符号与输出量符号相同
那么我们需要积分环节,反之不需要。