PID算法(二)衍生PID

PID算法的精髓和缺陷

PID算法应用广泛,其核心思想就是 根据误差来消除误差。
但是它也是有一些缺点的。

  1. 微分。微分在物理上是不可实现的。只能用近似的增量,来代替微分。
  2. 积分。误差信号的积分,有时候由于干扰,或者噪声,会加大副作用。
  3. 线性组合不一定是最好的组合方式。有些系统是非线性的。
    针对第三点,所以产生了一些衍生PID算法,当然,现在还有很多其他控制算法,比如ADRC,来来克服PID的这些缺陷。
    这一篇,主要是想讲 衍生PID。其他控制算法。如ADRC,或许后续会有介绍。

衍生PID

单纯的位置式PID和增量式PID,不能调出满意的效果的时候,就可以考虑对PID算法,进行一些改造,以实现更好的控制目标,由此就产生了 衍生PID算法。
比如电磁智能小车中,对舵机的控制,就是使用到到了分段的PD算法,当误差比较小的时候,P给的很小,当误差比较大的时候,P则给的比较大。

  if(-5<turn_erro[2]&&turn_erro[2]<5)
    {
        turn_angle=(turn_erro[2]-turn_erro[1])*2.5+(Dturn_erro[1]-Dturn_erro[0])*0.5;
        Actualturn = 850+(int16)turn_angle;//PID
        // Actualturn = 850+Fuzzy(turn_erro, Dturn_erro)*2.5;
       // Actualturn = 850+(int16)(turn_erro[2]*1.5);
    }
    if((5<turn_erro[2]&&turn_erro[2]<7)||(-5<turn_erro[2]&&turn_erro[2]<-7))
    {
        //Actualturn = 850+(int16)(turn_erro[2]*3);
        turn_angle=(turn_erro[2]-turn_erro[1])*5+(Dturn_erro[1]-Dturn_erro[0])*1;
        Actualturn = 850+(int16)turn_angle;//PID
    }
    if((7<turn_erro[2]&&turn_erro[2]<10)||(-7<turn_erro[2]&&turn_erro[2]<-10))
    {
       // Actualturn = 850+(int16)(turn_erro[2]*5);
        turn_angle=(turn_erro[2]-turn_erro[1])*5+(Dturn_erro[1]-Dturn_erro[0])*1.5;
        Actualturn = 850+(int16)turn_angle;//PID
    }
    if((10<turn_erro[2]&&turn_erro[2]<25)||(-25<turn_erro[2]&&turn_erro[2]<-10))
    {
           //  Actualturn = 850+(int16)(turn_erro[2]*9 );
        turn_angle=(turn_erro[2]-turn_erro[1])*9+(Dturn_erro[1]-Dturn_erro[0])*2;
        Actualturn = 850+(int16)turn_angle;//PID
    }

    if((25<turn_erro[2]&&turn_erro[2]<33)||(-33<turn_erro[2]&&turn_erro[2]<-25))
    {
       // Actualturn = 850+(int16)(turn_erro[2]*20);
        turn_angle=(turn_erro[2]-turn_erro[1])*30+(Dturn_erro[1]-Dturn_erro[0])*3;
        Actualturn = 850+(int16)turn_angle;//PID
    }
    if(33<turn_erro[2])
       {
        turn_angle=210;
        Actualturn=duojiMAX;
       }
    if(-33>turn_erro[2])
       {
        turn_angle=-210;
        Actualturn=duojiMIN;
       }

其他还可以参考一下这篇:
变比例不完全积分式PID

反正要实现好的控制效果,这才是目的所在。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值