一,先谈关于水缸漏水的问题

  谈到PID原理入门的时候,大家经常会举的一个例子就是水缸漏水的例子。这里把一个解释水缸漏水的帖子放在这里:https://blog.csdn.net/qq_41736609/article/details/80035400。我就不对这个例子进行展开讲解了,这里我要首先谈的是,这个例子对大家的一个误导。我们先看一个典型的PID控制的简单系统:

  

  我们可以看到,在这个系统下,误差函数error(t)经过PID调节后得到的e(t)。会由经过控制系统的传递函数而得到yout(t),这里我们就会发现一个问题:在水桶问题对PID调节的讲解中,我们是通过error(t)对水桶的加水情况进行了一个补正的,但是实际情况是什么呢?在PID的控制系统中,我们是直接通过PID调节得到的函数作为了控制系统的输入函数,而非补正,因为在这里我认为大家经常谈论的水桶问题对PID的入门有一个非常大的误导。下面我会从流程控制图的角度为大家解释PID控制的基本原理。

  二,从流程控制图的角度对PID算法的作用进行解释

 首先老规矩,列出PID控制算法的基本公式:,只要是稍微接触PID算法的人,想必对这个公式是很熟悉了,接下来会针对PID中的三个参量,逐步进行讲解。

  1.从开机以来传感器所有采样点的一个数据序列
  X1、X2、X3、…Xk-2、Xk-1、Xk
  2.分析采样点的数据序列,可以挖掘出3个方向上的信息
  ①Ek=Sv-Xk
  1)Ek >0 当前未达标
  2)Ek =0 已经达标
  3)Ek <0 当前已经超标

  我们设定OUT = Kp*Ek,为了简单起见,直接把系统的传递函数默认为1,这样得到的yout = OUT,初看时好像很难做到,但是我们首先考虑不存在外部扰动的情况,这时由前面的关系式可以推出:rin - yout = Ek,又有,yout = Kp*Ek,可以推导出表达式:rin = yout + Ek = (Kp + 1)Ek。我们发现了什么?实际上rin和yout是有一个确定的关系存在的,并且这个关系和Kp相关,Kp越大,两者便越接近。(有朋友提到P控制方案有一个缺点,也就是Ek等于0的时候不会进行控制,实际上是不存在这点的,我们可以看到当Ek等于0后,yout随之改变,系统再次出现闭环,实现了闭环的负反馈。

  

  -------------------------------------------------------------分割线---------------------------------------------------------

这里是积分讲解部分:

  ②Ek=Sv-Xk
  X1、X2、X3、…Xk-2、Xk-1、Xk
  在每一时刻都会产生一个误差,将其记录下来即为一个误差序列:
  E1、E2、E3…Ek-2、Ek-1、Ek
  这些误差中有正有负,大于零说明未达标,小于零即为已达标。
  Sk= E1+E2+E3…Ek+Ek-1+Ek
  1)Sk>0 过去这段时间,大多数是未达标的。
  2)Sk=0过去这段时间,大多数是已达标的(可能性很小)。
  3)Sk<0过去这段时间,大多数是已超达标的。

  我们有提到过单纯的P调节的问题:也就是当yout受到外部扰动时,单纯的P调节很难让系统稳定下来,这个时候就需要积分调节起作用了,这里可以先举一个不太恰当的比喻,也就是在yout后面放置一个-0.2t的扰动,yout = Kp*Ek - 0.2t,因为在每次的调节过后,都会受到这样一个扰动。同样我们写出yout与rin的关系式,此时这个关系式变成了:yout = (Kp*rin - 0.2t)/(Kp +1),这里才是我们应该注意的问题,就是说这个部分会有一个-0.2t的误差一直是存在的。而且随着系统运行时间的变化,这个误差还会逐渐增大。这里我们看一看下面的例子:

此为一个去掉了积分参数,然后再输出函数中加入一个时间函数进行扰动的例子,他的对比图如下所示:

  我们可以看到,这里引入这个与时间正相关的扰动,会使得没有I参数的调节完全失效,输出变量将会随着时间的增长不断增加。然后我们看看在加入积分调节后,情况会变得怎么样:

与之前相比,这里引入了一个积分的调节功能,让我们看看他的调节波形:

很明显可以看到,我们之前逐渐偏离的问题,因为积分调节的引入被成功解决了。

--------------------------------分割线------------------------------------

  这里是微分讲解部分:微自动控制系统在克服误差的调节过程中可能会出现振荡甚至是失稳,其原因是由于存在有较大惯性组件(环节)或滞后组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。而只引入P项是不够的,它仅仅是放大了误差的幅值,但是加入微分项后,它能预测误差变化的趋势,从而避免了被控量严重超调,正是D控制的预测作用,改善了系统调节过程中的动态特性,加快了调节也就是消除误差的过程。在微分D控制中,输出与输入误差信号的微分(即误差的变化率)成正比关系。

