感觉MPU6050的DMP算的不准,想YAW只与Z轴的角速度“gyroz”有关,只有一个参数的话,自己写个公式计算一下应该更准确;
尝试自己写,首先
MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺仪数据
然后,记录两次计算的时间间隔
TIM3_Init(5000-1,9000-1); //定时器3初始化,(定时器3挂在APB1上,时钟为HCLK/2),HCLK = 180MHz,定时器时钟为90M,分频系数为9000-1,所以定时器3的频率为90M/9000=10K,也就是1s计数为10K。
自动重装载为5000-1,那么定时器周期就是500ms(这个不重要)
最后就是计算,角速度的积分就是角度了
ys1_yaw = = ys1_yaw + gyroz/63.5*(TIM3->CNT);
//63.5因为我设置的满量程范围为正负500°
if(ys1_yaw > 180)
{
ys1_yaw = ys1_yaw-360;
}
else if(ys1_yaw < -180)
{
ys1_yaw = ys1_yaw+360;
}
//将角度限制在正负180°
然后,失败了。
角度一直在转圈圈,分析数据得知,gyroz有初始值;添加初始误差修正;