PID控制

2023-05-16

目录

  • 1 基本情况
    • 1.1 位置式PID
    • 1.2 增量式PID
    • 1.3 PID控制适用系统
  • 2 PID三个量的含义解析
    • 2.1 P:比例
    • 2.2 I:积分
    • 2.3 D:微分
    • 2.4 PID:三者的关系
  • 3 PID控制中特殊情况考虑
    • 3.1 积分限幅
    • 3.2 积分分离
    • 3.3 积分饱和
    • 3.4 梯形积分
    • 3.5 变积分PID
    • 3.6 不完全微分PID
    • 3.7 微分先行
    • 3.8 死区PID
    • 3.9 模糊PID
    • 3.10 步进PID
    • 3.11 使用带时间的PID
    • 3.12 其他
  • 4 位置型PID中如何使用与调节PID的值
    • 4.1 如何使用
    • 4.2 如何调整PID参数值
  • 5 增量型PID中参数整定
  • 5 参考文献

1 基本情况

1.1 位置式PID

(1)基本的连续PID控制
公式:
在这里插入图片描述

(2)离散PID控制
将连续的进行离散化。表述。
在这里插入图片描述

1.2 增量式PID

(1)公式推到过程
(a)k-1时刻的离散表示:
在这里插入图片描述
(b)利用U(k) - U(K-1),得到本次的增量:
在这里插入图片描述
(c)控制的输出是增量式的,就是deltUk。
(2)说明
(a)增量式PID的输出是增量,不是累加的。即为deltUk,而不是Uk
(b)在有的地方,提到了输出是U(k) = U(k) - U(k-1),这个本质上也是位置式的,只是计算过程不一样而已!!!
( c) 如果要使用增量式,因为只输出增量,所以要求控制系统自己能够保持之前的输出效果,而不需要之前的量来累积。也就是有点地方说的机构具有积分作用。如步进电机。这有点像无PD控制了。
(d)其只依赖于最近三次的数据,就能计算计算量小,对误差容忍小等。
最最重要的:
(e)增量式的PID的参数值虽然也叫PID,但是与位置式PID的PID的意义不同!! 具体说,在增量式中:I是比例,P是微分,D是二阶微分(微分的微分)。
(f)因此,后面讲的很多涉及积分调整和控制的不涉及这里
(g)后面说的比例对应这里的I,微分控制对应这里的P,输出类似。
(h)位置PID整定的方法,在增量式整定时使用其思想,不能简单的将PID进行对应

1.3 PID控制适用系统

虽然PID控制在实际控制中有非常多的应用,据说在工业上,达到95%以上应用。但是它也是有适用范围的,不是包打天下的。
它适用于线性系统,准确未二阶以内线性系统。
所谓二阶线性系统,需要满足两个特性:
(1)齐次性。要求:y = f(x),则ky = f(kx)
(2)叠加性。要求:y1 = f(x1),y2 = f(x2),则有y1 + y2 = f(x1) + f(x2)。

不适用系统包括:
(1)高阶线性系统。
如果高阶系统可以简化为二阶系统,则可以用PID控制。
(2)非线性系统。
这个可以用李雅普诺夫方法,在非线性系统的平衡点处,进行转化为线性后应用。具体可以参见这里的介绍:https://zhuanlan.zhihu.com/p/58738073

2 PID三个量的含义解析

重要说明:下面章节说的PID针对位置型PID说的。增量式的参照执行:
(1)下面章节的P比例对应增量的I。
(2)下面章节涉及到的D微分对应P。
(3)下面章节涉及到的输出,增量式的输出可参照执行。

2.1 P:比例

(1)他当前的输出只与当前偏差有关系,与历史没有关系。
(2)只要有偏差,该输出就存在。没有了偏差,就没有输出。
(3)他的输出值与偏差值是一个线性关系。
(4)从大的偏差开始控制,随着控制的时间拉长,偏差值越来越小,他的输出也会越来越小。(当然,接近控制值后,可能会有震荡的情况除外)。如下图示意所示:
在这里插入图片描述
(5)注意上图中,输出跟偏差是线性关系,但是跟时间不是线性关系。因为P的输出越大,则偏差较少越快,对应P的减少越快,到最后,在趋近设置值时会越来越缓慢。

2.2 I:积分

