• PID控制算法的C语言实现八 变积分的PID控制算法C语言实现


         变积分PID可以看成是积分分离的PID算法的更一般的形式。在普通的PID控制算法中,由于积分系数ki是常数,所以在整个控制过程中,积分增量是不变的。但是,系统对于积分项的要求是,系统偏差大时,积分作用应该减弱甚至是全无,而在偏差小时,则应该加强。积分系数取大了会产生超调,甚至积分饱和,取小了又不能短时间内消除静差。因此,根据系统的偏差大小改变积分速度是有必要的。

        变速积分的基本思想是,设法改变积分项的累加速度,使其与偏差大小相对应:偏差越大,积分越慢;反之则越快,有利于提高系统品质。 

         设置系数f(e(k)),它是e(k)的函数。当∣e(k)∣增大时,f减小,反之增大。变速积分的PID积分项表达式为:

     系数f与偏差当前值∣e(k)∣的关系可以是线性的或是非线性的,例如,可设为:

    这里给积分系数前加上一个比例值index   

     abs(err)<180时,index=1; 

          180<abs(err)<200时,index=200-abs(err)/20;    

        abs(err)>200时,index=0; 

       最终的比例环节的比例系数值为ki*index; 

    //变积分过程
    	if (abs(pid.err) > 200){
    		index = 0;
    	}
    	else if (abs(pid.err) < 180){
    		index = 1;
    		pid.integral += pid.err;
    	}
    	else{
    		index = (200 - abs(pid.err) / 20);
    		pid.integral += pid.err;
    	}
    	
    	pid.voltage = pid.Kp * pid.err + index*pid.Ki*pid.integral + pid.Kd*(pid.err - pid.err_last);
    

      

    稳定速度貌似确实快。。。。。。。。。

    运算值有负值,这是怎么回事????(一脸闷比)

  • 相关阅读:
    [django]自定义标签和过滤器
    [js]js中6种错误处理机制
    [js] Array.slice和类数组转数组
    [js]this和call.call
    [py]python的time和datetime模块获取星期几
    CentOS 普通用户提升root权限
    CentOS ACL
    CentOS 文件隐藏属性
    CentOS 文件特殊权限SUID,SGID,SBIT
    CentOS 用户管理useradd、usermod等
  • 原文地址:https://www.cnblogs.com/wyuzl/p/6515784.html
Copyright © 2020-2023  润新知