zoukankan      html  css  js  c++  java
  • 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);
    

      

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

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

  • 相关阅读:
    利用shell脚本实现免密认证
    利用shell脚本实现https证书认证
    高级sed命令
    Zabbix自定义监控
    Zabbix三种邮箱告警配置
    Zabbix配置
    监控服务Zabbix部署
    Ftp
    Samba
    NFS
  • 原文地址:https://www.cnblogs.com/wyuzl/p/6515784.html
Copyright © 2011-2022 走看看