(1)他的输出是历史上所有偏差的累积。如果是离散PID的话就是历史偏差累加。
(2)他不仅与当前偏差有关系,也与历史偏差有关系。因此,即使当前偏差为0,他也会有输出。
(3)积分的引入,是由于某种阻力的存在。来达到以下两个目的:
(a)积分的作用,是为了抵抗某种阻力,保持当前积累的效果。
是把历史上所有的误差进行了累计,所以即使当前没有了误差,他也会有输出,这个输出会保持住当前状态,以抵抗某种阻力。例如:旋翼无人机的持续旋转,抵消重力,实现空中某个位置的悬停。
因此,一般,需要抵消某种阻力存在时,必须需要积分的存在,I是不能少的。
(b)积分的作用,是为了解决稳态误差(也有叫做静态误差的)。
如上面说的那样,有某种外面阻力存在的话,如果只靠P调节的话,会导致P无论怎么调,都会存在以下情况:最后进入稳态后,与设置值,之间会有一个稳定的误差,称为稳态误差。
这个就需要通过积分,将其消除掉。
(4)从大的偏差开始控制,随着控制的时间拉长,偏差值越来越小,他的输出也会越来越小。直到为0(当然,这里假设没有考虑震荡情况,按照特列,直接到0,实际这是不太可能的。只是示意一下)。如下图示意所示:
在这里插入图片描述
(5)从上图可以看出,输出一直在增大的,但是随着时间拉长,偏差越来越小,其累积的值也越来越小,最后称为定值(偏差为0).。当然,这种情况是理想的,因为往往会超调,超调后,方向相反,则累加和会变小。后续的图就没办法用这个图表示了,这里没有表示。可以同样逻辑分析。
(6)积分的副作用
积分会带来很多的辅作用,比如积分饱和、积分意外累积,对变化影响不利等。详见3章中相关章节。

2.3 D:微分

(1)输出与偏差的变化有关系,如果偏差一直保持不变,则D没有输出;
(2)这个输出的结果阻尼,是要抵消PI的输出结果,使其不至于让他们的输出变化太快。
(3)这个阻尼有两种结果:
(a)当PI的输出促使偏差减小,向设置值靠拢时,微分会阻止这种靠拢。如果D值设计合理,这种阻尼是阻止其较快的到达,提前刹车,防止过充引起超调震荡;
(b)当PI的输出,过充后,促使偏差减大时,微分也会阻止这种变大,设置合理,能够将其拉回到设置点。
(4)D实现这种阻尼的方式是基于预测的方式来实现的,预测的方式是将过去的偏差变化,认为是下面也会有的变化。将这个变化结果作为预测结果,提前减少输出。
(5)D的副作用。
(a)如果D太小,则起不到较好的阻尼效果,会使震荡收敛时间长;
(b)如果D值设置太大,则会使得微分阻尼过调,引起高频震荡。设置无法收敛。
(c)D的出现,使得系统对噪声、干扰、变化(如设置值变化)特别敏感,因为噪声和干扰的出现会使得偏差出现剧烈变化,从而导致系统出现高频震荡,或者无法快速收敛。解决方法:低通滤波器,微分先行等,详见3.6,3.7。

2.4 PID:三者的关系

(1)PI关系。
(a)从上面的图中可以看出,从开始控制到偏移量逐渐缩小到偏差为0的过程中,二者是一个P输出逐渐减小,I输出逐渐增大过程。理想情况偏差为0时,二者的输出,最好能保持一个抵消阻力的情况,这样正好能够平衡稳定。
(b)但是以上所说的情况,由于起始点不同,每次积分累积的输出也不同,在偏差为0时,所以往往有超调,这就引起了震荡。
(c)上述情况的一个特例,就是如果没有外力时,应该没有I,此时输出为0。此时虽然没有了输出,但是由于延迟输出及系统的惯性,所以也会有震荡。
(2)PID关系,上面的情况,往往会引起震荡,此时D能阻尼、对冲这种过调。

3 PID控制中特殊情况考虑

上面介绍了最基本的PID控制情况,实际在控制中会遇到很多特殊情况,包括:
(1)意外偶发阻力干扰;
(2)启动停止时控制;
(3)大范围的误差控制;
(4)单向误差累积。
还需要再基本的PID控制中引入其他辅助或变换的做法。

3.1 积分限幅

(1)针对问题
在开始控制后,有一个较大误差,且有一个非常大干扰的话,例如外界阻力,阻止其误差减小,如上面说的旋翼飞机被人死死的按住。虽然他的PI都在输出,但是误差一直没变。这时候,随着时间的拉长,积分的输出值会越来越大。如下图所示:
在这里插入图片描述
这将导致以下问题:
(a)这种输出可能超过了控制系统承受范围
(b)而一旦这种阻力去掉,会使得这种输出很大很大,引起很大的超调和震荡。
(2)解决方法
引入积分限幅。原理给定一个积分输出的最大值限制,一旦超出,则不再增加。
上述被意外阻挡情况下的输出图如下图所示:
在这里插入图片描述
这个在这里有介绍:https://www.bilibili.com/video/BV1B54y1V7hp?p=4

