通过Excel学习PID算法(一步步理解它的KP,KI,KD)

2023-05-16

 PID原理

 PID控制算是应用非常广泛的经典控制算法。但是怎么理解PID这三个参数呢?在参考了别人的文章之后,我还是有点一知半解,这时候发现不自己动手算一算是很难理解PID了,但是我又不想做这种重复的计算,于是想到了通过Excel来举个例子。

接下来,我们通过一个很简单的例子来表示一个PID控制,并用Excel来计算PID带来的好处等等。这个例子就是,我们要往桶里倒水,并且我们的目标是把水位维持在1米高,初始水位为0.5米,只能往桶里一次一次的倒水。那么我们开始我们的学习吧。

比例控制算法

对于比例控制算法,我们可以简单的理解为,每次倒入水前计算当前的误差(error),然后给这个误差乘以一个比例系数kp。那么我们水位的改变量u与error之间的关系为:u=kp*error。然后就不停的计算误差,不停的往桶里倒水。在这里,通过excel表格计算可很直观的看出来,误差越来越小的,实际越来越接近1。

 

目标11111
实际(=上一次实际+kp*当前的error)0.50.50.750.8750.9375
error(上一次的目标-上一次的实际) 0.50.250.1250.0625
kp0.50.50.50.50.5

我们的比例算法很好的完成了它的任务,随着倒的次数越来越多,那么我们实际也更加接近于我们的目标值。那么我们为什么还需要使用到KI和KD呢?那么我们接下来提出一个假设,假设桶在漏水,每次往桶里倒水的同时,桶都会流失0.1米水高的水。因此每次的变化量为u=kp*error-0.1,继续用excel进行一次计算吧。

目标11111多次后1
实际(=上一次实际+kp*当前的error-0.1)0.50.40.550.6750.73750.799939
error(上一次的目标-上一次的实际) 0.50.450.3250.26250.200061
kp0.50.50.50.50.50.5

可以看到,我们每次往桶里加水之后,由于我们的桶漏水了,所以导致在多次倒水之后,我们的实际水高维持到0.8m附近,所以导致了一个稳态误差,这意味着我们通过比例控制算法是永远都不能实现到1米水高的愿望。 (在实际情况中,这种类似水缸漏水的情况往往更加常见,比如控制汽车运动,摩擦阻力就相当于是“漏水”,控制机械臂、无人机的飞行,各类阻力和消耗都可以理解为本例中的“漏水”)所以,单独的比例控制,在很多时候并不能满足要求。

积分控制算法

由于比例控制算法在实际应用过程中的局限性很大,因此我们就需要想个办法去消除这个稳态误差,而如何去消除这个稳态误差呢?我们可以想一个办法,我们把每次计算出来的误差累加起来,当如果遇到了稳态误差,那我们这个数据就会越来越大,因此每次更新数据时,就可以把它添加上去,就能把稳态误差解决啦。每次添加的水量的计算公式为u=kp*error-0.1+ ki∗积分

目标111111111111111
实际(=上一次实际+kp*当前的error-0.1+ki*积分)0.50.450.7051.01451.195051.2013451.0972310.9802450.9172930.9211040.9642811.0091241.0314661.028241.011019
error(上一次的目标-上一次的实际) 0.50.550.295-0.0145-0.19505-0.20135-0.097230.0197550.0827070.0788960.035719-0.00912-0.03147-0.02824
kp0.50.50.50.50.50.50.50.50.50.50.50.50.50.50.5
ki0.10.10.10.10.10.10.10.10.10.10.10.10.10.10.1
积分(=上一次的积分+本次的误差)00.51.051.3451.33051.135450.9341050.8368750.8566290.9393361.0182321.0539511.0448281.0133610.985121

这里我们取了一段很长的数据来分析一下,可以看到我们的实际值在1m附近不断的波动。我们的想法是,无限的趋进于1。但是看图表中的第九次(标红)和第十次(标红),我们可以发现我们的误差不是在缩小反而还更大了。那么为什么会有这种问题呢?这个肯定不是kp*error的问题,因为error非常小了。我们可以看到,由于积分维持在0.8左右,因此每次改变的量对于趋紧稳定后的数值来说,其变化量是很大的,因此其稍微改变一点,就会导致其误差变大。

同时可以看到在初期,对于使用积分控制算法来说,其超过了我们的目标值(超调量),最大达到了1.2m,如果我们的桶只有1.1m高,那么可能就会导致我们的水往外溢出来,这是我们不想看到的情况。如果在实际过程中,可能就因为温度过高或者电压过高,发生不可逆的后果。

而且我们可以看到u=kp*error-0.1+ki∗积分。当error趋紧为0时,那么每次添加的u为0。那么ki∗积分≈0.1。因此积分趋进于1。

通过百度百科我们可以知道:

