首页 > 编程语言 >PID控制算法:位置式PID & 增量式PID

PID控制算法:位置式PID & 增量式PID

时间:2023-06-10 14:06:21浏览次数:34  
标签:控制 位置 实现 控制算法 PID 算法 增量

PID控制算法:位置式PID & 增量式PID_控制系统

前面的文章已经介绍过什么是pid了,现在再回顾一下:

PID:是过程控制中常用的一种针对某个对象或者参数进行自动控制的一种算法。

这一篇分享不打算再深究pid的理论知识,如果有不懂或者对pid感兴趣的朋友,可以自行查阅资料,或者看我前面的文章。

这次分享一下pid算法的常见实现和流程。主要简单分享一下pid的模拟控制实现和数字控制实现。

1. PID的模拟控制

在以前,计算机系统没这么发达的时候,那个时候很多的系统是通过硬件电子的方式去实现的。如果有观察过一些老物件的话,会发现以前那个时代的很多电子式的控制系统,都是很巨大很笨重的,里面满满的都是电子元器件。

到了后面计算机技术发展迅猛,很多的系统可以依靠软件算法实现了,也极大地减少了系统的元器件电子的使用,使得很多系统功能强大的同时还体积小巧轻便。

比如下图这个模拟反馈控制系统的示意图:

PID控制算法:位置式PID & 增量式PID_离散化_02

上图是一个简单的模拟闭环反馈控制系统,它可以实现将被控量通过反馈回路反馈到输入端,从而对被控量和期望输出值进行比较,形成一个闭环的自动控制系统。

图中的模拟调节器的意思就是控制规律的方案是通过模拟硬件的方式来实现的,如果想要调整系统的控制规律就需要修改调节器的硬件。这就是模拟控制系统的意思。

而模拟PID的实现也是通过模拟电子器件搭建的电路实现的,通过电子元器件的方式实现比例、积分、微分单元,然后整合在一块组成一个控制系统,这就是模拟PID了。如下的示意图:

PID控制算法:位置式PID & 增量式PID_离散化_03

模拟PID的微分方程如下:

PID控制算法:位置式PID & 增量式PID_离散化_04

而PID调节器的传递函数如下:

PID控制算法:位置式PID & 增量式PID_步进电机_05

2. PID的数字控制

数字控制系统是以微型计算机作为控制器,通过软件的方式来实现控制规律的一种控制系统。当我们想要改变控制器的控制规律,一般只要通过改变相应的程序或者软件参数即可以实现改变控制规律。

数字控制系统的示意图如下:

PID控制算法:位置式PID & 增量式PID_离散化_06

通过数字控制实现的PID的差分方程如下:

PID控制算法:位置式PID & 增量式PID_离散化_07

3. 数字PID算法的两种类型 — 位置式、增量式

数字PID:指的是PID控制算法的实现是通过计算机软件程序实现的,计算机需要对输入的连续信号进行采集,然后通过量化作为控制器的输入参数,从而经过算法的调节实现目标对象的控制。

PID控制算法在计算机系统中,一般都是采用的数值逼近的方法进行的。因为在很多的系统中,它一般都是连续的,而计算机要进行运算就要依靠计算机的运算,计算机的运算是离散的。所以想要让计算机能够实现PID算法程序,就必须要将PID算法的连续函数进行离散化,从而能够在计算中通过软件算法的方式实现。

一般而言,计算机实现PID算法的时候,在采样周期很小的时候,积分部分可以用对误差求和的方式代替,微分部分可以用差商的方式代替,从而实现将连续的PID算法的差分方程进行离散化,能够通过计算机实现。

数字PID主要有两种:位置式PID和增量式PID

3.1、位置式PID

位置式PID:指的是PID控制器经过运算输出的Uk是被控对象的实际控制量大小。

这个概念是不是咋一看有点拗口?不理解?别急,举个例子看看就知道了。

打个比方:我要进行一个阀门的控制,从而控制流体的流量大小。假设阀门的开度位置为0~100,当前阀门的开度在位置20的地方。现在我希望加大流体的流量,通过修改设定值,PID通过调节,最终输出控制量Uk=80,即这个时候阀门的开度要到80的位置。这就是位置式PID输出的是对被控对象的实际控制量大小的理解。

PID控制算法:位置式PID & 增量式PID_步进电机_08

再来位置式PID的离散公式。如下:

PID控制算法:位置式PID & 增量式PID_步进电机_09

式中:

PID控制算法:位置式PID & 增量式PID_控制系统_10

通过进一步整理,可以表示为:

PID控制算法:位置式PID & 增量式PID_离散化_11

其中:

Kp - 比例系数
Ki - 积分系数;Ki = Kp*T/Ti;
Kd - 微分系数;Kd = Kp*Td/T;
T:采样时间
Ti:积分时间
Td:微分时间

从上面的公式可以看出,位置式PID只需要计算第K次和K-1次的误差即可,并且控制器会对偏差进行累加,也就是控制器的每次输出Uk都和过去的状态有关。

这也会带来一些问题,因为位置pid的输出Uk和以前的状态有关,如果控制器出现异常,那么可能会导致Uk的输出大幅变化,导致执行机构的状态大幅变化,严重的话可能会导致严重的生产事故。

另外,因为位置PID要对偏差进行累积,所以会导致系统的运算量变大,这对于运算性能不够好的计算机也是一种负担。

3.2、增量式PID