3.2 积分分离

(1)针对问题
在大幅度增减设定值,或者控制启动、结束过程中,短时间内会有很大偏差。而积分由于会累积这种误差,造成后面都持续偏大,会使得整个过程中的输出过大,从而引起超调和震荡。
(2)解决方法
引入了积分分离的思想。其思路是::
(a)偏差值较大时,取消积分作用,以免于超调量增大。实际上利用PD进行控制。
(b)偏差值较小时,引入积分作用,以便消除静差,提高控制精度。利用PID进行控制。

问题关键是如何选择这个偏差阈值。
详见:https://blog.csdn.net/foxclever/article/details/80274790
在这里有介绍:https://www.bilibili.com/video/BV1B54y1V7hp?p=4

3.3 积分饱和

(1)针对问题
如果一个系统总是存在统一个方向的偏差,就可能无限累加为一个很大的输出,称为饱和。饱和后,如果此时又有一个反向的偏差,会使得这个反向误差首先抵消饱和部分,然后才能响应反向偏差。从而影响系统收敛的性能。
(2) 解决方法
引入了抗积分饱和的PID算法。所谓抗积分饱和算法,其思路是在计算U(k)的时候,先判断上一时刻的控制量U(k-1)是否已经超出了限制范围。若U(k-1)>Umax,则只累加负偏差;若U(k-1)<Umin,则只累加正偏差。从而避免控制量长时间停留在饱和区。
具体参见:https://blog.csdn.net/foxclever/article/details/80294264

3.4 梯形积分

从微积分的基本原理看,积分的实现是在无限细分的情况下进行的矩形加和计算。但是在离散状态下,时间间隔已经足够大,矩形积分在某些时候显得精度要低了一些,于是梯形积分被提出来以提升积分精度。

https://blog.csdn.net/foxclever/article/details/80297989

3.5 变积分PID

积分的系数分段,误差越大时I越小,误差越小时,I越大。
类似于积分分离,积分分离应该是这个的一个特例。具体参见:https://blog.csdn.net/foxclever/article/details/80466623

3.6 不完全微分PID

微分信号的引入可改善系统的动态特性,但也存在一个问题,那就是容易引进高频干扰,在偏差扰动突变时尤其显出微分项的不足。为了解决这个问题人们引入低通滤波方式来解决这一问题。
微分项有引入高频干扰的风险,但若在控制算法中加入低通滤波器,则可使系统性能得到改善。方法之一就是在PID算法中加入一个一阶低通滤波器。即高频降低通过,低频通过。
详细见:https://blog.csdn.net/foxclever/article/details/80551919

实现时,只对D加了一个一阶低通滤波:
d * (1 - alpha) * (Ek - Ek-1) + alphaEk-1。

3.7 微分先行

针对频繁切换设定值时,微分会有干扰,不稳定。因此,改进为不对偏差取微分,而是对输出值取微分。
详见:https://blog.csdn.net/foxclever/article/details/80633275

3.8 死区PID

在计算机控制系统中,由于系统特性和计算精度等问题,致使系统偏差总是存在,系统总是频繁动作不能稳定。为了解决这种情况,我们可以引入带死区的PID算法。带死区的PID控制算法就是检测偏差值,若是偏差值达到一定程度,就进行调节。若是偏差值较小,就认为没有偏差.
https://blog.csdn.net/foxclever/article/details/80778748

3.9 模糊PID

在PID的基础上,增加一个PID的变化值。
这个变化值与偏差的范围和大小建立一个关系。
https://blog.csdn.net/foxclever/article/details/83932107

3.10 步进PID

(1)针对问题:
当设置值突然大幅变化时,会造成微分项产生较大的输出,当然这个可以使用微分先行的方式解决;但是同时比例输出也会有大的变化,当然我们可以利用比例先行,但这样会破坏原来的PID控制,带来别的问题。
(2)解决方法
采用步进式的方式设置设定值,就是通过分几步增加设置值,逐步到最终的设定值。
详见:https://blog.csdn.net/foxclever/article/details/105747647

3.11 使用带时间的PID

简化的PID中是已经包含了时间的,且这个时间间隔是相等的,如果不相等,则可能需要引入原来的时间运算。
这里有介绍:
https://blog.csdn.net/foxclever/article/details/122801130

3.12 其他

还有不少控制的,可以参看这里:https://blog.csdn.net/foxclever/category_9281151.html

4 位置型PID中如何使用与调节PID的值

