zoukankan      html  css  js  c++  java
  • PID控制算法的C语言实现五 积分分离的PID控制算法C语言实现

       在普通PID控制中,引入积分环节的目的主要是为了消除静差,提高控制精度。但在过程的启动、结束或大幅度增减设定时,短时间内系统输出有很大的偏差,会造成PID运算的积分积累,致使控制量超过执行机构可能允许的最大动作范围对应的极限控制量,引起系统较大的振荡,这在生产中是绝对不允许的。 

    积分分离控制基本思路是,当被控量与设定值偏差较大时,取消积分作用,以免由于积分作用使系统稳定性降低,超调量增大;当被控量接近给定量时,引入积分控制,以便消除静差,提高控制精度

    具体实现的步骤是: 

    1、根据实际情况,人为设定阈值ε>0; 

    2、当∣e (k)∣>ε时,采用PD控制,可避免产生过大的超调,又使系统有较快的响应; 

    3、当∣e (k)∣≤ε时,采用PID控制,以保证系统的控制精度 

     

    <体现的思想就是分段控制> 

    积分分离控制算法可表示为:

    为了克服这一问题,引入了积分分离的概念,其基本思路是 当被控量与设定值偏差较大时,取消积分作用; 当被控量接近给定值时,引入积分控制,以消除静差,提高精度。其具体实现代码如下

    if (abs(pid.err) > 200)
    	{
    		index = 0;
    
    	}
    	else
    	{
    		index = 1;
    		pid.integral += pid.err;
    	}
    	
    	
    	pid.voltage = pid.Kp * pid.err + pid.Ki*pid.integral + pid.Kd*(pid.err - pid.err_last);
    

      

    系统到199所有的时间是原来时间的1/2(这里我没有算时间,不过运算次数确实是减少了),系统的快速性得到了提高。

  • 相关阅读:
    由当前acitivty直接退到桌面
    Android中SharedPreference多进程数据共享出错
    java回调机制
    Android 监听apk安装替换卸载广播
    jquery中如何退出each循环
    旋转六面体源码
    用CSS3制作的旋转六面体动画
    CSS中常用的字体单位:px、em、rem和%的区别
    css属性简写集合
    小游戏--别踩白块
  • 原文地址:https://www.cnblogs.com/wyuzl/p/6515759.html
Copyright © 2011-2022 走看看