C51如何實現(xiàn)PID算法
/*以下部分代碼是講所有的正數(shù)項疊加,負(fù)數(shù)項疊加*/
if(PID.EkFlag_Uint8[0]==0)
{
PostSum+=Temp[0];//正數(shù)和
}
else
{
NegSum+=Temp[0];//負(fù)數(shù)和
}//KP*EK0
if(PID.EkFlag_Uint8[1]!=0)
{
PostSum+=Temp[1];//正數(shù)和
}
else
{
NegSum+=Temp[1];//負(fù)數(shù)和
}//-kI*EK1
if(PID.EkFlag_Uint8[2]==0)
{
PostSum+=Temp[2];//正數(shù)和
}
else
{
NegSum+=Temp[2];//負(fù)數(shù)和
}//KD*EK2
PostSum+=(uint32)PID.Uk_Uint16;//
if(PostSum>NegSum)//是否控制量為正數(shù)
{
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//控制量輸出為負(fù)數(shù),則輸出0
{
PID.Uk_Uint16=0;
}
}
本文引用地址:http://www.ex-cimer.com/article/173079.htm
評論