4.1 如何使用

实际使用时,PID可能不是都使用的,有:
(1)PI,D=0
有自然的阻尼的情况。如水中弹簧震荡,水有阻尼,或者阻尼能够较好的平衡掉该中情况下PI的震荡。

(2)PD,I=0
没有外界阻力情况,物理机械能够保证自平衡。
比如在水平面上小车控制运动到指定位置,且这个小车电机等没有阻力,到位置后不需要再输出就可以保持。

(3)PID,比较常见的

(4)PIDT,也用上了T
如上面3.11中,就需要考虑将T,也加入了。

4.2 如何调整PID参数值

(1)先调P
从小到大,依次增加调节。
那么增加到什么情况合适呢,考虑两个因素:
(a)最大误差情况下,是否能够达到设定值
(b)最大误差情况下,达到设定值的时间
上面两个因素,都是考虑最大误差情况下。这个最大误差根据控制对象,有的有明显的边界,如果没有明显边界,则应该考虑先定一个边界,在边界之外使用固定的输出,或者使用固定的P来输出,类似于积分限界、防过饱和的情况。在边界之内再进行精确调节。
这两个因素考虑时,(a)主要在有明显的外界阻力需要抵抗,则如果P小的时候,是否无法达到设定的值的,需要调节P到达设定值,可以适当超调一些。让其震荡得到。
(b)主要是看效率,在有外力需要抵消情况下看,还要看时间。没有外力时,虽然一直可以达到,但是要考虑时间。

综合考虑一下上面,两种情况后,确定P。

(2)第二个调节I的情况
如果认为D影响较小的情况下。可以先调节这个。

(3)第二个调节D的情况
以下情况可以使用第二个调节D:
(a)如果认为I较小的情况
(b)调节P后有较大低频震荡,需要先把震荡调节下来。
在进行了PD调节后,发现有静态误差,则调节一下I,补充进入。

5 增量型PID中参数整定

第4章说的PID针对位置型PID说的,增量式的参照执行:
(1)下面章节的P比例对应增量的I。
(2)下面章节涉及到的D微分对应P。
(3)下面章节涉及到的输出,增量式的输出可参照执行。

因此,增量型PID参数整定过程如下:
(1)先调节I,P=0,D=0。I从小到达,这个过程中会有如下过程:
(a)能够收敛,但是收敛速度太慢!
(b)稳定加快,出现震荡趋势,并趋势逐渐明显
(c)有震荡,震荡的幅度在逐渐减小,收敛
(d)振幅增大,收敛时间过长,甚至无法收敛,
上述过程中,选c那个参数。
(2)在步骤1基础上(I已经选取了上面步骤c的值),D=0,调节P,从小到大,经历以下过程:
(a)对上面的震荡效果没有影响,影响逐渐出现,振幅减小,收敛加快
(b)有较好的振幅减小,收敛效果
(c)新的震荡出现,更加不稳定
上述过程中,选b步骤的值给I
(3)在步骤2基础上,选取P、I值,然后调节D,从小到大,经历如下过程:
(a)对上面的震荡效果没有影响,影响逐渐出现,振幅减小,收敛加快
(b)有较好的振幅减小,收敛效果
(c)新的震荡出现,更加不稳定
上述过程中,选b步骤的值给D。
(4)PID关联、精细化调节
上面已经初步调节好了PID,确定了他们的量级。由于PID是相关联的,且还需要处理很多特殊情况,做多的实验,所以,还需要再精细的调节。

这里可以参考一个其他人做的实验过程,更加形象直观:
狂暴战车 直流电机转速闭环,增量式pid调试过程

5 参考文献

【1】这里有比较抽象的介绍:https://blog.csdn.net/foxclever/article/details/80250994
【2】其中很多出自这个英文的网站,可以查看这里:http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-derivative-kick/
【3】关于PID,这里有一个较好的解释: PID算法原理 一图看懂PID的三个参数
【4】同样,这里有视频课程介绍。
【5】狂暴战车 直流电机转速闭环,增量式pid调试过程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PID控制 的相关文章

