您的位置:首页 > 产品设计 > UI/UE

Arduino PID Autotune Library

2016-03-24 14:03 609 查看


原文章地址:http://brettbeauregard.com/blog/2012/01/arduino-pid-autotune-library/


Arduino PID Autotune Library

终于,我发布了一个自动调PID参数的一个库来完善Arduino PID库文件。在我发布当前版本的PID库的时候,我做了大量的博客让读者明白,这个库内部是怎么运行的。但是也不是那么深入,这个也是这篇博客的目标。我会解释这个自动调谐库能够完成什么,是怎么完成的。


Attribution

很多年来,我都想写一个自动调谐库,但是因为我和雇主的一些协议,我不能发布一个。但是!当我发现William Spinelli 写的AutotunerPID
Toolkit的时候,我便开始打算写一个了。我自己的公司对于我发布、评论和维持开源项目没有提出异议。

对于matlab的代码,我对于峰值检测部分做了一些微调,将标准形式(Kc, Ti, Td)调为理想形式(Kp,
Ki, Kd),就像以往一样,所有的权利归于 Spinelli先生。


理论基础

对于一个PID控制器来说,最好的调谐参数 (Kp, Ki, Kd,) 是取决于控制器控制的是什么。一个烤箱的最佳调谐参数不一定是烤牛排工具( sous-vide
cooker)的最佳参数。所有的自动调谐研究者都试图发现控制器控制的到底是什么,然后再计算调谐参数。自动调谐有许多的方法,但是大多数都是改变PID的输出,然后观察输入的响应。

这个库用到的方法是著名的延迟方法,它的工作方式如下:





最开始使output和input都是在稳态,然后使output在某个方向上改变某个位移D。当Input穿过触发线的时候,output改变为另一个方向的位移D。通过分析,峰峰值的距离和它们与输出的关系,这些自动调谐工具可以分辨出两种不同的过程。最终,不同的系统得到特定的PID参数。






应用

这个理论在理想条件下运行良好,但是在真实的世界,他并不运行的那么良好。因为在工作条件下,输入信号通常是噪音繁多,这将导致连个主要问题。


问题1:何时改变 When to step?

当含噪声的信号不断改变方向的时候,Input 有可能在会重复通过触发线很多次。这个问题可以导致输出会发生严重的震荡,如果更严重的话,会对物品造成损害。





我选择回避这种问题的方式是用户指定一个噪声带noise band。事实上,我们是创造两条触发线。因为,这两条线的距离是噪声的幅值(如果设置妥当),这样的话,因为噪声的原因多次触发的情况就会很少发生。






问题 #2: 峰值检测

在仿真世界,检测峰值很容易;当输入信号改变方向,那就有一个最大值和最小值(取决于是上升还是下降)。但是在一个有噪声的世界,这种方法就失效了。





每一个噪声信号都会造成一个方向的改变。为了处理这种问题,我加了一个“向后看"(“look-back time” )的参数
。当然这个是一个不好听的名字,请你一定要告诉我,如果你能想到一个更好的名字。

无论如何,用户定义一个窗口期,比如说10秒。那么这个库就会比较当前的点和前10秒钟点。如果当前点事最小或最大,那么这个点被标记为可能的峰值。当这个标志点从最大变为最小的时候,那么前一个点被认为是一个峰值。反之亦然。





另一种解释向后看的方式是,可疑点将被认作为一个峰值,如果它是最大或最小值在过去的一段时间或将来的一段时间。就像我说的,这个名字很糟糕。


其他…

The number of cycles performed will vary between 3 and 10. The algorithm waits until the last 3 maxima have been within 5% of each other. This is trying to ensure that we’ve reached a stable oscillation and there’s no external
strangeness happening. This leads me to…
I’m not the biggest fan of Autotune. I’ve often said, and still believe, that a moderately trained person will beat an Autotuner every day of the week. There’s just so much that can go wrong without the algorithm knowing
about it. That being said, Autotune is a valuable tool to help the novice get into the ballpark.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arduino Autotune pid