PID控制原理详解(一)
PID的理解
关于理解PID控制算法最典型的一个例子就是一个漏水的水缸的问题。网上有很多讲解PID的帖子会讲到这个例子。这里我也把我自己对于PID的理解用这个例子阐述一遍。
有个漏水的水缸,而且漏水的速度还不是恒定的。然后我们还有个水桶,我们可以控制往水缸里面加水或者从水缸里面舀水出来。另外我们可以检测水平面。现在我们的目的就是要控制水平面稳定在我们想要的任何一个平面上。
注意我们使用PID需要在一个闭环系统里面。什么叫闭环系统,就是有输入有反馈,输入就是能输入一个量去影响和控制我们的系统,反馈就是我们要能知道我们最终控制的东西的状态。在这个漏水的水缸系统中,输入就是这个水桶,我们能通过水桶往水缸里面加水或者从水缸里面舀水出来来影响我们水缸的水平面,反馈的话也就是说我们要能测量水平面,知道水平面是多少。控制系统原理图如下(原理图没有用别人的,有一些区别,道理上一样):
基本公式要背过:
其中Kp为比例系数,Ti为积分时间常量,Td为微分时间常量。
比例控制理解
首先是比例控制。比例控制就好比是通过水桶往水缸加水或者从水缸舀水。假设我们需要把水平面稳定在A平面,而实际水平面在B平面,那么水平面差值Err=A-B,那这个时候我们需要往里面加水的量就是Kp*Err,Kp就是我们的比例控制系数。
如果A>B,Err为正,就往水缸里面加水;如果A<B,Err为负,就从水缸里面舀水出来。那么只要预期水平面和实际水平面有差值,我们都会通过水桶去加减水来调整系统。同时Kp的大小也有对系统的性能有影响。如果Kp的值比较大,优点是从B平面达到A平面的速度快,缺点是在B平面已经接近A平面的时候系统会产生比较大的震荡。如果Kp的值比较小,优点是B平面在接近A平面的时候系统震荡小,缺点是从B平面达到A平面的速度慢。
这里也许有人会有疑问,如果这里把比例控制系数Kp直接设置成1,然后加水的量直接为Err=A-B不就可以了。然而实际上很多系统是做不到这点的。比如温度控制系统,实际温度为10度,我要通过加热把温度提升到40度,这里难道我们能一次性准确的给系统加30度?显然这是做不到的。那么比例控制的最终结果是Err的值趋向于0。比例控制部分公式如下图:
课堂笔记:
增大开环增益能减小系统稳态误差,但系统的相对稳定性会降低,甚至造成闭环系统不稳定(振荡严重),通常比例控制不单独使用。
微分控制理解
然后我们先看看微分控制。在我们的比例控制的作用下,Err是开始减小的(假设一开始预期水平面A大于实际水平面B,也就是说Err是一个正值),那么也就是说Err随时间是一条斜率小于0的曲线,那么在周期时间内,Err越大,微分的绝对值越大,那么也就对Err的减小速度是起到抑制的作用的,直到最后斜率为0微分才会停止作用。微分公式如下:
那么随着微分的影响,Err曲线的斜率最终是趋向于0的,如下图:
课堂笔记:
微分控制能反映输入信号的变化趋势,因此在输入信号的量值在变化太大之前可为系统引入一个有效的早期修正信号以增加系统的阻尼程度,从而提高系统的稳定性,但一阶微分的高通特性使得该控制器易于放大高频噪声。
积分控制理解
积分控制部分的作用主要是用来消除静差。那么积分是怎样来消除静差的呢?
比例控制只能尽量将Err调节到0,而微分的作用是将曲线的斜率控制到0则停止对其作用,但斜率为0的时候Err并不一定为0。
这个时候我们就需要积分来起作用了。我们知道曲线的积分相当于曲线与x轴围出来的面积。如下图,积分作用的目的是使红色部分的面积和蓝色部分的面积的和为0,那么即使系统在比例控制和微分控制部分已经趋于稳定,只要Err不为0就会存在静差,只要存在静差那么积分就会对系统产生影响,直到系统的Err值为0。那么这样我们的PID控制在理论上就可以达到一个非常精确的控制效果。
来看看我们的积分公式部分:
课堂笔记:
开环传递函数分母中的s数量代表了系统型,积分控制提高了型次,消除减弱了系统的稳态误差;但是积分引入了相位滞后,使得系统相对稳定性变差;一阶微分环节的出现提高了系统的阻尼程度,缓和了控制器零极点对系统稳定性及动态过程的不利影响。
一个纯积分环节相当于引入了一个-90°的滞后,一阶微分环节就减缓了滞后。
PID算法离散化
假设采样时间间隔为T,则在k时刻:
偏差为e(k);
积分为e(k)+e(k-1)+e(k-2)+...+e(0);
微分为(e(k)-e(k-1))/T;
从而公式离散化后如下:
比例系数:Kp,
积分系数:Kp*T/Ti,可以用Ki表示;
微分系数:Kp*Td/T,可以用Kd表示;
则公式可以写成如下形式:
PID算法的离散形式就是这样了,这就是我们平时说的位置式PID。
但是为什么还要增推算量式?
一个累加符号使得微机的内存可能不够用,一个字节八位最多存到255,第二点就是掉电之后产生的产生的影响非常大,之前存储的状态会全部丢失,所以要推算对状态记录要求不高的增量式。
接下来我们继续推算增量式PID,根据上面公式我们可以求得:
上式就是增量式PID的表现形式,计算出来的增量只跟最近三次的偏差值有关。注意这里计算出来的是增量值,也就是说如果我们要求u(k)的话应该是
相关资料:
http://wenku.baidu.com/linkurl=XtnOjEGrIev7ZUmlwAIR7IEMG0YTvxV3YKpZMsVbEu8FWRsgAeVTLmJCe2K99fjsHuAGHq1c6_s6pqv6JJdYoiA1KcSQVLkV6HIW-_0w88m
http://wenku.baidu.com/link?url=DliKXRLALX6O-uW6glxLb5xW4RWIQm0Ia1PAR4nN4cguFAChMyoYk2XOaikcbIKBWCgmVnVsYnBLN1Ephm7Ly2SHvWioAN3drWlUgvvbFmi
http://blog.gkong.com/liaochangchu_117560.ashx
PID控制原理详解(一)相关推荐
- PID算法详解(精华知识汇总)
注:本篇文章针对PID算法的类型做了较为全面的整理和归纳,有的类型理解较为困难,但是希望读者能有所了解和印象,不懂的地方可以通过查阅相关书籍和网站自行领悟. 文章末尾附有PID相关资料书籍和知识总结的 ...
- mpc模型预测控制原理详解
mpc模型预测控制原理详解 前言 mpc算法步骤 mpc算法推导 前言 本文是对mpc模型预测控制学习的记录,主要参照了DR_CAN老师的视频进行学习.视频专栏链接:DR_CAN老师mpc视频专栏.在 ...
- 四轴PID控制算法详解(单环PID、串级PID)
正文开始:这篇文章分为三个部分: PID原理普及 常用四轴的两种PID算法讲解(单环PID.串级PID) 如何做到垂直起飞.四轴飞行时为何会飘.如何做到脱控? PID原理普及 1. 对自动控制系统的 ...
- PID算法详解(2)---PID参数整定
简易工程法整定PID参数--归一参数整定法 除了上面讲的一般的扩充临界比例度法而外,Roberts P.D在1974年 提出一种简化扩充临界比例度整定法.由于该方法只需整定一个参数即 ...
- PID算法详解(1)
根据偏差的比例(P).积分(I).微分(D)进行控制(简称PID控制),是 控制系统中应用最为广泛的一种控制规律. PID调节器之所以经久不衰,主要有以下优点: (1)技术成熟,通用性强 (2)原理简 ...
- PLC串级PID控制详解(炉膛和中央空调系统控温)
关于PID的其它理论知识可以参看专栏的其它文章,这里主要讲下串级PID和双容水箱的数学模型液位的微分方程和其伯努利方程推导,双容水箱的液位控制如果采用串级PID,我们的外环PID 目标值是流量 F1, ...
- 伺服驱动器生产文件_直流伺服系统的组成和控制原理详解
↑ 点击上方"伺服与运动控制"关注我们 直流伺服和交流伺服相似,可以采用控制器开环控制方式,控制器半闭环控制和全闭环控制系统. 直流伺服系统控制面板结构如下,面板右侧为与直流伺服电 ...
- STM32高级应用专题——基于STM32的PID温控器|PID控制算法详解|位置式PID|增量式PID
一.位式控制算法 位式控制基本结构 位式控制基本结构图 Sv:用户设定的值 执行部件:一般是开关型的部件(比如说MOS管.继电器.可控硅之类的开关型的器件) 控制对象:加热器.步进电机.电磁阀 Pv: ...
- Mysql加锁过程详解(3)-关于mysql 幻读理解
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
最新文章
- Apache 的prefork MPM和worker MPM
- 龙芯3A4000 VNC配置
- C++类型转换实现不同类型相加【复数与double类型相加】
- 云+社区「开源之道」主题直播,这些技术大佬都说了哪些干货?
- android日期选择区间控件_Android日期时间选择器实现以及自定义大小
- 图像处理结果的度量 —— SNR、PSNR、SSIM
- 全国计算机信息大赛noi,全国青少年信息学竞赛NOI系列赛事汇总
- 产品原型设计实战(一):产品设计相关工作
- 台式计算机网线,台式电脑如何连接宽带_台式电脑如何连接网线
- 安装显卡后计算机无法启动,Win10更新显卡驱动后无法开机进入系统的解决方法...
- 苹果显示未找到服务器,苹果浏览器找不到服务器是怎么回事
- 效率源linux,FLOOPY效率源硬盘坏道修复工具 修复坏硬盘的时候 为何只能手动修复 而自动修复又说找不到硬盘?...
- python的接口和抽象类
- 你的网站其实并不安全,真实的黑客攻防事件
- LindDotNetCore~基于模块化注入的介绍
- django用户注册、登录、注销和用户扩展
- java.lang.NoSuchFieldError: No static field id_sl_hlry of type I in class Lcom/bsoft/mob/common/R$id
- CAD dxflib 圆弧的标注
- Amesim(六):如何使用回放功能
- Gated Fully Fusion for Semantic Segmentation(GFF)