PID控制算法(四)

1、PID算法之积分分离

int index;//标志位,在index = 1时执行积分的稳态误差积累
 //积分分离,设置误差阈值
 //当误差较大时,放弃积分项的运算,当误差较小,计算积分误差积累
if(abs(pid->err)>200)
  {
     index = 0;
  }
 else
  {
      index = 1;
      pid->integral = pid->integral + pid->err; // 积分误差积累
  }

2、抗积分饱和:

积分饱和是指当系统存在持续的偏差时,积分项不断累积,可能导致控制器输出超出执行机构的最大或最小限制,从而引起系统超调和不稳定。

抗积分饱和的作用

  1. 防止超调:通过限制积分项的累积,减少系统因积分作用引起的超调现象。
  2. 加快响应:避免积分项的无限增长,使系统能够更快地响应设定值的变化。
  3. 提高稳定性:减少因积分饱和导致的振荡现象,提高系统的稳定性。

实现方法

  1. 积分分离:如上,设置阈值,当系统偏差较大时,暂时取消积分作用,以避免超调和振荡。
  2. 积分限制:设定积分项的上限和下限,防止积分项的过度累积。
  3. 反计算抗饱和:当输出信号达到饱和限制时,通过反馈机制减少积分项的累积。

 

// 积分饱和处理(反计算抗饱和)
void PID_IntegralWindup(PID *pid) 
{
    //将两个参数在结构体中提前定义好:
    //double output_limit_min; // 输出限制最小值
    //double output_limit_max; // 输出限制最大值
    if (pid->output >= pid->output_limit_max) //当输出达到积分保护最大值时
    {
        if (pid->err > 0) 
        {
            pid->integral += pid->err;//积分误差累计正偏差
        }
    } 
    else if (pid->output <= pid->output_limit_min)//当输出小于积分保护最小值时
    {
        if (pid->err < 0) 
        {
            pid->integral += pid->err;//积分误差累计正偏差
        }
    } 
    else //此时输出值在设置的最大和最小值区间内
    {
        pid->integral += pid->err;//正常计算积分误差
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值