积分作用的引入是为了消除系统的静差,提高控制精度。但是如果一个系统总是存在统一个方向的偏差,就可能无限累加而进而饱和,极大影响系统性能。抗积分饱和就是用以解决这一问题的方法之一。这一节我们就来实现抗积分饱和的PID算法。

1、抗积分饱和的基本思想

所谓积分饱和就是指系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而扩大,从而导致控制器输出不断增大超出正常范围进入饱和区。当系统出现反响的偏差时,需要首先从饱和区退出,而不能对反向的偏差进行快速的响应。

为了解决积分饱和的问题,人们引入了抗积分饱和的PID算法。所谓抗积分饱和算法,其思路是在计算U(k)的时候,先判断上一时刻的控制量U(k-1)是否已经超出了限制范围。若U(k-1)>Umax,则只累加负偏差;若U(k-1)<Umin,则只累加正偏差。从而避免控制量长时间停留在饱和区。

2、算法实现

抗积分饱和的思想很简单,解释在控制器输出的最大最小值附近限制积分的累积情况,以防止在恢复时没有响应。根据前面得分系我们可以得到如下的流程图:

  • 位置型PID算法实现

对于位置型PID的抗积分饱和算法其实就是在基本的PID基础上加上抗积分饱和的操作,增加量个机锋的极限值。首先定义PID对象的结构体:

 /*定义结构体和公用体*/
typedef struct
{float setpoint;       //设定值float proportiongain;     //比例系数float integralgain;      //积分系数float derivativegain;    //微分系数 float lasterror;     //前一拍偏差float result; //输出值float integral;//积分值float maximum;//最大值float minimum;//最小值
}PID;//冲申明

接下来实现PID控制器:

void PIDRegulation(PID *vPID, float processValue)
{float thisError;thisError=vPID->setpoint-processValue;if(vPID->result>vPID->maximum){if(thisError<=0){vPID->integral+=thisError;}}else if(vPID->result<vPID->minimum){if(thisError>=0){vPID->integral+=thisError;}}else{vPID->integral+=thisError;}vPID->result=vPID->proportiongain*thisError+vPID->integralgain*vPID->integral+vPID->derivativegain*(thisError-vPID->lasterror);vPID->lasterror=thisError;
}
  • 增量型PID算法实现

增量型PID的抗积分饱和的实现也是一样在最基本的增量型PID算法中引入极大极小的限值,并在算法中通过比较限值实现抗饱和的操作。

首先定义PID对象的结构体:

/*定义结构体和公用体*/
typedef struct
{float setpoint;       //设定值float proportiongain;     //比例系数float integralgain;      //积分系数float derivativegain;    //微分系数float lasterror;     //前一拍偏差float preerror;     //前两拍偏差float deadband;     //死区float result; //输出值float maximum;//最大值float minimum;//最小值
}PID;

接下来实现PID控制器:

void PIDRegulation(PID *vPID, float processValue)
{float thisError;float increment;float pError,dError,iError;thisError=vPID->setpoint-processValue; //得到偏差值pError=thisError-vPID->lasterror;iError=0;dError=thisError-2*(vPID->lasterror)+vPID->preerror;if(vPID->result>vPID->maximum){if(thisError<=0){iError=thisError;}}else if(vPID->result<vPID->minimum){if(thisError>=0){iError=thisError;}}else{iError=thisError;}increment=vPID->proportiongain*pError+vPID->integralgain*iError+vPID->derivativegain*dError;   //增量计算vPID->preerror=vPID->lasterror;  //存放偏差用于下次运算vPID->lasterror=thisError;vPID->result+=increment;
}

3、总结

所谓抗积分饱和就是防止由于长期存在一个方向的偏差而对相反方向的偏差迟滞响应。本文的方法是在达到极值后将不再对这一方向的偏差做出反应相反只对另一方向的偏差做出反应。事实上由于偏差的存在有可能造成输出值超限的情况,所以还需要对输出值作出限制。

