国内外高校门户网站建设的成功经验与特色分析,安徽网站建设cnfg,南京工商注册,自己做网站卖东西犯法吗从微积分的基本原理看#xff0c;积分的实现是在无限细分的情况下进行的矩形加和计算。但是在离散状态下#xff0c;时间间隔已经足够大#xff0c;矩形积分在某些时候显得精度要低了一些#xff0c;于是梯形积分被提出来以提升积分精度。
1、梯形积分基本思路
在PID控制…从微积分的基本原理看积分的实现是在无限细分的情况下进行的矩形加和计算。但是在离散状态下时间间隔已经足够大矩形积分在某些时候显得精度要低了一些于是梯形积分被提出来以提升积分精度。
1、梯形积分基本思路
在PID控制其中积分项的作用是消除余差为了尽量减小余差应提高积分项的运算精度。在积分项中默认是按矩形方式来计算积分将矩形积分改为梯形积分可以提高运算精度。其计算公式为 于是如果在位置型PID算法中引入梯形积分则可以修改计算公式如下 同样要在增量型PID算法中引入梯形积分则可以修改计算公式如下 2、算法实现
从微积分的角度来说当微分分到无限小时矩形积分与梯形积分是没有区别的。但事实上我们的采样时间不可能无限小而且也不可能是连续的那么采样周期越大那么矩形近似于实际曲线间的偏差就越大而梯形积分则可以更加接近实际曲线所以采用梯形积分代替矩形积分就可以得到更高的精度。
2.1、位置型PID算法实现
位置型PID的实现在前面就已经完成所不同的是前面使用的是矩形积分在这一节我们将举行积分部分改为梯形积分同样首先定义PID对象的结构体
/*定义结构体和公用体*/
typedef struct
{floatsetpoint; //设定值floatproportiongain; //比例系数floatintegralgain; //积分系数floatderivativegain; //微分系数floatlasterror; //前一拍偏差floatresult; //输出值floatintegral;//积分值
}PID;
接下来实现PID控制器
void PIDRegulation(PID *vPID, float processValue)
{floatthisError;thisErrorvPID-setpoint-processValue;vPID-integral(thisError vPID- lasterror)/2;vPID-resultvPID-proportiongain*thisErrorvPID-integralgain*vPID-integralvPID-derivativegain*(thisError-vPID-lasterror);vPID-lasterrorthisError;
}
从上述实现我们不难看出变化仅仅只是在做积分累计vPID-integral时将累计量按梯形方式累计。
2.2、增量型PID算法实现
同样的增量型PID的梯形积分实现也就是即将积分部分有矩形积分部分换成梯形积分即可。首先定义PID对象的结构体
/*定义结构体和公用体*/
typedef struct
{floatsetpoint; //设定值floatproportiongain; //比例系数floatintegralgain; //积分系数floatderivativegain; //微分系数floatlasterror; //前一拍偏差floatpreerror; //前两拍偏差floatdeadband; //死区floatresult; //输出值
}PID;
接下来实现PID控制器
void PIDRegulation(PID *vPID, float processValue)
{floatthisError;floatincrement;floatpError,dError,iError;thisErrorvPID-setpoint-processValue; //得到偏差值pErrorthisError-vPID-lasterror;iError(thisErrorvPID- lasterror)/2;dErrorthisError-2*(vPID-lasterror)vPID-preerror;incrementvPID-proportiongain*pErrorvPID-integralgain*iErrorvPID-derivativegain*dError; //增量计算vPID-preerrorvPID-lasterror; //存放偏差用于下次运算vPID-lasterrorthisError;vPID-resultincrement;
}
3、总结
积分项的引入目的就是为了消除系统的余差那么积分项的计算精度越高对消除系统的余差就越有利。梯形积分相较于矩形积分其精度有比较大的提高所以对消除余差也就越有效。
欢迎关注