基本的PID算法整理(水缸的例子有问题!!)
一,先谈关于水缸漏水的问题
谈到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算法整理(水缸的例子有问题!!)的更多相关文章
- PID算法笔记2
总所周知,PID算法是个很经典的东西.而做自平衡小车,飞行器PID是一个必须翻过的坎.因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂.并举出PID的形象例子来帮助理解PID.一. ...
- PID算法
所谓PID就是比例-积分-微分的英文缩写,但并不是必须同时具备这三种算法,也可以是 PD, PI,甚至只有 P算法控制,下面分别介绍每个参数的含义:首先需要明确一个事实就是,要实现PID算法,必须在硬 ...
- 单片机之PID算法
说到PID算法,想必大部人并不陌生,PID算法在很多方面都有重要应用,比如电机的速度控制,恒温槽的温度控制,四轴飞行器的平衡控制等等,作为闭环控制系统中的一种重要算法,其优点和可实现性都成为人们的首选 ...
- 四轴PID思路整理
参考资料: https://blog.csdn.net/nemol1990/article/details/45131603 https://blog.csdn.net/qq_27114397/art ...
- 广告成本控制-PID算法
今天我们来聊聊广告成本控制中常用的PID算法. 0.PID算法简介 首先我们可以看下维基百科中给PID算法的定义:由比例单元(Proportional).积分单元(Integral)和微分单元(Der ...
- 线性控制原理——PID算法应用
使用控制系统(PID)控制被控对象 PID控制的三要素:控制器,被控对象,反馈器.控制器就是一个数学模型,就PID来说,等同于PID算法.是对反馈量的一个处理与输出.通俗的说就是对于每个被控的量,我的 ...
- PID算法学习记录
最近做项目需要用到PID算法,这个本来是我的专业(控制理论与控制工程),可是我好像是把这个东西全部还给老师了. 没办法,只好抽时间来学习了. 先占个座,后续将持续更新!
- 位置式PID与增量式PID算法
位置式PID与增量式PID算法 PID控制是一个二阶线性控制器 定义:通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能. 优点 ...
- PID算法(c 语言)(转)
PID算法(c 语言)(来自老外) #include <stdio.h> #include<math.h> //定义PID 的结构体 struct _pid { int pv; ...
随机推荐
- 测量定位实践-:C#采集控制
用Halcon已经完成采集,在在C#中不行. 其实还是比较简单,主要是Halcon封装的太好了. 主要是以下几个算子: *打开 Image Acquisitionopen_framegrabber ( ...
- 推断(inference)和预测(prediction)
上二年级的大儿子一直在喝无乳糖牛奶,最近让他尝试喝正常牛奶,看看反应如何.三天过后,儿子说,好像没反应,我可不可以说我不对乳糖敏感了. 我说,呃,这个问题不简单啊.你知道吗,这在统计学上叫推断. 儿子 ...
- 牛客网PAT练兵场-人口普查
题目地址:https://www.nowcoder.com/pat/6/problem/4054 题解:结构体排序即可 /** * Copyright(c) * All rights reserved ...
- Appium框架
1.通过TestNG单元测试框架管理/执行测试用例 2.TestNG参数化,App启动的四个配置存到Testng.xml中 3.通过page object (PO)设计模式,测试用例和页面元素分离,页 ...
- 跨站请求伪造(csrf)的防护手段
CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 造成的问题:个人隐私泄露以及财产安全. CS ...
- 记录一次mybatis缓存和事务传播行为导致ut挂的排查过程
起因 rhea项目有两个ut一直都是挂的,之前也经过几个同事排查过,但是都没有找到解决办法,慢慢的这个问题就搁置了.因为之前负责rhea项目的同事离职,我临时接手了这个项目,刚好最近来了一个新同事在做 ...
- Unity3D如何有效地组织代码?
本文整理自知乎,原文链接:http://www.zhihu.com/question/21070379 问题: Unity3D可以说是高度的Component-Based Architecture,同 ...
- webpack做项目优化
webpack优化 -- compression-webpack-plugin 开启gzip 打包的时候开启gzip可以大大减少体积,非常适合于上线部署.下面以vue-cli2.x项目为例,介绍如何在 ...
- Thymeleaf 中如何实现including
Problem:Jsp中有including,Thymeleaf中有无类似的语法? Solution:有,Themeleaf中提供同样功能的标签是 th:fragment="blockNam ...
- 20190923-04Linux用户管理命令 000 012
useradd 添加新用户 1.基本语法 useradd 用户名 (功能描述:添加新用户) useradd -g 组名 用户名 (功能描述:添加新用户到某个组) 2.案例实操 (1)添加一个用户 [ ...