翻译了"老外博客PID"的一丁点前言内容
提醒:学习主要是靠自己,其他人只能帮助而不能代替你。我翻译了前言这里,就是让大家看看这文章强大的地方,让你们决定要不要下狠心去钻研它。前言这里就是描述这文章主要解决了传统PID控制的哪些问题的。
不要推说“不懂英文”,网上有词霸神马的,不懂的人总能将大概意思搞出来,就看你有没有心罢了。如果英文里写的是获取27.8G视频地址的方法,不管英文
再差的人也会拼命理解,哈哈。
后续的内容我翻译了,但不会贴出来。因为翻译的过程也是一个学习、理解的过程,实在不想当“好人”而剥夺了别人的学习机会。翻译过程不但学习的是英文,
而且已经将文章理解了一次,这样翻译出来后再理解一次,问题就迎刃而解了。
为了配合新Arduino PID库的发布,我决定发出这一系列的帖子。上次的库,
质量是强大鸟,但没有真的给出了任何的代码解释。这次的计划就是要详尽地解
释为啥这代码要这么写。我希望这个工作会让两类群体用户得益。
那些直接对Arduino PID库内部运行方式有兴趣的人会得到详尽到脚趾头的解
释。
任何正在写他们自己的PID算法的人可以看看我是怎么做事的,并且进行他们
喜欢的任何方式的借鉴。
这将会是一个艰难的一击,不过我想我会找到一个不太痛苦的方式来解释我
的代码。我将会从“初学者的PID”开始。接着我将会逐步逐步地改善直到我们剩
下一个高效的、健全的PID算法。
初学者的PID
这是每一个人初学PID时的等式。
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
这引导着大概是每一个人都写出如下的PID控制器。
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
Compute()函数可以经常或不经常调用,而且工作起来不错。不过这系列的(帖子
)并不是为了“不错”。如果我们要将这个代码转换成跟工业PID控制器相似的应
用的东西的时候,我们将要说几个事情。
1、采样时间——PID算法函数最好是在一个定期的间隔下进行评估。如果算法已
经知道这间隔,我们也可以简化一些内部算术。
2、衍生冲击——不是最大的问题,不过很容易除掉,所以我们将要这样做。(译
者注:衍生冲击是指当设置点SP变化的时候,因衍生的误差而出现的不应该有的
控制效果,称为衍生冲击。因为设置点变化的过程中,PID算式一直是在执行的,
所以就会在变化过程中计算出了不应该有的PID输出控制效果,就会叠加到受控物
体上,影响控制精度)
3、运行中的整定变化——一个好的PID算法就是那种当整定参数可以被改变而不
会影响内部工作的。
4、重设震荡的减轻——我们将会了解什么是重设震荡,而且实施一个有额外好处
的解决方案。
5、开/关(自动/手动)——在大多数应用中,有时候需要关闭PID控制器并手动
控制输出,而没有控制器在干涉。
6、初始化——当控制器刚开动,我们想要一个“无碰撞的传递”,即我们不想输
出突然跳到一个新值。
7、控制方向——这么说,最后这一个并不是将鲁棒性的名字改变,它是设计去保
证用户输正确的、带有符号的整定参数。
当我们弄完这些事项后,我们将有一个坚实的PID算法。而且,我们将凑巧拥
有一个在最新版本的Arduino PID库里正在使用的代码。所以,不管你要常识写你
自己的算法,或者是详细了解PID库,我希望这能帮助你。让我们开始吧。
更新:在所有的代码示范里我使用double型变量。在Arduino,单精度跟float(
单精度)是一样的。真正的精度用在PID上是杀鸡用牛刀了。如果你正在使用的语
言能有真正精度的话,我会建议你将所有的double变量转换为float。 get it{:smile:}{:smile:}{:smile:}{:smile:}{:smile:} 受教~了 请问楼主,原贴子在哪里? 找到了。
http://www.amobbs.com/thread-4872799-1-1.html PID的所谓位置式和增量式的,从控制算法上看,没有本质区别。
Out = Out + delta;
delta = P*E+I*ξE+D*de
如果看输出的Out值,就是位置式的,如果看delta就是增量式的。
实际应用中有又位置式和增量式,
有的执行有记忆特性,就是增量式的,如步进电机
有的执行机构,没有记忆性,就是位置式的,如加热 强帖留名.....
受教~了,一直有兴趣,不过一直没有去好好静下心来搞过 谷歌翻译? 3050311118 发表于 2012-9-8 10:13 static/image/common/back.gif
谷歌翻译?
一看就知道不是了...... 受教了, {:smile:}留着以后有用 谢谢楼主分享
页:
[1]