精华内容
下载资源
问答
  • 抗积分饱和算法:输出限幅模块八 数字控制器设计 本章要点 1. 连续化设计方法 重点:数字PID设计 2. 直接离散化设计方法 重点:最少拍控制算法 3. 大林算法与纯滞后控制 4. 模糊控制基础 本章主要内容 引言 引言 ...

    抗积分饱和算法:输出限幅

    模块八 数字控制器设计 本章要点 1. 连续化设计方法 重点:数字PID设计 2. 直接离散化设计方法 重点:最少拍控制算法 3. 大林算法与纯滞后控制 4. 模糊控制基础 本章主要内容 引言 引言 自动化控制系统的核心是控制器。控制器的任务是按照一定的控制规律,产生满足工艺要求的控制信号,以输出驱动执行器,达到自动控制的目的。在传统的模拟控制系统中,控制器的控制规律或控制作用是由仪表或电子装置的硬件电路完成的,而在计算机控制系统中,除了计算机装置以外,更主要的体现在软件算法上,即数字控制器的设计上。 8.1 数字控制器的连续化设计 主要知识点: 8.1.1数字控制器的连续化设计步骤 基本设计思想 设计假想连续控制器 离散化连续控制器 离散算法的计算机实现与校验 连续化设计的基本思想 设计假想连续控制器 1. 原则上可采用连续控制系统中各种设计方法 连续控制器的离散化 离散化方法: 离散算法的计算机实现 8.1.2 数字PID控制算法 理想PID控制算法 理想PID的递推算式 理想PID的增量差分形式 实际微分PID控制算法 实际微分的离散化 差分形式 理想微分PID与实际微分PID阶跃响应对比 实际微分PID与理想微分PID对比 其它形式的实际微分PID 手动/自动跟踪与无扰动切换 手动/自动跟踪与无扰动切换(续) 8.1.3 数字PID算法的改进 常用改进算法: 积分分离算法 抗积分饱和算法 微分项改进 带死区的算法 积分分离算法 积分分离值的确定原则 变速积分 抗积分饱和措施 串级系统抗积分饱和 微分项的改进 带死区的算法 8.1.4 数字PID参数的整定 理论整定方法:依赖于被控对象的数学模型; 仿真寻优方法 工程整定方法:近似的经验方法,不依赖模型。 扩充临界比例带法 扩充响应曲线法 *控制度的概念 扩充临界比例带法 扩充临界比例带法是模拟调节器中使用的临界比例带法(也称稳定边界法)的扩充,是一种闭环整定的实验经验方法。按该方法整定PID参数的步骤如下: (1)选择一个足够短的采样周期 。所谓足够短,具体地说就是采样周期选择为对的纯滞后时间的1/10以下。 (2)将数字PID控制器设定为纯比例控制,并逐步减小比例带 ( ),使闭环系统产生临界振荡。此时的比例带和振荡周期称为临界比例带 和临界振荡周期 。 (3)选定控制度。所谓控制度,就是以模拟调节器为基准,将DDC的控制效果与模拟调节器的控制效果相比较。控制效果的评价函数通常采用 ( 最小的误差平方积分)表示。 控制度(8-22) 实际应用中并不需要计算出两个误差的平方积分,控制度仅表示控制效果的物理概念。例如,当控制度为1.05时,就是指DDC控制与模拟控制效果基本相同;控制度为2.0时,是指DDC控制比模拟控制效果差。 (4)根据选定的控制度查表8-1,求得 的值。 (5)按求得的整定参数投入运行,在投运中观察控制效果,再适当调整参数,直到获得满意的控制效果。 扩充响应曲线法 与上述闭环整定方法不同,扩充响应曲线法是一种开环整定方法。如果可以得到被控对象的动态特性曲线,那么就可以与模拟调节系统的整定一样,采用扩充响应曲线法进行数字PID的整定。其步骤如下: (1)断开数字控制器,使系统在手动状态下工作。将被控量调节到给定值附近,当达到平衡时,突然改变给定值,相当给对象施加一个阶跃输入信号。 (2)记录被控量在此阶跃作用下的变化过程曲线(即广义对象的飞升特性曲线),如图8-5所示。参数调整。 (3)根据飞升特性曲线,求得被控对象纯滞后时间 和等效惯性时间常数 ,以及它们的比值 。 (4)由求得的 和 以及它们的比 ,选择某一控制度,查表8-2,即可求得数字PID的整定参数的 值。 (5)按求得的整定参数投入在投运中观察控制效果,再适当调整参数,直到获得满意的控制效果。 仿真寻优法 常见积分型性能指标: 8.2 数字控制器的离散化设计 主要知识点 8.2.1 直接离散化设计的基本原理 8.2.2 最少拍控制系统设计 例8.1 例8.1解 控制度 图8-5 广义对象的阶跃飞升特性曲线 运用仿真工具,或离散

    展开全文
  • 抗积分饱和算法: 注:本文内容摘自《先进PID控制MATLAB仿真(第4版)》刘金琨 编著,研读此书受益匪浅,感谢作者! 抗积分饱和PID控制算法: 1.积分饱和现象: 所谓积分饱和现象是指若系统存在一个方向偏差,PID控制...


    注:本文内容摘自《先进PID控制MATLAB仿真(第4版)》刘金琨 编著,研读此书受益匪浅,感谢作者!

    抗积分饱和PID控制算法:

    1.积分饱和现象:

    所谓积分饱和现象是指若系统存在一个方向偏差,PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构到达极限位置 X m a x Xmax Xmax(例如阀门开度达到最大),若控制器输出 u ( k ) u(k) u(k)继续增大,阀门开度不可能再增大,此时就称计算机输出控制量超出了正常运行范围而进入了饱和区。一旦系统出现反向偏差, u ( k ) u(k) u(k)逐渐从饱和区退出。进入饱和区越深则退出饱和区所需的时间越长。在这段时间内,执行机构仍停留再极限位置而不能随偏差反向立即做出相应的改变,这时系统就像失去控制一样,造成控制性能恶化。这种现象称为积分饱和现象或积分失控现象。

    2.抗积分饱和算法:

    作为防止积分饱和的方法之一就是抗积分饱和法。该方法实现思路是在计算 u ( k ) u(k) u(k)时,首先判断上一时刻可的控制量 u ( k − 1 ) u(k-1) u(k1)是否已超出限制范围:
    u ( k − 1 ) > u m a x u(k-1)>umax u(k1)>umax,则只累加负偏差;
    u ( k − 1 ) < u m a x u(k-1)<umax u(k1)<umax,则只累加正偏差;
    这种算法可以避免控制量长时间停留在饱和区。

    展开全文
  • 地暖系统对室温控制的低效性与滞后性是当前存在的主要问题,PID控制算法的引入对这一现象起到了一定的改善作用,然而传统的...试验结果表明,引入抗积分饱和的PID算法比传统PID算法在控制精度与稳定性方面均有所提高。
  • 抗积分饱和的PID控制算法C++语言实现 所谓的积分饱和现象是指如果系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置,若控制器输出U(k)继续增大,执行器开度...

    PID控制算法的C++语言实现

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

    所谓的积分饱和现象是指如果系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置,若控制器输出U(k)继续增大,执行器开度不可能再增大,此时计算机输出控制量超出了正常运行范围而进入饱和区。一旦系统出现反向偏差,u(k)逐渐从饱和区退出。进入饱和区越深则退出饱和区时间越长。在这段时间里,执行机构仍然停留在极限位置而不随偏差反向而立即做出相应的改变,这时系统就像失控一样,造成控制性能恶化,这种现象称为积分饱和现象或积分失控现象

    防止积分饱和的方法之一就是抗积分饱和法,该方法的思路是在计算u(k)时,首先判断上一时刻的控制量u(k-1)是否已经超出了极限范围: 如果u(k-1)>umax,则只累加负偏差; 如果u(k-1)<umin,则只累加正偏差。从而避免控制量长时间停留在饱和区。直接贴出代码,不懂的看看前面几节的介绍.

    pid.h:
    #ifndef _PID_H_
    #define _PID_H_
     
    typedef struct _pid{
    float SetSpeed;
    float ActualSpeed;
    float err;
    float err_last;
    float Kp, Ki, Kd;
    float voltage;
    float integral;
    float umax;
    float umin;
    }Pid;
     
     
    class Pid_control
    {
    public:
     
    void PID_init();
    float PID_realize(float speed);
     
    private:
    int index;
    Pid pid;
    };
    #endif
    pid.cpp:
    #include <iostream>
    #include "pid.h"
     
    using namespace std;
     
    void  Pid_control::PID_init()
    {
    pid.SetSpeed = 0.0;
    pid.ActualSpeed = 0.0;
    pid.err = 0.0;
    pid.err_last = 0.0;
    pid.voltage = 0.0;
    pid.integral = 0.0;
    pid.Kp = 0.2;
    pid.Ki = 0.1;
    pid.Kd = 0.2;
    pid.umax = 400;
    pid.umin = -200;
    }
     
    float Pid_control::PID_realize(float speed){
    int index;
    pid.SetSpeed = speed;
    pid.err = pid.SetSpeed - pid.ActualSpeed;
     
    if (pid.ActualSpeed>pid.umax)
    {
     
    if (abs(pid.err)>200)
    {
    index = 0;
    }
    else{
    index = 1;
    if (pid.err<0)
    {
    pid.integral += pid.err;
    }
    }
    }
    else if (pid.ActualSpeed<pid.umin){
    if (abs(pid.err)>200)
    {
    index = 0;
    }
    else{
    index = 1;
    if (pid.err>0)
    {
    pid.integral += pid.err;
    }
    }
    }
    else{
    if (abs(pid.err)>200)
    {
    index = 0;
    }
    else{
    index = 1;
    pid.integral += pid.err;
    }
    }
     
    pid.voltage = pid.Kp*pid.err + index*pid.Ki*pid.integral + pid.Kd*(pid.err - pid.err_last);
     
    pid.err_last = pid.err;
    pid.ActualSpeed = pid.voltage*1.0;
    return pid.ActualSpeed;
    }
    main.cpp
    #include "pid.h"
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
    Pid_control Pid;
     
    Pid.PID_init();
     
    int count = 0;
     
    while (count<1000)
    {
    float speed = Pid.PID_realize(200.0);
     
    cout << speed << ";" << " ";
     
    count++;
    }
    cout << endl;
     
    system("pause");
     
    return 0;
    }
    最终的测试程序运算结果如下,可以明显的看出系统的稳定时间相对前几次来讲缩短了不少。


     

     

    展开全文
  • 抗积分饱和PID控制算法PDF文档+MATLAB源程序,全部通过测试
  • 抗积分饱和的PID控制算法的常用实现,不错,可以作为参考的
  • 积分饱和通俗讲就是系统在一个偏差方向上的饱和,比如一个系统设定了输出不会超过100,但因为出现一个方向上的偏差积分使得输出超过了100,此时达到了饱和状态,如果继续在这个方向上积分会导致PID控制超过100系统却...
    积分饱和通俗讲就是系统在一个偏差方向上的饱和,比如一个系统设定了输出不会超过100,但因为出现一个方向上的偏差积分使得输出超过了100,此时达到了饱和状态,如果继续在这个方向上积分会导致PID控制超过100系统却运行在100,相当于积分调节对系统输出没有作用,就出现失控的状态,这是系统不能接受的,而且饱和积分越深,退出饱和就越久。上面是在正向的饱和,负向的饱和类似!
    

    为了解决这个问题,我们采用抗积分饱和算法,其思路就是:如果上一次的输出控制量超过了饱和值,饱和值为正,则这一次只积分负的偏差,饱和值为负,则这一次只积分正的偏差,从而避免系统长期留在饱和区!


    下面我以 位置型+抗积分饱和+积分分离的PID控制算法C语言来观察调节结果:(相对应的代码可以参考以往的文章)


    //位置型+抗积分饱和+积分分离 PID控制算法


    struct _pid{
    float SetSpeed;   
    float ActualSpeed; 
    float Err;         
    float Err_Last; 
    float Kp,Ki,Kd;    
    float Voltage;    
    float Integral;
    float Umax;          //最大正饱和上限值
    float Umin;          //最大负饱和下限值

    }pid;
    void PID_Init(void)
    {
    printf("PID_Init begin! \n");


    pid.SetSpeed      = 0;
    pid.ActualSpeed   = 0;
    pid.Err           = 0;
    pid.Err_Last      = 0;
    pid.Kp            = 0.2;
    pid.Ki            = 0.1;    //增大了积分环节的值
    pid.Kd            = 0.2;
    pid.Voltage       = 0;
    pid.Integral      = 0;


    pid.Umax = 400;        //正饱和值为400
    pid.Umin = -200;       //负饱和值为-200




    printf("PID_Init end! \n");
    }


    float PID_Cal(float Speed)
    {
    unsigned char index;
    pid.SetSpeed      = Speed;                                                      
    pid.Err           = pid.SetSpeed - pid.ActualSpeed; 



    if(pid.ActualSpeed>pid.Umax)    //如果上一次输出变量出现正向的饱和
    {
    if(abs(pid.Err)>200)
    {
    index = 0;
    }
    else
    {
    index = 1;
    if(pid.Err<0)
    {
    pid.Integral += pid.Err;  //正饱和只积分负偏差
    }

    }
    }
        else if(pid.ActualSpeed<pid.Umin)  //如果上一次输出变量出现负向的饱和
    {
    if(abs(pid.Err)>200)
    {
    index = 0;
    }
    else
    {
    index = 1;
    if(pid.Err>0)
    {
    pid.Integral += pid.Err;  //负饱和只积分正偏差
    }

    }
    }
    else
    {
    if(abs(pid.Err)>200)     //积分分离的PID优化,可参考以往的文章
    {
    index = 0;
    }
    else
    {
    index = 1;
    pid.Integral += pid.Err;
    }
    }

                       
    pid.Voltage       = pid.Kp*pid.Err +index*pid.Ki*pid.Integral + pid.Kd*(pid.Err - pid.Err_Last); 
    pid.Err_Last      = pid.Err;                 
    pid.ActualSpeed   = pid.Voltage*1.0;              


    return pid.ActualSpeed;        
    }


    int main(void)
    {
    int count = 0 ;
    printf("SYSTEM BEGIN! \n");
    PID_Init();


    while(count<1000) 
    {
    float speed = PID_Cal(200.0);
    printf("-%d-%f-",count,speed);
    count++;
    }
       return 0;

    }


    最后运行结果:


    我们发现,相对以往的算法,还算法大大提高了调节的速度和稳定!

    展开全文
  • 在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万 能算法,如果能够熟练掌握PID算法的设计与实现过程,对于- -般的研发人员来 讲,应该是足够应对一-般研发问题了,而难能可贵的是,在我所接触...
  • 所谓的积分饱和现象是指如果系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置,若控制器输出U(k)继续增大,执行器开度不可能再增大,此时计算机输出控制量超出...
  • 与智能车相关的代码,包括增量式和位置式的算法,还有积分分离,抗积分饱和等等
  • 抗积分饱和 PID

    2021-02-16 09:54:23
    抗积分饱和 PID 所谓的积分饱和现象是指如果系统存在一个方向的偏差,PID 控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置,若控制器输出 U(k)继续增大,执行器开度不可能再增大,此时...
  • 所谓的积分饱和现象是指如果系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置,若控制器输出U(k)继续增大,执行器开度不可能再增大,此时计算机输出控制量超出...
  • PID算法优化之积分抗饱和处理

    千次阅读 多人点赞 2020-09-06 14:19:44
    积分饱和(Integral windup或integrator windup)是指PID控制器或是其他有积分器的控制器中可能会发生的一种现象。
  • 这一节我们就来实现抗积分饱和的PID算法。 1、抗积分饱和的基本思想 所谓积分饱和就是指系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而扩大,从而导致控制器输出不断增大超出正常范围进入饱和...
  • PID--抗积分饱和法.c

    2019-06-06 13:48:26
    所谓的积分饱和现象是指如果系统存在一个方向的偏差, PID 控制器的输 出由于积分作用的不断累加而加大, 从而导致执行机构达到极限位置, 若控制器 输出 U(k)继续增大, 执行器开度不可能再增大, 此时计算机输出...
  • import math,pyb class PID: _kp = _ki = _kd = 0 _lasterror = 0 _maximum = _minimum = _errorabsmax = _errorabsmax = 0 _alpha = 0 _output = 0 _derivative = _integralValue = 0 ...
  • PID的积分抗饱和

    千次阅读 多人点赞 2020-10-23 17:19:06
    5 PID算法饱和) 1 什么是积分饱和 积分饱和(Integral windup或integrator windup)是指PID控制器或是其他有积分器的控制器中可能会发生的一种现象。 这种现象往往发生在误差有大幅变化(例如大幅增加),...
  • 抗积分饱和PID控制器

    千次阅读 2021-04-30 14:31:06
    这一节我们就来实现抗积分饱和的PID算法。 1、抗积分饱和的基本思想 所谓积分饱和就是指系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而扩大,从而导致控制器输出不断增大超出正常范围进入饱和区...
  • 针对输入受限影响下的空间机械臂的输出反馈全局渐进稳定控制问题,采用一类正切双曲线作为饱和函数,提出了一种新的输出反馈抗饱和非线性比例-积分-微分(PID)控制算法,该算法能够实现饱和非线性影响下的空间机械臂闭环...
  • pid抗饱和积分

    千次阅读 2019-03-25 09:27:02
    积分器的饱和情况 (actuator:机器的一部分) 我们知道常量的误差值在经过积分器的作用会成为一个递增的函数,也就是说,给设备的指令(command)的转速会不断增加。 但是我们知道,现实中的电机转速是有限的,在...
  • Matlab--抗饱和积分

    千次阅读 2019-03-30 20:22:17
      所谓积分饱和现象是指若系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置Xmms(例如阀门开度达到最大),如图1所示,若控制器输出u(k)继续增大,阀门开度...
  • PID控制器是工程上应用最广泛的控制方法,汽车上的应用也非常多,比如:定速巡航、蠕行控制、车速限制、电机转速控制...今天,我们通过Simulink仿真来聊聊在汽车控制系统开发过程中PI控制器抗饱和积分的使用心得。 ...
  • PID算法的实现技术

    2012-12-15 22:00:52
    PID算法的实现技术数字PID控制的位置式与增量式算法; • 数字PID控制器采样周期的选取; • 数字PID控制器的正、反作用方式;...• 过程输入约束及PID抗积分饱和算法; • 控制器的手动、自动无扰切换。
  • 改进初学者的PID-积分饱和

    千次阅读 2019-08-11 15:26:40
    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助。作者Brett Beauregard的原文网址:...
  • 针对抗饱和控制的鲁棒性问题,将研究扩展到对输人饱和非线性、时变参数和动态不确定性具有结构摄动的鲁 棒性框架内,给出了一种线性时不变系统鲁棒抗饱和控制算法。鉴于积分二次型约束具有刻画结构不确定性的能力,选 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 500
精华内容 200
关键字:

抗积分饱和算法