您的位置 首页 电子

外置式PID程序模板

外置式PID模板defineMuBiaoCS0目标常数defineCHang_aCS0比例常数defineCHang_bCS0积分常数defineCHang_cCS

外置式PID模板

#define MuBiaoCS 0 //方针常数
#define CHang_aCS 0 //份额常数
#define CHang_bCS 0 //积分常数
#define CHang_cCS 0 //微分常数
/*******************************************************************************************/
struct P_I_D {
int MuBiao; //设定方针 Desired Value
double CHang_a; //份额常数 Proportional Const
double CHang_b; //积分常数 Integral Const
doubleCHang_c; //微分常数 Derivative Const
int Error1; //Error[-1]
int Error2; //Error[-2]
}Pidn;
struct P_I_D *PID=&Pidn;
/********************************************************************************************/
void Pidinit(void) //pid初始化
{
PID->MuBiao=MuBiaoCS;
PID->CHang_a=CHang_aCS;
PID->CHang_b=CHang_bCS;
PID->CHang_c=CHang_cCS;
PID->Error1=0;
PID->Error2=0;
}

int PID_WZ(int SRuu) //方位式PID
{
int Error0,SCuu;
Error0 = PID->MuBiao – SRuu;
PID->Error1+=Error0;
SCuu = PID->CHang_a*Error0 //份额项
+ PID->CHang_b*PID->Error1 //积分项
+ PID->CHang_c*(Error0-PID->Error2);//微分项
PID->Error2=Error0;
return SCuu;
}
void main(void)
{
Pidinit();
}

增量式PID模板

#define MuBiaoCS 0 //方针常数
#define CHang_aCS 0 //份额常数
#define CHang_bCS 0 //积分常数
#define CHang_cCS 0 //微分常数
/*******************************************************************************************/
struct P_I_D {
int MuBiao; //设定方针 Desired Value
double CHang_a; //份额常数 Proportional Const
double CHang_b; //积分常数 Integral Const
doubleCHang_c; //微分常数 Derivative Const
int Error1; //Error[-1]
int Error2; //Error[-2]
}Pidn;
struct P_I_D *PID=&Pidn;
/********************************************************************************************/
void Pidinit(void) //pid初始化
{
PID->MuBiao=MuBiaoCS;
PID->CHang_a=CHang_aCS;
PID->CHang_b=CHang_bCS;
PID->CHang_c=CHang_cCS;
PID->Error1=0;
PID->Error2=0;
}

int PID_WC(int SRuu) //增量式PID
{
int Error0,SCuu;
Error0 = PID->MuBiao – SRuu; //误差
SCuu = PID->CHang_a*Error0 //Error项
– PID->CHang_b*PID->Error1 //Error1项
+ PID->CHang_c*PID->Error2; //Error2项
PID->Error2=PID->Error1; //将前次误差存PID->Error2
PID->Error1=Error0; //将这次误差存PID->Error1
return SCuu;
}

void main(void)
{
Pidinit();
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/255205.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部