PID – 帮助计算机表现得更像人类

您可能不熟悉控制回路的概念 ,但我保证您每天都会以某种方式使用它。控制回路是使用反馈机制来控制特定动作的任何系统。

当你接住一个在空中飞行的棒球时,你的眼睛会提供反馈,告诉你的大脑球在哪里以及你需要如何移动你的手才能接住它。当你想在进入之前调节淋浴的温度时,你用手感受水,它会向你的大脑提供反馈,并决定你是否转动旋钮使水更热或更凉。这些是控制回路的示例。

正如人体使用反馈机制和控制回路一样,电子和机械设备也是如此。通常使用称为PID的软件算法来控制这些系统。PID 是ProportionalIntegralDerivative的首字母缩写。那些学过微积分的人会认出这些术语,但对你们其他人来说,它们可能听起来有点吓人。在这篇文章中,我将分解 PID 算法的三个组成部分并解释每个组成部分的目的。

PID 的工作原理

为了描述 PID 算法的工作原理,我将使用温度控制器的简单示例。在这个例子中,我们有一个系统,其中包括一个电燃烧器、一壶水、一个温度传感器和一个控制器。

控制器可以使用温度传感器读取水温,并可以在 0% 到 100% 之间调节燃烧器的功率水平。控制器中的软件负责调节燃烧器的功率水平,使锅中的水温尽快达到所需值(设定点),然后无限期地保持该温度。可以在控制器中使用 PID 算法来解决这个问题。

成比例的

PID 算法的第一个组成部分是最容易理解的,也是对控制器性能最关键的部分。P代表比例。 这意味着控制变量 应该 与系统中的误差量成比例地调整。仅使用 P 分量的 PID 算法可以表示为:

output = error * Kp

我只是使用了一些听起来不熟悉的术语,所以让我解释一下。

控制变量: 控制变量 是我们要调整的控制器的输出。在我们的示例中,控制变量是燃烧器的功率水平。

过程变量: 过程变量是您试图控制的系统中的测量值。过程变量用作控制器的反馈,以便它可以决定如何调整控制变量。在这种情况下,过程变量是水的温度。

错误:该 错误是过程变量和设定点之间的差。在我们的例子中,设定点是我们试图让水达到的某个温度。任何时间点的误差都是当前温度和目标温度之间的差值。

该算法的P分量通过与误差成比例地调整输出来工作。假设温度控制器的设定点是 100 度。如果当前测量的温度为 60 度,则误差为 40。控制器的输出将设置为 40 *  Kp,其中Kp是 比例系数。Kp 是一个恒定的非负值,它是在控制器的调整过程中确定的(稍后我们将详细讨论调整)。现在假设Kp 的值为 10(凭空而来)。那么系统的输出将是 (100 – 60) * 10 = 400。

你可能会想,“400?!这远远超过燃烧器的 0 到 100% 范围。我们如何将其设置为 400?” 你是对的。这称为饱和,它经常发生在 PID 控制器中。发生饱和时,控制变量只需将输出设置为其最大值 100%。随着测得的温度接近目标值,误差变小,最终系统变得不饱和。在我们的示例中,系统将在 90 度时变得不饱和。在 95 度时,误差为 5,系统的输出为 5 * 10 = 50%。

使用仅比例控制器的问题在于它通常会导致稳态误差。随着误差越来越小,误差乘以比例系数的结果最终变得太小,对过程变量没有任何影响。这是因为现实世界的系统从来都不是 100% 高效的。这就是算法的 I组件发挥作用的地方。

不可缺少的

 代表组成, 这是一个数学术语,意思是积累的东西随着时间的推移*。在 PID 的情况下,  I分量会累积随时间发生的误差。然后将该累积误差乘以积分系数Ki 并添加到输出中。仅使用 P 和 I 分量的控制器算法可以用以下伪代码表示:

accumulation_of_error += error * delta_time
output = (error * Kp) + (accumulation_of_error * Ki)

控制算法的积分组件可以消除系统中的任何稳态误差,因为它会随着时间的推移累积该误差并对其进行补偿,而不仅仅是查看某一时刻误差的瞬时快照。

衍生物

d 代表衍生物,它可能是最复杂的。微分组件在控制器中的使用频率较低,但在某些应用中仍然很重要。对于一壶水不受干扰地放在燃烧器上的情况,D分量根本不是必需的。但是,如果我们偶尔将一把冰块倒入锅中而使事情复杂化,那么它可能会有所帮助。

微分组件负责补偿误差的突然变化。如果我们把冰倒进我们的锅里,温度会突然下降,误差会突然增加,算法的微分组件会启动并增加燃烧器的输出。

导数是一个数学术语,意思是“曲线的斜率”。在这种情况下,曲线是误差随时间变化的图。如果误差是稳态的,则D分量的结果为零。完整的PID算法可以用以下伪代码表示:

accumulation_of_error += error * delta_time
derivative_of_error = (error - last_error) / delta_time
last_error = error
output = (error * Kp) + (accumulation_of_error * Ki) + (derivative_of_error * Kd)

当系统已经处于或接近稳定状态时,微分分量最有用。在稳定状态下,P 和 I 分量都非常小,因为误差非常小。如果误差突然增加,P 和 I 分量需要一段时间才能再次开始起作用。但是,D 分量会响应误差的突然变化并立即开始补偿。为此,常说 D 组件负责补偿未来的错误;它看到错误发生变化并试图阻止它发生更多变化。

由于微分分量会响应误差的变化,因此在测量的过程变量有噪声的情况下可能会出现问题。当在控制算法中使用D分量时,这种噪声会导致输出变得不稳定。

 PID 控制器整定

调整 PID 控制器是确定KpKiKd的理想值以实现所需响应的过程在某些系统中,您可能希望控制变量尽可能快地达到设定点,即使这意味着超出设定点。在其他情况下,超出设定点可能是不可接受的。

所有这些都可以通过仔细调整调谐系数来控制。调整过程超出了本文的范围,但请留意我的下一篇文章,我将给出一个调整自制温度控制器的真实示例。

*当我说积分意味着“随着时间的推移积累一些东西”时,这并不完全准确。积分实际上是某物相对于其他物的累积;不一定是时间。例如,如果您对宽度对长度进行积分,您将得到面积。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妈妈爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值