增量式PID:指的是控制器的输出是对被控对象的增量∆Uk,而不是实际的控制量大小。

怎么去理解增量式PID呢?

打个比方:比如我要控制一个步进电机转动的角度,步进电机转动之后所在的位置没有达到我们期望的位置,但是又快要接近了,这个时候PID控制器输出的是变化的增量,而不是实际的控制量。

这么说吧,假如我希望步进电机转动到角度120°,现在是115°了,所以只要再增加+5°的输出角度即可。如果因为控制超了,到了123°的位置,这个时候只要减少-3°即可。所以这种情况下控制的输出是增量变化,而不是实际的控制量大小。

PID控制算法:位置式PID & 增量式PID_步进电机_12

增量式PID的离散公式如下:

PID控制算法:位置式PID & 增量式PID_离散化_13

整理如下:

PID控制算法:位置式PID & 增量式PID_步进电机_14

式中:

PID控制算法:位置式PID & 增量式PID_离散化_15

从增量式PID的离散公式可以看到:增量式PID跟n时刻、n-1时刻、n-2时刻的偏差都有关系,但是不会对偏差进行累积,所以相比位置式PID的计算量要小,也不会跟过去的偏差有关联,所以控制的稳定性会更好。

4. 数字PID算法的程序流程

上面分享了数字PID的离散化公式,代码也是有实现的,但是因为暂时还没整理好,就留着下次分享的时候再放上来吧。这里先放PID算法的程序流程图,其实说到这里,PID的算法也已经可以自己去实现了。

(1)位置式PID的算法实现的流程图

PID控制算法:位置式PID & 增量式PID_步进电机_16

(2)增量式PID的算法实现流程图

PID控制算法:位置式PID & 增量式PID_离散化_17

标签:控制,位置,实现,控制算法,PID,算法,增量
From: https://blog.51cto.com/wangjunlv/6454490

相关文章

  • m基于FPGA的FOC控制器verilog实现,包括CLARK,PARK,PID及SVPWM,含testbench
    1.算法仿真效果QuartusII12.1(64-Bit) ModelSim-Altera6.6dStarterEdition 仿真结果如下:   2.算法涉及理论知识概要整个系统的结构如下所示: 1、采集到两相电流 2、经过clarke变换后得到两轴正交电流量, 3、经过旋转变换后得到正交的电流量Id、Iq......
  • 【无人机控制】基于PID实现无人机巡航控制附Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 架构师如何最大化自己的增量价值
    有的架构师不关注软件之外的事情,比如很少关心公司或部门的收入。这种性格虽然可以让他专注于软件工作,但从长期来看,如果不去思考如何通过技术为公司创造商业价值,那就很难保持或扩大自己在团队的影响力,职业发展也可能受挫。你可能听说过“在小数据里看大机会,在大数据里看小机会”这句......
  • 高效稳定的通用增量 Checkpoint 详解之二:性能分析评估
    作者:雷颜菲、夏瑞、俞航翔、梅源|阿里云Flink存储引擎团队摘要:我们在“Flink1.15新功能架构解析:高效稳定的通用增量Checkpoint”【1】一文介绍了通用增量Checkpoint的原理和背后的思考以及执行性能、空间放大等方面的初步测试结果。该功能在Flink1.16中经过优化,已达到生......
  • lightdb增量检查点特性及稳定性测试
    checkpoint是一个数据库事件,它将已修改的数据从高速缓存刷新到磁盘,并更新控制文件和数据文件,此时会有大量的I/O写操作。在PostgreSQL中,检查点(后台)进程执行检查点;当发生下列情况之一时,其进程将启动:检查点间隔时间由checkpoint_timeout设置(默认间隔为300秒(5分钟))在9.5版或更高......
  • 晕, Pidgin在Windows上不支持Voice&Viedo
    从[url]http://pidgin.im/[/url]上下载了最新版本2.7.9,结果发现没有Voice和Video的选项,在"帮助"->"编译信息"中显示:VoiceandVideo:Disabled在网上搜了一下,结果发现Pidgin目前只在Linux支持VV,在Windows上还不支持.参见:[url]http://develope......
  • Spider理论系列--Redis(值得类型)
    Redis值的类型字符串String哈希hash列表list集合set有序集合zset数据操作的全部命令:http://redis.cn/commands.htmlconfiggetdatabases查看所有的数据库数据库以0开始一共16个(1)String概述:String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可......
  • PID学习(一):基本概念+例子理解
    一、定义在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称[PID调节器],是应用最为广泛的一种自动控制器。PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写二、各部分详解总述: image.png1.比例系数P在y=k·x中的,k是比例系数p。......
  • 中关村论坛 | 金融业从增量到存量博弈背后两大原因 更重要的是……
    在数字经济浪潮下,中国金融业正在经历数字化转型的深刻变革。为研判金融科技行业发展趋势和前景,探索金融创新与监管安全的边界,“2023中关村论坛金融科技论坛”于5月29日召开。中电金信常务副总经理冯明刚与中国银行软件中心副总经理康钧伟、北京银行首席信息官龚伟华、度小满首席技......
  • Spider理论系列--MongoDB(二)
    六、INSERT使用insert db.集合名.insert(文档)#如果是添加数据建议使用insert插入多条数据: db.集合名.insert([文档])#注意一定要加[]否则可能只会把第一条文档插入进去db.user.insert({'name':'lisi','age':20})db.user.insert([{'name':'lisi','age':......