最近看到了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. 掌上单片机实验室 – 实现PID自整定(11)

    一.背景 上一篇实现了小车运动控制,在程序框架下,基于FreeRTOS编写了驱动任务,包含电机控制.测速.PID调速.行走距离控制等和运动相关的功能.但 PID 调速只是完成了算法,并未真正实现调速, ...

  2. 手把手教你看懂并理解Arduino PID控制库——调参改变

    2019独角兽企业重金招聘Python工程师标准>>> 引子 本文将分析<手把手教你看懂并理解Arduino PID控制库>中第三个问题:PID控制参数突变对系统的影响. ...

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

    2019独角兽企业重金招聘Python工程师标准>>> 介绍 本文主要依托于Brett Beauregard大神针对Arduino平台撰写的PID控制库Arduino PID Lib ...

  4. Arduino PID Autotune Library

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

  5. Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统

    基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现,文章末尾附有本毕业设计的 ...

  6. 继电反馈法自整定_基于继电反馈PID自整定方法在Buck―Boost电路中应用.doc

    基于继电反馈PID自整定方法在Buck―Boost电路中应用 基于继电反馈PID自整定方法在Buck―Boost电路中应用 摘 要:DC-DC变换器在电力电子和通信等领域中有广泛应用,Buck-Boo ...

  7. matlab求系统根轨迹代码_根轨迹法、PID参数整定和matlab指令计算

    收获 (1)理解根轨迹的概念及其在控制系统设计中的作用: (2)手绘根轨迹草图,以及如何使用极端及绘制根轨迹: (3)熟悉在反馈控制系统中应用广泛的关键部件:PID控制器: (4)理解根轨迹在参数设计 ...

  8. 我的四轴专用PID参数整定方法及原理

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

  9. NodeMcu arduino ESP8266 使用Ticker库(多任务处理)

    NodeMcu arduino ESP8266 本文章学习借鉴于太极创客团队,以表感谢.官网http://www.taichi-maker.com/ ESP8266 使用Ticker库(多任务处理) ...

最新文章

  1. 快速排序的难点_数据结构考研重难点解析:快速排序
  2. 高级c++头文件bits/stdc++.h
  3. 为什么电脑下载python很慢-Python运行速度慢你知道这是为什么吗?
  4. Python练习 | Python中的运算符
  5. gcc android开发环境,[RK3399][Android7.1]开发环境搭建
  6. 为什么计算机硬盘要从c盘开始,电脑分区为何从C盘开始?英特尔科普
  7. pyculiarity解决报错ValueError: data must be a 2 column data.frame, with thefirst column...
  8. 笔记本安装linux
  9. python实现三个或三个以上列表之间元素相互组合
  10. 冰点文库下载器,文库免费下载(唯一可用的版)
  11. Win7+OpenCV2.4.10+VS2010安装教程
  12. sublime快捷键操作
  13. 正则表达式(用户名表单验证/验证座机号码/正则替换replace)
  14. 【电蜂优选科普】USB数据线接口有哪些类型呢?
  15. 实验三 高速公路收费站双收费口仿真
  16. 【python】python语法糖
  17. 既然android service是运行在主线程中的,那service还有什么用?
  18. Android 多通道录音笔记
  19. 关于 Facebook的 SWE_NG_GCR-SEAsia
  20. Firefox的扩展开发介绍

热门文章

  1. SpringBoot学习笔记(16)----SpringBoot整合Swagger2
  2. java EL表达式中${param.name}详细
  3. 如何才能成为真正的程序员
  4. Tensorflow深度学习应用(筑基篇)
  5. mfc oninitdialog 中的hwnd == null_在SOUI中使用动态多语言切换
  6. 数据卡片_VISA消息:关于VCPS 2.1卡片产品的性能和交叉测试的卡片个性化数据的更新...
  7. anaconda 怎么安装xlrd_Pyinstaller打包,文件太大了怎么办?
  8. 三宝机器人怎么充电_巨人通力导致吉祥三宝+36号故障怪现象的又一因素
  9. spring的aop_Spring AOP 小结
  10. matplotlib的colorbar自定义刻度范围