首页 > 编程语言 >PID算法:标准PID算法的一些改进措施

PID算法:标准PID算法的一些改进措施

时间:2023-07-16 20:04:03浏览次数:54  
标签:采样 偏差 积分 PID 改进 微分 算法

PID算法:标准PID算法的一些改进措施_采样频率

前面的几篇文章分别分享了PID算法的原理、增量式和位置式PID算法的区别、以及过程控制中一些重要的指标,感兴趣的朋友可以回看之前的文章或者自行查阅资料。

在实际项目中,使用数字PID算法对系统的被控量进行控制的时候,有时候并不是仅仅的使用简单的增量式或者位置式的PID就完成了对系统的被控量控制。很多时候会采用一些改进了的PID算法进行系统的控制,以求达到更好的控制效果。

常见的对标准PID算法进行改进的措施有哪些呢?下面会根据我个人有限的经验进行简单的分享,就当是一次学习分享吧!

1、针对微分项的改进

对微分项的改进常见的有两种措施:微分先行和输入滤波。

(1)微分先行

我们知道,在一个闭环的控制系统中,即使我们期望被控量稳定在期望的值范围内它也不可能是绝对的稳定的,变化才是常态,所以才要考虑才要某些算法进行调控,比如PID算法就很常用。

而微分先行的改进措施就是:在PID算法中把对偏差微分改为对被控量的微分。

这是什么意思呢?因为对于很多的系统而言,就算在给定的输入值发生了变化,也不会引起被控量的输出发生大幅度的变化。这就是说在输入值发生变化的时候,被控量也是在一段时间范围内缓慢进行变化的,是不会发生突变的。

那么既然被控量不会因为输入值的突变而发生突变,所以微分先行就是把原本算法中由对偏差的微分变为对被控量的变化的微分。这样的做法就是在即使输入量发生变化偏差还未产生时,微分就已经在起作用了,从而缓慢变化到新的输入值所要求的输出值。

所以,微分先行的输出增量计算如下:

PID算法:标准PID算法的一些改进措施_采样频率_02

(2)输入滤波

输入滤波的做法就是在计算微分项的时候,不直接采用当前时刻的误差e(n) 进行计算,而是采用经过滤波之后的滤波值。

这个滤波是怎么进行的呢?一般的做法是:用过去的三个采样时刻的误差和当前时刻的误差共四个误差值求一个平均值,再通过加权求和的方式构成微分项。

PID算法:标准PID算法的一些改进措施_采样周期_03

2、针对积分项的改进

对于积分的作用我前面的文章是有讲过的,在PID算法中,积分可以消除系统的静差,让被控量偏离期望输出值的偏差减小。但是积分作用它本身也有一个副作用,因为积分是对偏差的累积,可能会引起积分饱和的情况。

积分饱和又是什么呢?积分饱和指的是在一个PID调控的系统中,如果偏差一直存在的情况下,积分会一直对偏差进行累积,可能会导致积分项变得很大。

积分饱和又会对PID调控的系统带来什么样的影响呢?打个比方:如果积分饱和了,在系统的偏差方向发生了改变了之后,PID这个时候会起作用进行调节,但是由于积分项太大了,就需要经过比较长的时间才能让输出U(n) 从积分饱和区脱离,会使调控作用滞后,让系统出现明显的超调,整个系统的调节效果会变差,这肯定是不希望出现的。

所以需要一些措施对抗积分饱和。常见的克服积分饱和的方法有下面的方式:

(1)积分限幅法

积分限幅法的操作原理是:对积分项的输出设定一个限制,当积分项的输出达到限制,就停止积分项的计算,PID算法中的积分计算项的值采用上一个时刻的积分值。这样是为了防止积分项的输出过大,让系统的调节时间变慢,影响系统品质。

积分限幅的计算实现步骤一般如下图:

PID算法:标准PID算法的一些改进措施_采样频率_04

(2)积分分离法

上面提到了积分限幅的方式,就是让积分项的输出不要过大,防止控制时间变化太慢。还有一种做法就是将积分分离出来。

积分分离的做法就是:对系统的偏差设定一个门限值,如果系统偏差的绝对值小于门限值,就进行积分累加;相反,如果系统的偏差的绝对值大于这个门限值,就不进行积分。这样也可以避免过度积分的问题,防止系统因为偏差过大时产生了过大的控制作用。

积分分离的计算步骤如下:

PID算法:标准PID算法的一些改进措施_采样周期_05

(3)变速积分法

变速积分法的基本实现原理是:当系统的偏差比较大的时候,让积分的速度慢一些;相反,当系统的偏差比较小的时候,让积分的速度快一些,以求尽快的消除静差。

这种操作方式时,积分项按照下面的方式计算:

PID算法:标准PID算法的一些改进措施_采样频率_06

上面的计算中,A为设定的一个偏差阈值。

3、补充数字PID的其他需要注意的问题

(1)积分的不灵敏区

数字PID算法的应用大多数都是通过微处理器实现的,所以即使同样的算法放在不同的微处理器系统中产生的效果也是不一样的。