(pid联合控制时的方式为,P控制先走到98或102,然后I控制在100步处来回晃几次,而此时D的作用是减少晃的幅度、次数等振荡因素以及避免失稳情况的发生,从而改善系统调节过程中的动态特性,加快了调节过程也就是消除误差的过程,完成控制。)该部分摘自:https://blog.csdn.net/baidu_39525096/article/details/89460966?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

推荐的PID书籍:《先进PID控制MATLAB仿真(第二版)》

链接:https://pan.baidu.com/s/1dZwl6Xl7DddRnR1VsAKBeg
提取码:ipi0

  

  

基本的PID算法整理(水缸的例子有问题!!)的更多相关文章

  1. PID算法笔记2

    总所周知,PID算法是个很经典的东西.而做自平衡小车,飞行器PID是一个必须翻过的坎.因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂.并举出PID的形象例子来帮助理解PID.一. ...

  2. PID算法

    所谓PID就是比例-积分-微分的英文缩写,但并不是必须同时具备这三种算法,也可以是 PD, PI,甚至只有 P算法控制,下面分别介绍每个参数的含义:首先需要明确一个事实就是,要实现PID算法,必须在硬 ...

  3. 单片机之PID算法

    说到PID算法,想必大部人并不陌生,PID算法在很多方面都有重要应用,比如电机的速度控制,恒温槽的温度控制,四轴飞行器的平衡控制等等,作为闭环控制系统中的一种重要算法,其优点和可实现性都成为人们的首选 ...

  4. 四轴PID思路整理

    参考资料: https://blog.csdn.net/nemol1990/article/details/45131603 https://blog.csdn.net/qq_27114397/art ...

  5. 广告成本控制-PID算法

    今天我们来聊聊广告成本控制中常用的PID算法. 0.PID算法简介 首先我们可以看下维基百科中给PID算法的定义:由比例单元(Proportional).积分单元(Integral)和微分单元(Der ...

  6. 线性控制原理——PID算法应用

    使用控制系统(PID)控制被控对象 PID控制的三要素:控制器,被控对象,反馈器.控制器就是一个数学模型,就PID来说,等同于PID算法.是对反馈量的一个处理与输出.通俗的说就是对于每个被控的量,我的 ...

  7. PID算法学习记录

    最近做项目需要用到PID算法,这个本来是我的专业(控制理论与控制工程),可是我好像是把这个东西全部还给老师了. 没办法,只好抽时间来学习了. 先占个座,后续将持续更新!

  8. 位置式PID与增量式PID算法

    位置式PID与增量式PID算法  PID控制是一个二阶线性控制器     定义:通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能.     优点             ...

  9. PID算法(c 语言)(转)

    PID算法(c 语言)(来自老外) #include <stdio.h> #include<math.h> //定义PID 的结构体 struct _pid { int pv; ...

随机推荐

  1. sge的简单的应用

    1.sge提交脚本qsub 1.qsub work.sh work.sh 不能以数字开头 2.qsub work.sh  默认工作路径为/home/username 3.qsub -cwd work. ...

  2. Robot Framework(4)——Selenium2Library关键字

    在第一讲的时候,已经安装了Selenium2Library这个库,这一篇主要来整理介绍一下Selenium2Library中的常用关键字,为我们之后的web自动化打好基础 一.browserManag ...

  3. instanceof判断问题

    有时候我们根据instanceof来判断对象的数据类型 但是 用instanceof判断基本数据类型时 会不靠谱 例如 let str = '123' let str1 = new String(&q ...

  4. 启用valgrind的MPI支持

    TL;DR sudo apt install valgrind-mpi 内存泄漏和越界问题,是C/C++程序常见问题.有一些工具提供了检测内存泄漏的功能,如 valgrind 的 memchecker ...

  5. 洛谷p1052过河 路径压缩+dp

    洛谷 P1052 过河 思路部分可以看这篇博客 我将在这里对其进行一些解释与补充 首先我们先看题 乍一看 这不是模板题吗 然后开开心心的敲了一个简单dp上去 #include<iostream& ...

  6. sql 游标(理论)

    游标是处理结果集的一种机制 --声明游标 --ISO 语法 DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR FOR select_state ...

  7. 获取访问的ip地址

    最近有一个这样的需求:{ 内网没有访问互联网的权限(没网) 内网:访问链接地址,跳转http://www.123.com 外网:访问链接地址,跳转http;//www.456.com } 在网上看到一 ...

  8. 要不是真的喜欢学技术,谁会来用Python爬小姐姐啊

    养成习惯,先赞后看!!!不用于任何商业价值,只是自己娱乐.否则 爬虫爬的好,牢饭吃到饱.这是我们这次爬取的网址:https://www.vmgirls.com/ 很多人学习python,不知道从何学起 ...

  9. Labview学习之路(七)for和while的理论要点

    for循环 循环次数可以为0(N的接线端为) 终止条件:1. 完成N次循环.      2. 添加条件接线端,就像while循环的红点一样,(方法,右键点击边框,添加条件接线端) 数组通过自动索引接入 ...

  10. Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...