高级会员

- 积分
- 596
- 金钱
- 596
- 注册时间
- 2015-10-16
- 在线时间
- 72 小时
|
1金钱
本帖最后由 liuxiangyong 于 2016-3-13 20:43 编辑
int incPIDcalc(u16 nextpoint)
{
int iError,iincpid;
PID1.setpoint=setspeed*122.23;
iError=PID1.setpoint-nextpoint; //μ±Ç°Îó2î
printf("iError=%f\r\n",iError);
//printf("x=%d\r\n",1);
iincpid=PID1.proportion*(iError-PID1.last_error)+PID1.integral*iError+PID1.derivative*(iError-2*PID1.last_error+PID1.prev_error);
PID1.prev_error=PID1.last_error; //′æ′¢Îó2±ãóúÏÂ′μÆËã
PID1.last_error=iError;
//printf("iincpid=%d\r\n",iincpid);
return(iincpid) ;
}
这一段程序里加了printf,电机就有PID效果,而且不管什么语句,上面所示2个均可以运行,但注销了就没有PID效果了void TIM6_IRQHandler(void) // 2éÑùê±¼äμ½£¬ÖD¶Ï′|àíoˉêy
{
if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)//¸üDÂÖD¶Ï
{
frequency1=1000000/period_TIM5 ;
PID1.sum_error+=incPIDcalc(frequency1); //¼ÆËãÔöá¿2¢àÛ¼ó
pwm1=PID1.sum_error*4.6875 ; //*0.651
//frequency1=0; //Çåáã
//period_TIM5=0;
TIM_SetCompare1(TIM3,pwm1);
}
}
|
|