致谢

本系列博客对下面的文章及视频有着不同程度的借鉴与理解,在这里我真诚地感谢这些乐于分享的大大们。

理解PID的原理以及控制效果:​​https://www.bilibili.com/video/BV1xQ4y1T7yv​​​

理解PID的代码实现:​​https://www.bilibili.com/video/BV1Af4y1L7Lz​​​

理解串级PID的原理:​​https://zhuanlan.zhihu.com/p/135396298​​​

brettbeauregard的博客:​​http://brettbeauregard.comb

软件仿真:​​https://www.guyuehome.com/17352​​​

正文

一、PID的软件仿真

如果你还没有经历过调整PID参数的日子,那么你可能不会知道这让人多么抓狂。不管如何编写PID算法,调整PID参数永远都是一件比较麻烦的事情。人们喜欢用“炼丹”来形容深度学习调参的过程,在我看来PID调参也大有几分相似的味道。

那么有没有什么办法来解决这一个难题呢?有,甚至还不止一个。

现在呈现在我们面前的就是其中之一:利用软件自整定PID参数,一般称为PIDAutoTurner.

1.1原理理解

首先为了完全掌握这种方式,我们还是从原理入手。

还是拿出我们的PID方程:

\[Output=K_{P}*e+K_{I}*\int edt+K_{D}\frac{de}{dt}\]

这个就是我们PID系统的微分方程描述.为了使用方便,我们对它的两端进行拉普拉斯变换,得到下面这个式子:

\[U_{(s)}=(K_{P}+K_{I}\frac{1}{s}+K_{D}S)E_{(s)}\]

其中这\(K_{P}\)\(K_{I}\frac{1}{S}\)\(K_{D}S\)就分别是图中的比例、积分与微分:

PID控制算法系列(4)-PIDAutoTurner-PID软件自整定_ide

如果你不理解什么是拉普拉斯变换与传递函数,那么请接着看:

传递函数是指零状态下线性系统的响应(就是系统输出)拉普拉斯变换与激励(就是系统的输入)的拉普拉斯变换的比,记作:

\[G_{(s)}=\frac{Y_{(s)}}{U_{(s)}}\]

其中\(G_{(s)}\)\(Y_{(s)}\)\(U_{(s)}\)分别是传递函数、输出与输入。

其实拉普拉斯变换的作用就是为了确定系统的输出响应\(G_{(S)}\),当一个系统的传递函数已知的时候,我们给定系统的输入\(U_{(S)}\),那么系统的输出响应\(G_{(s)}U_{(s)}\)就可以使用拉普拉斯反变换来直接求出。

你问为什么不直接用微分方程来求?我的理解就是图个方便……微分方程在求解多元问题上是非常麻烦的。

现在我们有了描述该系统的传递函数,也就是说只要有输入,我们就可以得到输出了。

现在如果将这个传递函数导入相应的软件(例如大名鼎鼎的Matlab,更具体来说应该是里面的工具箱simulink),那么软件就能不断地产生阶跃输出,与传递函数进行运算之后直接将输出结果呈现在我们面前,或者软件还能够自己判断一下输出的好坏,自行调整PID的参数,尽量将输出弄得漂亮一些,我们只需要在软件判断完成之后导出PID参数就好,这就是软件的PID自整定。

但是还有一个问题没有解决:虽然使用的PID方程是一致的,但是每一个系统都因为系统本身的性质不同,而导致其传递函数的不同。我们没办法依靠一个还没有参数的PID方程来推导出一个系统的传递函数。

所以我们需要大量的有关于此系统的输入与输出数据。拥有了足够多的数据之后,辅以自带的计算模型(什么积分滞后器啦、二阶系统啦等等),软件就能够通过大量的计算来还原这个系统的传递函数。

我们获取这些数据也不难,我们只要暂时让系统开环控制,然后不断地给系统输入阶跃信号:

PID控制算法系列(4)-PIDAutoTurner-PID软件自整定_数据_02

说人话就是不断给系统期望值,同时记录系统的输出信号,以软件规定的格式把二者对应地记录下来即可。

软件自整定的原理差不多就是这些东西啦。

下面我们可以练练手。

1.2 利用Simulink软件自整定

1.2.1 写在前面的话

Matlab是这个时代一项伟大的工具,其中Simulink工具箱更甚。Simulink几乎可以仿真任何物理模型,它不能做的可能只有为你生孩子了。

咳,simulink作为一款专业的仿真软件,它所具备的仿真精度肯定大于目前所知道的其他自整定软件,所以首先来介绍simulink的使用方式。

1.2.2 实现

见下面的链接:​​https://www.guyuehome.com/17352​

1.3 利用Web端工具软件自整定

1.3.1 写在前面的话

我感觉国内好像还没有多少人知道这个网站,感觉上有可能是分享它的第一人所以有点兴奋哈哈哈(bushi)

使用方法的话,如果你看过了上边使用simulink仿真的部分,那么这一部分我相信大多数人都是可以无师自通的了。毕竟跟simulink黑压压的一大片按钮与输入栏相比,这个网站简直就小清新得不要不要的。

具体的效果我并没有实践过,但是从社区的反响来看,效果还是非常不错的,具体的实验就还是很留给大家试验啦

1.3.2 实现

下面给出链接:​​https://pidtuner.com​