金牌会员
- 积分
- 1562
- 威望
- 699
- 贡献
- 619
- 兑换币
- 463
- 注册时间
- 2014-7-13
- 在线时间
- 122 小时
- 毕业学校
- 江苏科技大学
|
5#
楼主 |
发表于 2014-9-14 09:44:25
|
只看该作者
Quixote 发表于 2014-9-13 22:51
这个Na一般是指出现除法错误之类的,这个只能去看源代码才能找出错误。
附上程序的相关部分:
double PID_Compute(void)
{
// unsigned long now = millis();
// double timeChange = (double)(now - lastTime);
double timeChange,error,dErr;
/*How long since we last calculated*/
timeChange = Timer0_GetTime();
Input = GetAngle_YAW();
/*Compute all the working error variables*/
error = Setpoint - Input;
errSum += (error * timeChange);
dErr = (error - lastErr) / timeChange;
/*Compute PID Output*/
Output = kp * error + ki * errSum + kd * dErr;
/*Remember some variables for next time*/
lastErr = error;
// lastTime = now;
return Output;
}
void SendPID_EulertoUart(void)
{
char temp[10]; //临时变量定义,用于转换成字符串
temp_yaw_pid = PID_Compute();
if(MPU6050_testConnection() == 1)
{
sprintf(temp,"%0.2f",temp_yaw_pid);
SendString("temp_yaw_pid = ");
SendString(temp);
SendString("\r\n");
memset(temp,0,sizeof(temp) / sizeof(char));
}
else
SendString("MPU6050 ERROR!\r\n");
}
|
|