1.比例环节 即时成比例的反映控制系统的偏差信号,偏差一旦产生,控制器立即产生控制作用,以减少偏差。通常随着值的加大,闭环系统的超调量加大,系统响应速度加快,但是当增加到一定程度,系统会变得不稳定。

2.积分环节 主要用于消除静差,提高系统的无差度(型别)。 [1]  积分作用的强弱取决于积分常数,积分常数越大,积分作用越弱,反之越强。闭环系统的超调量越小,系统的响应速度变慢。

微分控制算法

引进了积分项之后,我们的控制模型虽然解决了稳态误差,但是还是有问题。这个问题就是实际值在不断的波动。同时它还有一个超调量的东西。这是我们不希望看到的,那么我们该如何去解决这个问题呢?这里就需要引进微分的概念了。其理解可以想象成在往桶里加水时,我们可能能够预感到其会超过我们想要的数值,然后在加水之前,把一部分水给倒掉,从而达到降低其超调量的作用。微分在这里可以用相邻的error的差值进行表示,因此微分可以表示为:kd*(error(t)-error(t-1)),在这里我们的u=kp*error-0.1+ ki∗积分+kd*(error(t)-error(t-1))。值得注意的是,由于误差是越来越小的,因此其微分的值一般为负值。

 

目标111111111111111
实际(=上一次实际+kp*当前的error-0.1+ki*积分+kd*微分)0.50.450.710.9931.14441.153021.0849161.0116830.9718460.9681020.9838571.0011481.0102931.0105781.006119
error(上一次的目标-上一次的实际) 0.50.550.290.007-0.1444-0.15302-0.08492-0.011680.0281540.0318980.016143-0.00115-0.01029-0.01058
kp0.50.50.50.50.50.50.50.50.50.50.50.50.50.50.5
ki0.10.10.10.10.10.10.10.10.10.10.10.10.10.10.1
kd0.10.10.10.10.10.10.10.10.10.10.10.10.10.10.1
积分(=上一次的积分+本次的误差)00.51.051.341.3471.20261.049580.9646640.9529810.9811351.0130331.0291761.0280291.0177351.007157
微分(=本次的误差-上次的误差)  0.05-0.26-0.283-0.1514-0.008620.0681040.0732330.0398370.003744-0.01575-0.01729-0.00915-0.00029

其最大值为1.15,超调量得到了减小。至此,PID的每个过程的功能能够简单的理解到了。

