Files
translations/improving-the-beginners-pid-introduction/6-initialization.md
Jerry Lee f26e10d70c WIP
2021-01-22 11:23:47 +08:00

2.0 KiB
Raw Blame History

初始化

问题

在上一节中我们实现了打开和关闭PID的功能。我们关闭了它但是现在让我们看看重新打开它会发生什么

kesPID跳回到它发送的最后一个输出值然后从那里开始调整。这会导致我们不希望有的输入冲击。

解决方案

这个很容易修复。因为我们现在知道打开电源的时间从手动到自动所以我们只需要初始化即可平滑过渡。这意味着要对2个存储的工作变量ITerm和lastInput进行按摩以防止输出跳跃。

代码

我们修改了SetMode以检测从手动到自动的过渡并添加了初始化功能。它将ITerm = Output设置为整数项并设置lastInput = Input以防止派生峰值。比例项不依赖于过去的任何信息因此不需要任何初始化。

结果

从上图可以看出,正确的初始化会导致从手动到自动的无扰转移:这正是我们所追求的。 下一个>>

更新为什么ITerm = 0

最近我收到很多问题问为什么初始化时不设置ITerm = 0。作为回答我请您考虑以下情形pid是手动的并且用户已将输出设置为50。一段时间后该过程稳定为输入75.2。用户设定设定值75.2并打开pid。应该怎么办

我认为在切换到自动后输出值应保持在50。由于P和D项将为零因此发生这种情况的唯一方法是将ITerm初始化为Output的值。

如果您需要将输出初始化为零则无需更改上面的代码。只需在调用例程中设置Output = 0然后将PID从“手动”转换为“自动”即可。