/*以下部分代码是讲所有的正数项叠加,负数项叠加*/
/**********KP*[E(k)-E(k-1)]**********/
if(PID.EkFlag_Uint8[0]==0)
PostSum += Temp[0]; //正数和
else
NegSum += Temp[0]; //负数和
/********* KI*E(k)****************/
if(PID.EkFlag_Uint8[1]==0)
PostSum += Temp[1]; //正数和
else
; //空操作,E(K)>0
/****KD*[E(k-2)+E(k)-2E(k-1)]****/
if(PID.EkFlag_Uint8[2]==0)
PostSum += Temp[2]; //正数和
else
NegSum += Temp[2]; //负数和
/***************U(K)***************/
PostSum += (uint32)PID.Uk_Uint16;
if(PostSum > NegSum ) // 是否控制量为正数
{ Temp[0] = PostSum - NegSum;
if( Temp[0] < 100 ) //小于上限幅值则为计算值输出
PID.Uk_Uint16 = (uint16)Temp[0];
else
PID.Uk_Uint16 = 100; //否则为上限幅值输出
}
else //控制量输出为负数,则输出0(下限幅值输出)
PID.Uk_Uint16 = 0;
}
}
else
{ PID.Uk_Uint16 = 0; }
}
/*********************************
函数入口: U(K)
函数出口: out(加热输出)
//PID运算植输出函数
********************************/
void PIDOutput (void)
{
static int i;
i=PID.Uk_Uint16;
if(i==0)
out=1;
else out=0;
if((count++)==5)//如定时中断为40MS,40MS*5=0.2S(输出时间单位),加热周期20S(100等份)【转载请注明出处:https://www.5ubs.com/skill/zhuanyezhishi/450.html】 |