excel文件:https://github.com/zengqz98/excelforpid

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过Excel学习PID算法(一步步理解它的KP,KI,KD) 的相关文章

  • 使用 VBA 通过简单命令从非连续范围的并集获取值到数组中(无循环)

    我有以下任务 表面上很简单 使用 VBA 将电子表格上多个列的值复制到二维数组中 为了让生活更有趣 这些柱子并不相邻 但它们的长度都相同 显然 可以通过依次循环每个元素来做到这一点 但这看起来非常不优雅 我希望有一个更紧凑的解决方案 但我很
  • 如何在字符串vba中包含引号

    我想存储以下文本 Test1 Monday Test Abcdef 全部在字符串中包含引号 我知道要在字符串中包含引号 我必须包含 之前 但在这里这不是一个很好的解决方案 因为我在文本中有太多这样的解决方案 知道如何一次完成这一切吗 您有两
  • 字典、集合和数组的比较

    我正在尝试找出字典与集合和数组相比的相对优点和功能 我发现了一篇很棒的文章here http www experts exchange com articles 3391 Using the Dictionary Class in VBA
  • EPPlus Excel 行高不一致

    我已经使用 EPPlus 生成了一个 excel 文件 在 MS Office 2007 中一切似乎都很完美 但客户端使用的是 MS Office 2010 2013 并且在第 29 行之后未设置行高 这是一个非常奇怪的问题 我已经尝试了
  • 在Google电子表格中划分整列

    我是 Google 电子表格的一个相对较新的用户 我希望 B 列中的每个单元格都是 A 列 同一行 中内容除以 5 的结果 B1 B2 B3 等 商 应为 A1 A2 A3 等 被除数 除以 5 除数 在示例中 B1 A1 5 我知道一项一
  • 文件夹.文件的相对路径

    我有一个 Excel 文件 在同一文件夹中还有一个包含我想要包含的 CSV 文件的文件夹 使用 来自文件夹 查询 第一步将给出以下查询 Folder Files D OneDrive Documents Health Concept2 现在
  • 读取R中打开的Excel文件

    有没有办法将打开的Excel文件读入R 当Excel中打开一个excel文件时 Excel会对文件加锁 比如R中的read方法无法访问该文件 你能绕过这个锁吗 Thanks 编辑 这发生在带有原始 Excel 的 Windows 下 发生错
  • 在 VBA Excel 中查找、剪切和插入行以匹配借项和贷项值

    我在 Sheet1 中有以下设置数据 并从第 4 行 A 列开始 其中标题位于第 3 行 No Date Code Name Remarks D e b i t Cr e d i t 1 4 30 2015 004 AB 01 04 15
  • Excels COUNTIFS 函数中的数组作为条件,混合 AND 和 OR [重复]

    这个问题在这里已经有答案了 我已经在谷歌上搜索了一段时间 但似乎无法让它发挥作用 我使用 Excel 2010 希望混合使用 AND 和 OR 运算符来计算行数 我想做的是这样的 COUNTIFS A A string1 B B strin
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Redim Preserve 给出“下标超出范围”

    我想要Redim Preserve一个数组我不断收到错误 下标超出范围 我知道只有最后一个维度的大小可以更改 这正是我正在做的事情 这里出了什么问题 数组的类型是Variant BmMatrix Sheets BENCH Range a60
  • 使用 ClosedXML 创建数据透视表

    我正在尝试使用 ClosedXML V0 91 1 创建数据透视表 但我不断遇到问题 因为我的 Excel 文件包含不可读的内容 然后 Excel 工作簿在单击时删除了我的数据透视表Yes below 下面是我击中时的显示Yes 它正在删除
  • 使用 VBA 将 Excel 电子表格中嵌入的 Word 文档保存到磁盘

    我们有一个 Excel 电子表格 当前使用存储在公司 LAN 上的 Word 模板生成报告 这对于内部用户来说效果很好 但对于没有连接到 LAN 的任何人来说就不行了 例如 笔记本电脑用户 管理层不希望将模板作为单独的文件分发给外部用户 而
  • Excel - 在一列中查找重复项,然后将数量求和到另一列中?

    查找一列中的重复项 然后将数量求和到另一列中 https i stack imgur com AADjd png DATA RESULT A 1 A 11 A 1 B 7 A 9 C 5 B 2 D 4 B 2 E 8 B 3 C 5 D
  • HTML/VBA Click 事件未触发

    这是我第一次在 StackOverflow 上发布问题 到目前为止 我已经能够通过 VBA 帮助论坛解决我的大部分问题 我的问题很简单 我有一个自动数据拉取 我需要在其中导出数据 我过去曾在这方面取得过成功 但这次略有不同 我尝试单击以生成
  • 替换字符串变量中的多个字符 (VBA)

    如何替换字符串变量中的多个内容 这是我在 VBA 中的示例函数 Private Function ExampleFunc ByVal unitNr As String If InStr unitNr OE gt 0 Then unitNr
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • Excel 的 VBA - 如何检查范围的交集不为空

    我有两个问题 1 如何检查交集或范围是否不为空 例如 如果我想检查它是否为空 我会写 if application intersect r1 r2 is nothing 但有什么东西是否定虚无的吗 例如 并非没有任何事情不起作用 2 如何比
  • 在 Excel 中打开文件而不重新计算 NOW()

    在 Excel 2010 2011 和 2013 尝试了所有三个 中 以只读方式打开文件仍然会重新计算 NOW 有没有办法让excel在打开文件时不重新计算 最简单的方法是将自动 默认 计算选项切换为手动 update 首先打开一个空白的新
  • 在用户窗体终止/关闭 VBA 时调用数组

    我有一个问题 我想在用户窗体关闭时将用户窗体的内容存储在数组中 我认为我的语法正确 但似乎不会在用户窗体初始化时重新填充 我尝试将数组放入其自己的模块中 但这也不起作用 有人愿意启发我吗 示例代码 Public Sub DPArrayStu

