本系列博客对下面的文章及视频有着不同程度的借鉴与理解,在这里我真诚地感谢这些乐于分享的大大们。
理解PID的原理以及控制效果:https://www.bilibili.com/video/BV1xQ4y1T7yv
理解PID的代码实现:https://www.bilibili.com/video/BV1Af4y1L7Lz
理解串级PID的原理:https://zhuanlan.zhihu.com/p/135396298
brettbeauregard的博客:http://brettbeauregard.com/blog/
PID的原理理解:https://www.cnblogs.com/caiya/p/10656051.html
软件仿真:https://www.guyuehome.com/17352
如果你还没有经历过调整PID参数的日子,那么你可能不会知道这让人多么抓狂。不管如何编写PID算法,调整PID参数永远都是一件比较麻烦的事情。人们喜欢用“炼丹”来形容深度学习调参的过程,在我看来PID调参也大有几分相似的味道。
那么有没有什么办法来解决这一个难题呢?有,甚至还不止一个。
现在呈现在我们面前的就是其中之一:利用软件自整定PID参数,一般称为PIDAutoTurner.
首先为了完全掌握这种方式,我们还是从原理入手。
还是拿出我们的PID方程:
这个就是我们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\)就分别是图中的比例、积分与微分:
如果你不理解什么是拉普拉斯变换与传递函数,那么请接着看:
传递函数是指零状态下线性系统的响应(就是系统输出)拉普拉斯变换与激励(就是系统的输入)的拉普拉斯变换的比,记作:
\[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方程来推导出一个系统的传递函数。
所以我们需要大量的有关于此系统的输入与输出数据。拥有了足够多的数据之后,辅以自带的计算模型(什么积分滞后器啦、二阶系统啦等等),软件就能够通过大量的计算来还原这个系统的传递函数。
我们获取这些数据也不难,我们只要暂时让系统开环控制,然后不断地给系统输入阶跃信号:
说人话就是不断给系统期望值,同时记录系统的输出信号,以软件规定的格式把二者对应地记录下来即可。
软件自整定的原理差不多就是这些东西啦。
下面我们可以练练手。
Matlab是这个时代一项伟大的工具,其中Simulink工具箱更甚。Simulink几乎可以仿真任何物理模型,它不能做的可能只有为你生孩子了。
咳,simulink作为一款专业的仿真软件,它所具备的仿真精度肯定大于目前所知道的其他自整定软件,所以首先来介绍simulink的使用方式。
见下面的链接:https://www.guyuehome.com/17352
我感觉国内好像还没有多少人知道这个网站,感觉上有可能是分享它的第一人所以有点兴奋哈哈哈(bushi)
使用方法的话,如果你看过了上边使用simulink仿真的部分,那么这一部分我相信大多数人都是可以无师自通的了。毕竟跟simulink黑压压的一大片按钮与输入栏相比,这个网站简直就小清新得不要不要的。
具体的效果我并没有实践过,但是从社区的反响来看,效果还是非常不错的,具体的实验就还是很留给大家试验啦
下面给出链接:https://pidtuner.com