C51实现PID算法代码
/*以下部分代码是讲所有的正数项叠加,负数项叠加*/
if(PID.EkFlag_Uint8[0]==0)
{
PostSum+=Temp[0];//正数和
}
else
{
NegSum+=Temp[0];//负数和
}//KP*EK0
if(PID.EkFlag_Uint8[1]!=0)
{
PostSum+=Temp[1];//正数和
}
else
{
NegSum+=Temp[1];//负数和
}//-kI*EK1
if(PID.EkFlag_Uint8[2]==0)
{
PostSum+=Temp[2];//正数和
}
else
{
NegSum+=Temp[2];//负数和
}//KD*EK2
PostSum+=(uint32)PID.Uk_Uint16;//
if(PostSum>NegSum)//是否控制量为正数
{
Temp[0]=PostSum-NegSum;
if(Temp[0](uint32)ADPool.Value_Uint16[UMAXADCH])//小于限幅值则为计算值输出
{
PID.Uk_Uint16=(uint16)Temp[0];
}
else
{
PID.Uk_Uint16=ADPool.Value_Uint16[UMAXADCH];//否则为限幅值输出
}
}
else//控制量输出为负数,则输出0
{
PID.Uk_Uint16=0;
}
}
本文引用地址: //m.amcfsurvey.com/article/171790.htm
评论