随机推荐

  • 阿里云 CentOS7 安装图形化界面 。安装图形化界面看这一篇就够了。

    阿里云centos7 下执行eclipse 响应学校老师的要求安装eclipse用于与hadoop的操作 在这之前想过两种方法来解决服务器无图形化界面 xff0c 来操作eclipse 1 在主机上下载eclipse把需要编译的代码编译成j
  • 把ESXi中的虚拟机通过OVA/OVF导出的方式迁移到Proxmox 5

    一 前言 之前发现ESXi是免费的时候 xff0c 非常兴奋地把几台服务器都装上了 xff0c 用着确实还行 xff0c 但是用久了之后就发现 xff0c 很多高端功能需要进一步付费才能使用 xff0c 比如HA等 另外就是它还有很多局限性
  • PX4 ThoneFlow光流使用

    PX4官方光流介绍 xff1a PMW3901 Based Flow Sensors PX4 User Guide 与飞控连接 接线 xff1a G接GND xff1b V接3 3V xff1b T是TX接飞控的RX口 xff1b Y接地开
  • Ubuntu PX4无人机仿真环境配置

    目录 一 VM虚拟机安装ubuntu18 04 1 VMware安装 2 新建虚拟机 二 Ubuntu系统配置 1 更改软件安装源 2 安装中文输入法 三 PX4环境搭建 1 安装git 2 下载px4源码 3 安装ROS 4 安装MAVR
  • larave5安装过程分享-MAX OSX版本

    MAC上的平台是XAMPP xff0c 自带的版本低 我用的是XAMPP MAC版本 一 本地php环境配置 which php php xff0d v xff5c php xampp php PASH 61 34 xff0f applic
  • PX4二次开发 创建进程

    目录 一 创建进程 二 仿真测试 PX4官方手册 xff1a Module Template for Full Applications PX4 User Guide 编写参照PX4源码 src templates xff1a PX4 Au
  • 【Matlab】Matlab基础绘图整理

    Matlab基础绘图整理 一张图绘制多个子图在图片文本中添加希腊字母和特殊字符其他常用函数限制坐标轴范围添加坐标轴说明添加图例修改线条类型 标记修改线条粗细 一张图绘制多个子图 主要命令 xff1a figure 第几张图 subplot
  • PX4 磁罗盘干扰分析

    磁罗盘干扰分析 推力与磁场关系正常情况干扰情况与推力相关解决方法 与推力不相关 罗盘补偿操作流程获取用于分析的日志分析日志调整罗盘补偿参数 推力与磁场关系 无人机上的电机电流会干扰无人机上搭载的磁罗盘 xff0c PX4官方提供了一些方式
  • 【C++】进制

    目录 一 进制转换1 十进制转二进制2 十进制转八进制 xff08 同上 xff09 3 二进制转八进制4 二进制转十六进制5 八进制转二进制6 十六进制转二进制 二 位运算1 原码 反码 补码2 位运算符3 变换操作 一 进制转换 1 十
  • Ubuntu20.04安装ROS2+ROS2-PX4框架搭建

    目录 Ubuntu20 04安装ROS2Set localeSetup SourcesInstall ROS2 packageEnvironment setup测试 ROS2 PX4框架搭建Install PX4Install ROS2Se
  • Jetson Nano利用ROS2通过MicroDDS与PX4通讯

    目录 Jetson Nano安装Ubuntu20 04Ubuntu20 04 配置ROS2环境Pixhawk配置Jetson Nano上MicroDDS Agent配置及和pixhawk通讯 PX4在V1 14及后续版本中 xff0c 将原
  • 用速腾RS16跑LeGO-LOAM

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net Zed Of Zoe article
  • Visual Studio 2017环境配置MPI v9.0 并行编程环境

    目录 第一步 xff1a 下载安装mpi 官网 xff1a http www mpich org windows版官网 xff1a https msdn microsoft com en us library bb524831 v 61 v
  • 学习java基础的心得感悟

    学完java基础 xff0c 对java面向对象的思想有更加深刻的认识了 xff0c 从学习java语言概述到最后网络编程IDE的使用 xff0c 时间用了1个月零9天 xff0c 上课时间28天 xff0c 回首感觉快又感觉漫长 xff0
  • 如何使用SQL批量替换数据库特定字段中部分特定数据

    1 替换数据库特定字段中部分特定数据的SQL语句 SQL语句 xff1a update 表名 set 字段名 61 replace 字段名 原字符串 需要替换成的字符串 以将表exam major中的字段pos2019中的数据 50 替换成
  • 阿里云ubuntu16.04 server 配置方案 1 配置桌面环境

    首先为服务器配置一个桌面系统 升级一下哦 xff01 span class hljs built in sudo span apt get update span class hljs built in sudo span apt get
  • Xshell远程连接华为云服务器

    Xshell远程连接华为云服务器 一 关于华为云1 什么是云服务器2 为什么使用华为云3 我的华为云体验 二 控制台操作 1 设置密码 2 开放端口 3 切换系统 三 Xshell操作 1 下载Xshell和Xftp2 连接云服务器 一 关
  • 校园网网络连接反复断开又连接是什么原因?

    网络连接反复断开又连接是什么原因 xff1f 原因可能跟ARP攻击或擅自使用P2P终结者等攻击软件有关 因为校园内多个楼宇已部署防ARP攻击网络设备 xff0c 只要判断用户计算机感染ARP或使用P2P终结者 网络执法官 聚生网管等软件攻击
  • xuperchain源码分析-启动过程

    xuperchain的启动分为两个比较大的过程 xff0c 一个是节点的初始化 xff0c 另一个是挖坑的初始化
  • 通过Excel学习PID算法(一步步理解它的KP,KI,KD)

    PID原理 PID控制算是应用非常广泛的经典控制算法 但是怎么理解PID这三个参数呢 xff1f 在参考了别人的文章之后 xff0c 我还是有点一知半解 xff0c 这时候发现不自己动手算一算是很难理解PID了 xff0c 但是我又不想做这