最近看到了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自整定库的更多相关文章

  1. 手把手教你看懂并理解Arduino PID控制库——引子

    介绍 本文主要依托于Brett Beauregard大神针对Arduino平台撰写的PID控制库Arduino PID Library及其对应的帮助博客Improving the Beginner’s ...

  2. PID参数整定快速入门(调节器参数整定方法)

    PID调节器参数整定方法很多,常见的工程整定方法有临界比例度法.衰减曲线法和经验法.云润仪表以图文形式分别介绍调节器参数整定方法. 临界比例度法一个调节系统,在阶跃干扰作用下,出现既不发散也不衰减的等 ...

  3. 我的四轴专用PID参数整定方法及原理---超长文慎入(转)

    给四轴调了好久的PID,总算是调好了,现分享PID参数整定的心得给大家,还请大家喷的时候手下留情. 首先说明一下,这篇文章的主旨并不是直接教你怎么调,而是告诉你这么调有什么道理,还要告诉大家为什么'只 ...

  4. Brett Beauregard大神的Arduino PID算法

    大神的全部PID http://brettbeauregard.com/blog/category/pid/ Improving the Beginner’s PID – Introduction I ...

  5. Neo4j高级应用技术专题系列 - APOC存储过程库-【1】概述

    Neo4j高级应用技术专题系列 - APOC存储过程库-[1]概述 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://bl ...

  6. Arduino PID Library

    Arduino PID Library by Brett Beauregard,contact: br3ttb@gmail.com What Is PID?   PID是什么 From  Wikipe ...

  7. PID参数整定

    PID参数整定方法很多,常见的工程整定方法有临界比例度法.衰减曲线法和经验法.云南昌晖仪表制造有限公司以图文形式介绍以临界比例度法和衰减曲线法整定调节器PID参数方法.临界比例度法一个调节系统,在阶跃 ...

  8. [技术] OIer的C++标准库 : 字符串库<string>

    引入 上次我在博客里介绍了OI中可能用到的STL中的功能, 今天我们接着来发掘C++标准库中能为OI所用的部分. 众所周知, OI中经常用到字符串相关的处理, 这时善用字符串库可以使一些操作更加简洁易 ...

  9. [技术] OIer的C++标准库 : 字符串库

    引入 上次我在博客里介绍了OI中可能用到的STL中的功能, 今天我们接着来发掘C++标准库中能为OI所用的部分. 点击传送至我的上一篇系列博文 众所周知, OI中经常用到字符串相关的处理, 这时善用字 ...

随机推荐

  1. python中str和byte的相互转化

    在涉及到网络传输的时候,数据需要从str转换成btye才能进行传输. python byte 转 str , str 转 byte 其实很简单:原理图如下:在这里插入图片描述案例: a: str = ...

  2. python的tkinter,能画什么图?

    今天从下午忙到现在,睡觉. 这个能绘点图的. import json import tkinter as tk from tkinter import filedialog from tkinter ...

  3. Alpha冲刺(9/10)——追光的人

    1.队友信息 队员学号 队员博客 221600219 小墨 https://www.cnblogs.com/hengyumo/ 221600240 真·大能猫 https://www.cnblogs. ...

  4. msdtc不可用

    在使用“经销商园地 网上订单处理程序”等程序时,如果程序报:服务器×××上的MSDTC不可用”,可以按照以下方法进行解决: 在windows控制面版-->管理工具-->服务-->Di ...

  5. Build Post Office

    Description Given a 2D grid, each cell is either an house 1 or empty 0 (the number zero, one), find ...

  6. 定时任务 Scheduled quartz

    在项目应用中往往会用到任务定时器的功能,比如某某时间,或者多少多少秒然后执行某个骚操作等.spring 支持多种定时任务的实现,其中不乏自身提供的定时器.接下来介绍一下使用 spring 的定时器和使 ...

  7. Oracle iops测试

    DECLARE  lat  INTEGER;  iops INTEGER;  mbps INTEGER;BEGIN  DBMS_RESOURCE_MANAGER.CALIBRATE_IO(4, 10, ...

  8. git log filter(六)

    显示前10条提交记录: root@vmuer-VirtualBox:/media/vmuer/share/cmake-uart-server# git log -10 commit b056dacb0 ...

  9. 2019qbxt游记

    Day 1 2019.8.6 来到qbxt的第一天,虽然早就对宾馆的等级做好了准备,但是还是十分的失望,外观是真的很简陋,不过里面还好的,,可以凑合. 我竟然和lbh一个宿舍!!!这次外出学习必将不安 ...

  10. Django基础之redirect()

    参数可以是: 一个模型: 将调用模型的get_absolute_url()函数 一个视图, 可以带有函数: 可以使用urlresolvers.reverse来反向解析名称 一个绝对的或相对的URL, ...