之所以会出现积分不灵敏的情况,是跟微处理的运行字长和计算精度有关的。比如当一个微处理器的运行字长较短时,如果采样周期很短,但是积分时间又比较长,这个时候就会容易因为字长太小精度不够,导致偏差不明显或者不出现,让积分的作用消失了。这就是积分不灵敏的情况。

PID算法:标准PID算法的一些改进措施_采样周期_07

(2)数字PID采样周期的选择问题

根据前面的数字PID的计算公式中会发现,公式中有一个变量Ti,这个就是采样周期。

一般而言,采样周期越小,数字PID就越是精确,控制效果就越接近连续控制。但是呢,天下万物都是有正反两面的,采样周期小了控制效果是精确了,但是太过频繁的采样就必然是要占用跟多的计算时间,计算机的计算负担就会变重,对计算机的运算性能要求就更高。

那采样频率要怎么选择才合适呢?

这个时候就要先看看采样定理了,也就是“香农采样定理”或“奈奎斯特采样定理”。

采样定理:在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max >= 2fmax),采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍。

所以,最大的采样周期公式如下:

PID算法:标准PID算法的一些改进措施_数字信号_08

关于PID算法的一些改进就分享到这里,因为是个人实际使用中的总结,可能会有理解错误的地方,如有错漏,还烦请指正。

标签:采样,偏差,积分,PID,改进,微分,算法
From: https://blog.51cto.com/wangjunlv/6739558

相关文章

  • 生物信息常见聚类算法
    UPGMA(UnweightedPairGroupMethodwithArithmeticMean)是一种常用的聚类分析方法,用于构建进化树或聚类树。它基于样本之间的相似性或距离矩阵,将样本逐步合并成群集,并计算新群集的平均距离。UPGMA的基本原理是按照距离最小的原则,通过计算两个最相似样本之间的平均距离来合并它......
  • 复习-基础课-基础算法
    1.快速排序:不稳定,其他略。2.归并排序:稳定,常用于求逆序对。voidmsort(intl,intr){if(l>=r)return;intmid=(l+r)>>1;msort(l,mid);msort(mid+1,r);//递归排序intk=0;inti=l,j=mid+1;while(i<=mid&&j<=......
  • 07、Raft算法简介
    本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢。思考:etcd是如何基于Raft来实现高可用、数据强—致性的?1、什么是Raft算法Raft算法是现在分布式系统开发首选的共识算法。从本质上说,Raft算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致......
  • JVM专栏-垃圾回收策略与算法
    程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而对于Java堆和方法区,我们只有在......
  • 欧几里得算法
    算法\(\gcd(a,b)=\gcd(b,a\modb)\)。整除的一些引理\(a\midb\),表示\(b\)能被\(a\)整除。当\(a\midb\)且\(b\mida\)时,\(a=\pmb\)。当\(k\mida,k\midb\)时,\(d\mid(ax+by)(x,y\in\mathbbZ)\)。证明:令\(k=\gcd(a,b)\),则有\(k\m......
  • [TSG开发日志4]算法组件、个人编写的库文件如何封装成DLL,如何更好地对接软件开发?
    写在前面这个内容确实是我有点疏忽了,我以为做算法的同事应该多少对这方面会有点了解的。但是我想了一下我刚毕业的时候,确实对这方面的理解不深,查了很多资料才勉强搞懂什么意思,也是后来随着工程学习的愈加深入,才渐渐了解了在C++开发中动态链接库的重要性及如何编写。一般在说一个......
  • 马尔可夫算法
    马氏模型的含义马尔科夫链观察式子当P{En=i,En-1=in-1,...,}=p{En=i},n-1之前发生的事都和现在无关例子:转移概率矩阵练习:第3条说的是不管初始状态是什么只要j趋于无穷,最后极限与初始状态无关,极限趋于一个定值正则矩阵:1、方阵,2、逆矩阵存在例题:这道......
  • 字符串算法入门笔记
    zhx:什么AC自动机,KMP算法从来不会考zhx:不推荐用string,因为麻烦读ans入一个字符串chars[MAXN];cin>>s+1;//从s[1]开始读入,操作时方便在遍历字符串时,我们要先把字符串长度存下来,因为计算字符串长度的函数strlen的时间复杂度为\(O(长度)\),如果写成for(inti=1;i<=strlen(s+......
  • 代码随想录算法训练营第三十一天| 62.不同路径 63. 不同路径 II
    62.不同路径思路:因为只能向左,和向下,因此只能是前面的加上左边的,递推公式较为简单代码:1intuniquePaths(intm,intn){2if(m==1||n==1)return1;34vector<vector<int>>nums(m,vector<int>(n,1));56for(inti=1;i<m;i++......
  • 【算法】在各种排列组合下,计算零钱找零方式数量
    写一个函数,在给定一系列硬币面额的情况下,计算你可以用多少种不同的方式来兑换一笔钱。例如,如果你有面额为1和2的硬币,有3种方法可以为4找零:1+1+1+1,1+1+2,2+2。硬币的顺序无关紧要:1+1+2==2+1+1此外,假设你有无限数量的硬币。示例调用,一个金额和一系列独特面额的硬币:CountCombin......