抗积分饱和PID控制器相关推荐

  1. PID控制器开发笔记之三:抗积分饱和PID控制器的实现

    积分作用的引入是为了消除系统的静差,提高控制精度.但是如果一个系统总是存在统一个方向的偏差,就可能无限累加而进而饱和,极大影响系统性能.抗积分饱和就是用以解决这一问题的方法之一.这一节我们就来实现抗积 ...

  2. 反积分饱和 程序_用抗积分饱和PID控制传递函数为G(s)的被控对象

    题目:用抗积分饱和PID控制传递函数为G(s)的被控对象 G(s)=523500/(s^3+87.35s^2+10470s) 二.抗积分饱和原理 积分饱和现象是在系统存在一个方向的偏差,PID控制器的 ...

  3. 抗积分饱和 PID代码实现,matlab仿真实现

    抗饱和PID 前几天开始我就计划把c电机仿真的PI控制器代码优化一下的时候,群里刚好讨论了Microchip的AN1078文档中的PI框图: 在这里插入图片描述 找了点视频和文章,大家感兴趣可以去看 ...

  4. matlab限幅器无饱和怎么设置,抗积分饱和算法:输出限幅.ppt

    抗积分饱和算法:输出限幅 模块八 数字控制器设计 本章要点 1. 连续化设计方法 重点:数字PID设计 2. 直接离散化设计方法 重点:最少拍控制算法 3. 大林算法与纯滞后控制 4. 模糊控制基础 ...

  5. PID控制算法的C语言实现六 抗积分饱和的PID控制算法C语言实现

    所谓的积分饱和现象是指如果系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置,若控制器输出U(k)继续增大,执行器开度不可能再增大,此时计算机输出控制 ...

  6. PID控制器开发笔记之二:积分分离PID控制器的实现

    前面的文章中,我们已经讲述了PID控制器的实现,包括位置型PID控制器和增量型PID控制器.但这个实现只是最基本的实现,并没有考虑任何的干扰情况.在本节及后续的一些章节,我们就来讨论一下经典PID控制 ...

  7. 反积分饱和 程序_三面大疆惨败,因为不懂PID的积分抗饱和

    0 前面的话 理想的PID算法往往不能满足实际使用中的很多场景,比如积分饱和的问题,因此需要在此基础上对积分器做抗饱和处理,积分anti windup的优化.这不,隆哥这次面试,直接挂在这么基础的知识 ...

  8. PID控制器改进笔记之六:改进PID控制器之参数设定

      前面我们发布了一系列PID控制器相关的文章,包括经典PID控制器以及参数自适应的PID控制器.这一系列PID控制器虽说实现了主要功能,也在实际使用中取得了良好效果,但还有很多的细节部分可以改进以提 ...

  9. PID控制器改进笔记之五:改进PID控制器之串级设定

    前面我们发布了一系列PID控制器相关的文章,包括经典PID控制器以及参数自适应的PID控制器.这一系列PID控制器虽说实现了主要功能,也在实际使用中取得了良好效果,但还有很多的细节部分可以改进以提高性 ...

最新文章

  1. 07-图6 旅游规划 (25分)(以此感谢zyx佬)
  2. 感知器调参之梯度下降法
  3. LVS负载均衡群集(LVS-NAT搭建)
  4. 神经计算棒 [Error 5] Toolkit Error: Stage Details Not Supported: Transpose
  5. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)
  6. openshift 部署_OpenShift Express:部署Java EE应用程序(支持AS7)
  7. 创建IE各版本专属CSS
  8. 【汇编语言与计算机系统结构笔记13】简单的上机过程示例
  9. 函数式编程和面向对象式编程_比较函数式编程,命令式编程和面向对象的编程
  10. WebStorm如何设置默认游览器
  11. 定制Android系统开发之二——系统服务
  12. HTML—讲解分割线标签、文字居中、背景图片充满全图
  13. 模拟cmos集成电路 第二版 razavi
  14. EPSON爱普生系列打印机清洗更换墨盒方法
  15. ABBYY FineReader 15 PDF文档查看功能
  16. 影响一生的32步电影
  17. webrtc QOS方法四.2(拥塞算法学习)
  18. 4 win10环境下+vs2017+pcl1.9环境配置
  19. JDK8之Optional
  20. Node.js 和npm的安装(插件的安装)

热门文章

  1. Intel Parallel Studio XE
  2. 兼容主流浏览器的网页闹钟
  3. 基于vue 的h5微信分享
  4. 01-HTML基础与进阶-day3-录像234
  5. 详解PyTorch中的copy_()函数、detach()函数、detach_()函数和clone()函数
  6. chrome 模拟HTTP请求插件——DHC离线安装使用步骤
  7. 顶尖文案app_李叫兽·顶尖文案5周年分享演讲
  8. 完整理解XML领域(转)
  9. Shader Level of Detail(LOD)
  10. 全国计算机等级一级b真题,全国计算机等级考试:一级B选择题真题(3)