看起来PID很高尚,但是先是被别人吓到了,然后又被公式吓到了。由于大多数人不会数学或者已经忘记了,当他们再次看到公式时,他们会害怕得要死。
我直接从网上找到了PID相关公式,截图如下。
明白了非常基本的原理之后,我看不懂公式,也看不懂意思,所以最后没有理解透。我先分析一下公式。明白了公式之后,再结合网上的一些PID例子就会明白了。
我们先简单了解一下PID的三个系数的含义。也防止自己忘记。 P为比例系数,I为积分系数,D为微分系数。
下面对PID的三个系数进行详细说明: 演示PID的三个参数的控制效果。
比例系数P
比例系数P的作用是什么?其实,如果你现在是一名初中生,你立刻就会明白。比例系数用于放大通过坐标点(0,0)的直线k。 k越大,直线越大。斜率越大,所以用在y=k*x中,其中k是比例系数p,大家简称为kp,所以就变成了y=Kp*x。
x为当前值currentValue与目标值totalValue的差值,称为误差err,则err=currentValue-totalValue。 y为执行器对应的输出值U,因此执行器对应的输出值U=Kp * (currentValue - TotalValue)。
那么,如果我们用比例来调整。
那么当前第一次调节时执行器对应的输出值为:
U1=Kp * ( 当前值1 - 总值1 )
第二次调整时执行器对应的输出值为:
U2=Kp * ( 当前值2 - 总值2 )
这就是比例系数P的应用,也就是大家所说的比例调节。比例调整是根据当前值与目标值的差值,乘以Kp系数得到输出值,该输出值直接影响当前值的下一步变化。如果仅进行比例调节,系统会剧烈振荡。例如,你的车当前运行速度为60km/h,现在你想通过你的执行器控制车达到恒定的50km/h,如果你只使用kp进行比例调节。 U=Kp * (60 - 50)。假设Kp为1,此时U执行器的输出值为10,结果当执行器输出时,你发现车子突然变成了35Km/h。此时U2=Kp*(35-50)。此时U执行器的输出值为-15。结果,当你的执行器输出时,你发现车子变成了55Km/h。由于惯性和不可预测的误差因素,您的汽车永远无法达到恒定的50km/h。一直在摇晃,我敢肯定如果你在车里,你一定会吐得很厉害。因此,在某些情况下,仅仅通过调整比例系数是无法使系统稳定的。因此,为了减缓振荡的剧烈程度,可以将比例P和微分D结合使用。
微分系数D
微分实际上就是对误差进行微分。错误加1 就是err(1)。错误2是err(2)。那么误差err的微分就是(err2 - err1)。乘以微分系数D,我们称之为KD,当执行器在第一次调整后有第一个误差,在第二次调整后有第二个误差时,与P系数相结合。使用PD组合时,您可以根据每次调整时误差值的经验计算来选择D的系数。如果误差越来越小,那么微分后一定是负值。负值乘以D系数并加上比例调整值后,该值肯定会小于单纯使用比例调整的值,因此阻尼效果被激活。阻尼作用将使系统区域稳定。
经过上述分析,PD组合的公式为:
U(t)=Kp * err(t) + Kd * derr(t)/dt
积分系数I
积分实际上是误差的积分,是误差的无限和。积分系数I怎么理解,这里是网上的例子
以热水为例。假设有人把我们的加热设备带到一个非常冷的地方并开始烧水。需要加热到50。
在P的作用下,水温缓慢升高。当达到45时,他发现了一件坏事:天气太冷了,水的消散速度等于P控制的加热速度。
这是怎么办?
P哥是这样想的:我已经离目标很近了,只需轻轻加热即可。
D哥是这样想的:加热和散热是对等的,温度没有波动,我好像不需要调整什么。
结果,水温永远保持在45,永远不会达到50。
常识表明加热功率应该进一步增加。但增量如何计算呢?
前辈科学家想出的方法真是巧妙。
设置积分金额。只要偏差存在,偏差就会不断积分(累积)并反映在调整力度上。
这样,即使45和50相差不是太大,随着时间的推移,只要没有达到目标温度,积分就会不断增加。系统会慢慢意识到还没有达到目标温度,是时候增加功率了!
达到目标温度后,假设没有温度波动,积分值不会再发生变化。此时,加热功率仍等于制冷功率。然而,温度稳定在50C。
kI的值越大,积分时乘的系数越大,积分效果越明显。
因此,I的作用是减少静态条件下的误差,使受控物理量尽可能接近目标值。
我在使用时仍然遇到一个问题:我需要设置一个点限制。这样可以防止刚开始加热时积分量过大而难以控制。
编辑:黄飞