随机推荐

  • 进程短暂的不被Windows 10 操作系统调用

    进程短暂的不被Windows 10 操作系统调用 https docs microsoft com en us answers idea 343482 my process can39t be scheduled for a while h
  • 持续集成与版本号管理

    1 语义化版本号 是一个标准 xff0c 为了便于比较不同版本号的大小定的 官网 xff1a https semver org 介绍的 https blog csdn net weixin 40514095 article details
  • 使用Gitblit创建Git服务器

    1 Gitblit概述 创建Git服务器有很多方法 xff0c 为了提供服务还需要按照apach等服务器 xff0c 需要的东西较多 这里有一个Gitblit xff0c 已经做好了很多东西 xff0c 非常方便 不需要这些都能用 xff0
  • OpenGL概况

    1 基本情况 opengl xff1a https baike baidu com item OpenGL opengl es xff1a https baike baidu com item OpenGL 20ES 介绍opengl的比较
  • SQlite数据库操作

    数据库 SQLite官网 xff1a http www sqlite org 判断数据库表和列是否存在 参见 xff1a 1 数据库增加一列 参见2
  • 禅道的服务器部署

    禅道介绍 一款比较轻量级的软件项目管理的工具 xff0c 包括了软件需求 计划 bug管理 xff0c 软件版本管理等 基础功能部分已经开源 xff0c 可以免费试用 此外还有企业级之类的不免费 官网 xff1a https www zen
  • 禅道软件的使用

    1引言 禅道的使用在其手册中有比较详细的介绍 xff0c 大家可以参考 xff1a https www zentao net book zentaopmshelp 40 html fullScreen 61 zentao amp theme
  • 【python】数据类型转换

    1 int 与 string转换 1 1 string gt int 10进制string转化为int int 12 16进制string转化为int int 12 16 1 2 int gt string int转化为10进制string
  • 【自动化测试-Katalon】Katalon的安装和对Windows程序的测试

    文章目录 1 概述2 下载与安装3 界面介绍4 测试windows应用程序4 1 安装驱动与设置4 2 设置与启动程序4 3 识别被测试程序的元素对象4 3 1 打开识别程序窗口4 3 2 Spy windows objects窗口设置 4
  • Java 23种设计模式Demo案例大全 ☞ 【已完结】

    注 xff1a 2022年10月22日 xff0c 已更完全部案例 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xf
  • 算术左移,逻辑左移,算术右移,逻辑右移之间的区别

    1 算术左移 xff0c 逻辑左移 xff1a 都是在右边补0 xff1a 比如 00101011 算术左移一位 01010110 逻辑左移一位 01010110 对于二进制的数值来说左移n位等于原来的数值乘以2的n次方 比如0001101
  • ftp服务器的搭建

    Windows中自带了ftp的服务 xff0c 只需要配置即可搭建 xff0c 同时支持用户创建及访问控制 此外 xff0c 还有专门的工具可以简便操作 xff0c 也更丰富的手段 目前用的比较多的两款工具是FileZilla和Serv U
  • Git客户端的安装

    1 概述 Git有自带的命名行客户端 xff0c 也有自己的图形化客户端 xff0c 这个就是git exe 此外还有TortoiseGit 在这之上又封装了一层 xff0c 使我们用起来更加的方便 xff0c 这个跟TortoiseSVN
  • Git的使用

    正在学习中 xff0c 搜集了好几个比较好的 暂时记录下 xff0c 后续整理 1 Git使用 官方文档 xff1a https git scm com doc 其中包含了帮助 书籍和视频教程 网上传的比较多的就是廖雪峰的介绍 xff0c
  • 【禅道】如何登陆后直接跳到用户登入界面

    1 问题描述 本人用的开源的禅道xampp xff0c 在windows下部署了服务器 xff0c 部署方法参见我的另一个介绍 xff1a https blog csdn net kevinshift article details 120
  • Windows11右键菜单改回经典模式

    window11的右键菜单设计感觉有点反人类 xff0c 网友也想了破解之道 xff1a 改注册表或者使用网友的小工具 其中小工具这里下载 https www sordum org 14479 windows 11 classic cont
  • [python]启动两个spyder工程

    spyder中一次只能开一个工程 xff0c 为了能够开两个 xff0c 进行同时的编辑和运行 xff0c 则默认是不行的 xff0c 是无法同时打开两个spyder的进程的 方法是启动spyder时加上运行参数 xff1a new ins
  • Git按照目录分权限问题

    1 xff09 Git不能像SVN那样 xff0c 在一个库中 xff0c 按照目录为单位进行权限的设置 也不允许对整个库设置为读权限 xff0c 只对某个目录设置为写权限 哎 xff0c 有些失望 xff01 但人家说这是与Git分布式控
  • python

    问题1 xff1a TypeError module takes at most 2 arguments 3 given https www cnblogs com kevin hou1991 p 14806598 html
  • PID控制

    目录 1 基本情况1 1 位置式PID1 2 增量式PID1 3 PID控制适用系统 2 PID三个量的含义解析2 1 P xff1a 比例2 2 I xff1a 积分2 3 D xff1a 微分2 4 PID xff1a 三者的关系 3