【技术】Arduino PID自整定库
最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助。作者Brett Beauregard的原文网址:http://brettbeauregard.com/blog/2012/01/arduino-pid-autotune-library/
最后,我发布了一个Autotune库来补充Arduino PID库。当我发布当前版本的PID库时,我发布了一系列异常广泛的帖子,让人们对里面发生的事情更易理解。
虽然没有那么深入,但这是这个帖子的目标。我将解释 Autotune 库想要完成的任务,以及它是如何处理其业务的。
1、原由
几年来,我一直想拥有一个自动整定库,但由于我与雇主的协议,我无法写一个。但是!当我找到由William Spinelli编写的AutotunerPID工具箱时,我已经准备好了;我的公司对我移植和扩展现有的开源项目没有任何问题。
我将代码从 matlab 转换过来,对峰值识别代码进行了一些调整,并将其从标准形式 (Kc、Ti、Td) 切换到理想形式 (Kp、Ki、Kd)。除此之外,所有的功劳都归斯皮内利先生所有。
2、理论
PID 控制器的最佳整定参数 (Kp、Ki、Kd) 将取决于该控制器的驱动的是什么。烤箱最好的整定参数与低温烹饪器具最好的整定参数是不同的。
自整定器试图找出控制器驱动的内容的性质,然后从中进行调整参数。有多种方法可以做到这一点,但大多数方法都涉及到以某种方式更改 PID 输出,然后观察输入的响应方式。
库中使用的方法称为中继方法。下面是它的工作原理:
从稳态开始(输入和输出都是稳态),输出沿一个方向跨一定距离D阶跃,当输入越过触发线时,输出沿另一个方向跨距离D阶跃。
通过分析峰值的距离以及峰值相对于输出变化的大小,Autotuner 可以分辨出一种类型的过程和另一种类型的过程之间的区别。因此,不同的系统将获得自定义调优参数:
3、实施情况
这在理论上效果很好,但现实世界的数据并不是很合作。输入信号通常是嘈杂的,这会导致两个主要问题。
3.1、问题 #1:何时步进?
由于噪声信号是起伏的,当输入信号经过触发线时,触发线很可能会被交叉几次。这可能会导致输出中轻微的颤振,如果严重的话,可能会完全破坏:
我选择回避此问题的方式是让用户指定噪声带。实际上,这将创建两条触发线。由于它们之间的距离等于噪音 (如果设置得当),由于信号抖动而发生多次交叉的可能性较小。
3.2、问题 #2:峰值识别
在模拟世界中,识别峰值很容易: 当输入信号改变方向时,这是最小值或最大值 (取决于发生的更改)。但是,在嘈杂的世界中,此方法失败:
每一个噪声信号都是一个方向的改变。为了处理这个问题,我添加了一个“回溯时间”参数。这是一个糟糕的名字。如果你能想出更好的办法,请告诉我。
无论如何,用户定义了某个窗口,比如10秒。然后,库将当前点与最后十秒的数据进行比较。如果它是最小值或最大值,则会将其标记为可能的峰值。
当标记的点从最大值切换到最小值时,反之亦然,以前标记的点被确认为峰值。
另一种解释回溯时间的方法是,如果一个点是一个回溯未来或过去中最大 (或最小) 的值,则该点将被标识为峰值。就像我说的:可怕的名字。
4、你也应该知道..。
执行的循环数将在3到10之间变化。该算法一直等到最后3个最大值彼此都在5%以内。这是为了确保我们已经达到了稳定的振荡并且没有外部奇异现象发生。这让我想到……
我不是Autotune的超级粉丝。我经常说,而且仍然相信,一个受过中等训练的人会很容易战胜自动整定器。如果不清楚算法的话,很多地方会很容易出错。话虽如此,但 Autotune 是帮助新手进入竞技场的宝贵工具。
欢迎关注:
【技术】Arduino PID自整定库的更多相关文章
- 手把手教你看懂并理解Arduino PID控制库——引子
介绍 本文主要依托于Brett Beauregard大神针对Arduino平台撰写的PID控制库Arduino PID Library及其对应的帮助博客Improving the Beginner’s ...
- PID参数整定快速入门(调节器参数整定方法)
PID调节器参数整定方法很多,常见的工程整定方法有临界比例度法.衰减曲线法和经验法.云润仪表以图文形式分别介绍调节器参数整定方法. 临界比例度法一个调节系统,在阶跃干扰作用下,出现既不发散也不衰减的等 ...
- 我的四轴专用PID参数整定方法及原理---超长文慎入(转)
给四轴调了好久的PID,总算是调好了,现分享PID参数整定的心得给大家,还请大家喷的时候手下留情. 首先说明一下,这篇文章的主旨并不是直接教你怎么调,而是告诉你这么调有什么道理,还要告诉大家为什么'只 ...
- Brett Beauregard大神的Arduino PID算法
大神的全部PID http://brettbeauregard.com/blog/category/pid/ Improving the Beginner’s PID – Introduction I ...
- Neo4j高级应用技术专题系列 - APOC存储过程库-【1】概述
Neo4j高级应用技术专题系列 - APOC存储过程库-[1]概述 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://bl ...
- Arduino PID Library
Arduino PID Library by Brett Beauregard,contact: br3ttb@gmail.com What Is PID? PID是什么 From Wikipe ...
- PID参数整定
PID参数整定方法很多,常见的工程整定方法有临界比例度法.衰减曲线法和经验法.云南昌晖仪表制造有限公司以图文形式介绍以临界比例度法和衰减曲线法整定调节器PID参数方法.临界比例度法一个调节系统,在阶跃 ...
- [技术] OIer的C++标准库 : 字符串库<string>
引入 上次我在博客里介绍了OI中可能用到的STL中的功能, 今天我们接着来发掘C++标准库中能为OI所用的部分. 众所周知, OI中经常用到字符串相关的处理, 这时善用字符串库可以使一些操作更加简洁易 ...
- [技术] OIer的C++标准库 : 字符串库
引入 上次我在博客里介绍了OI中可能用到的STL中的功能, 今天我们接着来发掘C++标准库中能为OI所用的部分. 点击传送至我的上一篇系列博文 众所周知, OI中经常用到字符串相关的处理, 这时善用字 ...
随机推荐
- 攻防世界WEB高手进阶之python_template_injection
python模板注入 看了一堆文章,也不是看的很明白,反而把题目做出来了 大概思路如下 简单探测 http://111.198.29.45:42611/{{7+7}} 返回 说明服务器执行了{{}}里 ...
- MSc in Robotics
MSc in RoboticsProgramming Methods for Robotics AssignmentIrene Moulitsas & Peter SherarCranfiel ...
- Non-boring sequences(启发式分治)
题意:一个序列被称作是不无聊的,当且仅当,任意一个连续子区间,存在一个数字只出现了一次,问给定序列是否是不无聊的. 思路:每次找到一个只出现了一次的点,其位置的pos,那么继续分治[L,pos-1], ...
- 用Queue控制python多线程并发数量
python多线程如果不进行并发数量控制,在启动线程数量多到一定程度后,会造成线程无法启动的错误. 下面介绍用Queue控制多线程并发数量的方法(python3). # -*- coding: utf ...
- [ARIA] Create an Accessible Tooltip on a Text Input
Here we use HTML and CSS to create a stylish yet semantic tooltip on a form input. I am using aria-d ...
- Jmeter 正则表达式提取器详解(Regular Expression Exactor)
Jmeter 正则表达式提取器详解(Regular Expression Exactor) Name(名称):随意设置,最好有业务意义. Comments(注释):随意设置,可以为空 Apply to ...
- B/S开发——文件夹的上传和下载
本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...
- asp.net解决大文件断点续传
以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传 ...
- WinDbg常用命令系列---断点操作b*
ba (Break on Access) ba命令设置处理器断点(通常称为数据断点,不太准确).此断点在访问指定内存时触发. 用户模式下 [~Thread] ba[ID] Access Size [O ...
- fluent加载第三方(C++,Fortan等)动态链接库
这里我介绍一种比较简单的方法,首先我们从ANSYS Fluent UDF Manual上随便找一段正确的UDF,下面这段UDF取自ANSYS 18的ANSYS Fluent UDF Manual,位于 ...