|
发表于 31-12-2012 10:14:31
|
显示全部楼层
void RailPrPID() //通过PID工作方式给出当前轨压控制量
{ //
int Error,Derror,Output; //定义工作变量
if(A_C_RP_Flag == 0) //判断时候进行轨压初始调节,否则通过上位机获得
A_UI_GoalPre=LookUp_Map(RailPre,A_UI_InjOilMo,A_UI_ShaSpeCr1); //查表确定目标轨压
Error=A_UI_GoalPre - A_UI_RailP; //本次轨压偏差,积分项差
if(Error < A_UI_RailPDiff && Error > -A_UI_RailPDiff) //如果轨压偏差小于上限不作调整
return; //
Derror = Error - A_I_Rail_PID_Array[2]; //二次偏差,比例项差
A_I_Rail_PID_Array[0] = LookUP_Map(RaPrPID_P,A_UI_InjOilMo,A_UI_ShaSpeCr1); //获得当前PID比例系数
A_I_Rail_PID_Array[1] = LookUP_Map(RaPrPID_I,A_UI_InjOilMo,A_UI_ShaSpeCr1); //获得当前PID积分系数
Output = A_I_Rail_PID_Array[0]*Derror; //PID运算
Output+=A_I_Idle_PID_Array[1]*Error; //得到PID输出
A_C_RailPreDr=Output+=A_I_Idle_PID_Array[3]; //对当前占空比值进行调整
PWM_OUT2(A_C_RailPreDr); //重新设置PWM占空比
A_I_Idle_PID_Array[2]=Error; //记录本次偏差,积分项差,供下次使用
A_I_Idle_PID_Array[3]=Output; //记录本次调整后的PWM占空比,供下次使用
} |
评分
-
查看全部评分
|