首页 > 其他分享 >PID学习(一):基本概念+例子理解

PID学习(一):基本概念+例子理解

时间:2023-05-31 10:24:18浏览次数:47  
标签:0.8 误差 积分 控制算法 PID 微分 例子 基本概念

一、定义

在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称[PID调节器],是应用最为广泛的一种自动控制器。
PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写

二、各部分详解

总述:


  image.png
1.比例系数P
  • 在y = k·x中的,k是比例系数p。
    其中,x是当前值currentValue和目标值totalValue的差值,简称误差err,则err = currentValue - totalValue。y就是执行器对应的输出值U,所以执行器对应的输出值U = Kp * ( currentValue - totalValue )
  • 如果只有比例调节的话,系统会震荡的比较厉害。
2.微分系数D
  • 微分,实际上是对误差进行微分。加入误差1是err(1)。误差2是err(2)。则误差err的微分是 (err2 - err1)。乘上微分系数D,大家叫做KD,则当执行器第1次调节后有了第1次的误差,第2次调节后有了第2次的误差,则结合P系数。就有了PD结合,根据每次调节时,误差的值的经验推算,你就能选取出D的系数。
  • 公式为 U(t) = Kp × err(t) + Kd × derr(t)/dt
3.积分系数I
  • 积分,实际上是对误差的积分,也就是误差的无限和

 

 

所以总公式为   image.png

三、辅以例子理解

1.比例控制:
现在有一水缸,当前水位是0.2米,要通过往缸里加水的方式使其水位维持在1米的高度。那么当前水位和目标水位之间的差值是error,为0.8米。
如果单纯的用比例控制算法,就是指加入的水量u和误差error是成正比的。
假设kp取0.5,那么t=1时(表示第1次加水,也就是第一次对系统施加控制),那么u=0.5*0.8=0.4,加水0.4m,达到0.6m
接着,t=2时刻(第2次施加控制),加水0.2m,达到0.8m
如此这么循环下去,就是比例控制算法的运行方法。
可以看到,如果不存在 稳态误差,最终水位会达到我们需要的1米。

  图片解释更加清楚

 

2.稳态误差
系统从一个稳态过渡到新的稳态,或系统受扰动作用又重新平衡后,系统出现的偏差。
投射到上述例子中就是水缸会漏水。
如果每次加水的时候会漏水0.1m,我们会发现是加不到1m的,所以引入积分控制算法


   

3.积分控制算法
还是用上面的例子,第一次的error是0.8,第二次是0.4,至此,误差的积分(离散情况下积分其实就是做累加),∫∫error=0.8+0.4=1.2. 这个时候的控制量,除了比例的那一部分,还有一部分就是一个系数ki乘以这个积分项。
由于这个积分项会将前面若干次的误差进行累计,所以可以很好的消除稳态误差(假设在仅有比例项的情况下,系统卡在稳态误差了,即上例中的0.8,由于加入了积分项的存在,会让输入增大,从而使得水缸的水位可以大于0.8,渐渐到达目标的1.0.)这就是积分项的作用。
4.微分控制算法
类似于阻尼作用,使控制更加稳定
放入上面的例子中就是当发现水缸里的水快要接近1的时候,加入微分项,可以防止给水缸里的水加到超过1米的高度,说白了就是减少控制过程中的震荡。

四、资料参考

PID算法终于弄明白原理了,原来就这么简单
一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)



链接:https://www.jianshu.com/p/37a5e48391b0

 

标签:0.8,误差,积分,控制算法,PID,微分,例子,基本概念
From: https://www.cnblogs.com/im18620660608/p/17445308.html

相关文章

  • SD协议-基本概念
    1.SD协议版本SD1.1SD2.0SD3.0在看协议的时候,需要注意协议的版本,注意版本之间的差别SD协议是常见的数据通信和存储卡之间的协议HDMI是显示相关的协议,遵循HDMI协议USB遵循USB协议,USB3.0协议的复杂度高于USB2.0主要学习的是协议的分析方法2.systemfeatureSD存储......
  • BDB c++例子,从源码编译到运行
    第一步先下载源码,解压后./dist/configure--enable-cxx编译,然后make,makeinstall--enable-cxxTobuildtheBerkeleyDBC++API,enter--enable-cxxasanargumenttoconfigure. 默认的安装路径是:/usr/local/BerkeleyDB.6.1/ 代码如下:#include<stdlib.h>#include<strin......
  • nebula入门学习——day1 nebula基本概念、原理和架构
    什么是NebulaGraph¶NebulaGraph是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。什么是图数据库¶图数据库是专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点(Vertex)和......
  • shellcode的一个demo例子
    handy-shellcodeBinaryExploitation,50pointsDescription:Thisprogramexecutesanyshellcodethatyougiveit.Canyouspawnashellandusethattoreadtheflag.txt?#include<stdio.h>#include<stdlib.h>#include<string.h>#include&l......
  • AngularJS2.0 一个表单例子——总体说来还是简化了1.x 使用起来比较自然
    <!doctypehtml><html><head><metacharset="utf-8"><title>NgForm</title><scripttype="text/javascript"src="lib/[email protected]"></script><scripttype=&......
  • 基本概念笔记
    project:对资源进行分组和隔离。service:nova、cinder、glance......endpoint:url,service通过endpoint暴露api,user通过endpoint访问、操作资源role:通过定义role,赋予不同的权限,实现访问控制。openstack默认配置只区分admin和非adminrole。每个对象都有id,delete、show等操作......
  • Spider理论系列--MongoDB(二)
    六、INSERT使用insert db.集合名.insert(文档)#如果是添加数据建议使用insert插入多条数据: db.集合名.insert([文档])#注意一定要加[]否则可能只会把第一条文档插入进去db.user.insert({'name':'lisi','age':20})db.user.insert([{'name':'lisi','age':......
  • 简单MySQL例子演示MVCC
    一沈秋园,满庭霜落,云烟北桥夜连城MVCC是多版本并发控制的缩写,是一种数据库和编程语言中常用的并发控制方法。它通过保存数据的历史版本,实现对数据库的高效访问。MySQL中MVCC主要是通过行记录中的隐藏字段(隐藏主键row_id,事务IDtrx_id,回滚指针roll_pointer),undo_log(版本链),Rea......
  • 通过实际的例子,介绍编译器的工作过程
    本文详细介绍下面这张图。编译器是将高级语言代码翻译为机器语言代码的工具。编译器的工作可以划分为多个重要阶段,以下是其中几个常见的阶段,并给出了具体例子:词法分析(LexicalAnalysis):在词法分析阶段,编译器将源代码分解成词法单元(Token)序列。词法单元是语法上具有意义的最小......
  • c语言,函数的址传递例子
    编码如下:#include<stdio.h>voidswap(int*x,int*y){inttmp;tmp=*x;*x=*y;*y=tmp;};intmain(){inta=4;intb=5;printf("befer\n");printf("a=%d\n",a);printf("b=%d\n",b);swap(&am......