基本的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; ...
随机推荐
- 第6篇scrum冲刺(5.26)
一.站立会议 1.照片 2.工作安排 成员 昨天已完成的工作 今天的工作安排 困难 陈芝敏 研究云开发,更新了登录模块,把用户的信息传入数据库了 学习云开发,云函数调用以及数据的前后端传递 遇 ...
- Python1--简介及基础语法
0. 简介 Python易于学习的编程语言,有很多现成的第三方库可以调用,不用重复造轮子,老话说:"人生苦短,我用 Python" 1. 安装Python Mac:brew ins ...
- 小案例-WebSocket实现简易聊天室
前言 在详解 HTTP系列之一讲到HTTP/2.0 突破了传统的"请求-问答模式"这一局限,实现了服务器主动向客户端传送数据.而本章将通过一种在单个TCP连接上进行全双工通信的协议 ...
- linux系统工程师修改打开文件数限制代码教程。服务器运维技术
提示linux文件打开错误,修改linux打开文件数参数. /etc/pam.d/login 添加 session required /lib/security/pam_limits.so 注意看这个 ...
- 关于SpringBoot集成JDBCTemplate的RowMapper问题
JdbcTemplate 是Spring提供的一套JDBC模板框架,利用AOP 技术来解决直接使用JDBC时大量重复代码的问题.JdbcTemplate虽然没有MyBatis 那么灵活,但是直接使用J ...
- shader效果
Unity Shader - 消融效果原理与变体 https://www.jianshu.com/p/d8b535efa9db
- 我竟然才知道slf4j里还有个MDC
大家好久不见,我是walking.今天给大家带来一个日志方面的知识——MDC,不知道大家认识不,反正我是最近刚知道的 初见MDC 前两天看项目中的代码,无意中看到一个自定义的线程池 MDCThread ...
- 动态路由 - OSPF 一文详解
动态路由 在之前的文章中,介绍了基于距离矢量的路由协议.而在今天这这一部分中会主要讲解链路状态的路由协议,对于动态的路由协议来说,需要具备如下的能力: 发现远端网络 路由器可以直接获得直连路由,这是由 ...
- 区间查询与等效minus查询
--表结构 create table hy_emp( id number(4,0) primary key, name nvarchar2(20) not null, edate date) --充值 ...
- leetcode刷题-80.删除排序数组中的重复项 II
题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. ...