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

  谈到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. random模块python

    random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串. random.random()    用于生成一个随机浮点数:range[0.0,1.0) ? 1 2 import ran ...

  2. 团队作业5:Alpha版本测试和发布(歪瑞古德小队)

    目录 一.项目文档和代码 二.Alpha版本测试报告 2.1 功能测试 2.1.1 功能列表 2.1.2 场景测试 2.1.3 测试结果 2.1.4 bug清单 2.2 兼容性测试 2.3 性能测试 ...

  3. 在服务器上使用python-gym出现的显示问题

    参考链接: http://www.luyixian.cn/news_show_392045.aspx https://www.cnblogs.com/cenariusxz/p/12666938.htm ...

  4. jQuery源码分析系列(一)初识jQuery

    一个工厂 (function(global, factory){ "use strict" // operation_1 })(typedef window !== "u ...

  5. Chrome 发一个请求,后台Controller 执行2次

    chrome 每发一次请求,都会执行2次controller,换成其他浏览器就不会. 最后发现是这个插件导致的,果断删除.

  6. 读Twinsen的深入探索透视投影变换

    2017.10.16更新,分割线下面是以前的文字,有表达的意思,却言不达意,实属羞耻,看官只需看前面文字即可. Twinsen大神的<深入探索透视投影变换>有几个点说得不够清晰,我这里提一 ...

  7. Macos 编译运行调试Mysql源代码

    准备编译工具Clion 下载地址 工具是macos用的系统 百度云盘下载地址(密码: 7dus) 下载mysql源码 Mysql源码下载地址 下载boost boost下载地址 前期准备工作 MySQ ...

  8. C++——大小写转换

    代码如下: #include <iostream> using namespace std; int main() { char ch; cin>>ch; if(ch>' ...

  9. Java高并发系列——检视阅读

    Java高并发系列--检视阅读 参考 java高并发系列 liaoxuefeng Java教程 CompletableFuture AQS原理没讲,需要找资料补充. JUC中常见的集合原来没讲,比如C ...

  10. python图片转码为base64

    import base64 def image_base64(): with open(image_path, 'rb', )as f: base64_data = base64.b64encode( ...