OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8232|回复: 8

MPU6050 DMP 解算失败 读16次FIFO的数据就FIFO溢出

[复制链接]

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-3-22
在线时间
8 小时
发表于 2015-12-17 22:36:28 | 显示全部楼层 |阅读模式
5金钱
如题:MPU6050 DMP 解算失败 读16次FIFO的数据就FIFO溢出,原子例程那里是没有检测这个的估计在原子的板子上也会遇到,我的战舰板子还没有试过
解算MPU6050 确实会遇到很多问题,比如一开始就有读FIFO失败,(z之前就曾经读不出),现在是读16次就有一次失败(FIFO溢出)



最佳答案

查看完整内容[请看2#楼]

没遇到过了,我们的例程没这个现象
知行和一
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-17 22:36:29 | 显示全部楼层
鬼谷子 发表于 2015-12-31 16:55
原子哥,直接读取delay1ms 还是会出错但是不是16次出错一次,而是很多次,感觉像是定时溢出的样子

没遇到过了,我们的例程没这个现象
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-19 14:01:38 | 显示全部楼层
你多久读一次?
慢了会溢出!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-3-22
在线时间
8 小时
 楼主| 发表于 2015-12-20 10:22:23 | 显示全部楼层
10ms这样子~能讲解下原因么,原子哥 
while(1){
LED2 = 0;
 delay_ms(10);
  LED2 = 0;
// temperature = MPU_Get_Temperature();
 // printf("%f\r\n",temperature);
temp=mpu_dmp_get_data(&pitch, &roll, &yaw);
if(temp == 0)
{
 // printf("%f\r\n",temperature*100);
//  MPU_Get_Gyroscope(&gx,&gy,&gz);
// printf("Gryo %d,%d,%d\r\n",gx ,gy,gz) ;
// MPU_Get_Accelerometer(&ax,&ay,&az);
//  printf("Accel %d,%d,%d\r\n",ax ,ay,az) ;
printf("%lf,%lf,%lf\r\n",pitch ,roll,yaw) ;
 }
 else printf("error %d\r\n",temp) ;
// 
知行和一
回复

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-3-22
在线时间
8 小时
 楼主| 发表于 2015-12-20 10:22:40 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
10ms这样子~能讲解下原因么,原子哥  
 while(1){
 LED2 = 0;
  delay_ms(10);
   LED2 = 0;
 // temperature = MPU_Get_Temperature();
  // printf("%f\r\n",temperature);
 temp=mpu_dmp_get_data(&pitch, &roll, &yaw);
 if(temp == 0)
 {
  // printf("%f\r\n",temperature*100);
 //  MPU_Get_Gyroscope(&gx,&gy,&gz);
 // printf("Gryo %d,%d,%d\r\n",gx ,gy,gz) ;
 // MPU_Get_Accelerometer(&ax,&ay,&az);
 //  printf("Accel %d,%d,%d\r\n",ax ,ay,az) ;
 printf("%lf,%lf,%lf\r\n",pitch ,roll,yaw) ;
  }
  else printf("error %d\r\n",temp
知行和一
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-20 23:24:27 | 显示全部楼层
回复【4楼】鬼谷子:
---------------------------------
去掉10ms延时试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-3-22
在线时间
8 小时
 楼主| 发表于 2015-12-31 16:55:57 | 显示全部楼层
正点原子 发表于 2015-12-20 23:24
回复【4楼】鬼谷子:
---------------------------------
去掉10ms延时试试

原子哥,直接读取delay1ms 还是会出错但是不是16次出错一次,而是很多次,感觉像是定时溢出的样子
知行和一
回复

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-3-22
在线时间
8 小时
 楼主| 发表于 2016-1-1 10:03:41 | 显示全部楼层
正点原子 发表于 2015-12-31 23:28
没遇到过了,我们的例程没这个现象

好吧,谢谢原子个的耐心解答,然后我发现就是没有给mpu6050供电,IIC直接读取时MPU6050(GY-86模块)电源灯亮了,估计是上啦电阻的原因,然后读取MPU6050 的ID正常,DMP初始化失败,很多人的初始化失败估计也是供电不正常,还没有认真研读手册。
知行和一
回复

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2019-8-4
在线时间
24 小时
发表于 2020-12-1 19:52:48 | 显示全部楼层
我用MPU6050的DMP库也有问题,原子的程序也试过了。总是读取的数据隔几次之后就会出现FIFO溢出错误,读的频率快了之后就会出现FIFO数据和要读取的数据长度不匹配(应该是读取的太快了,转换的数据还没来得及放到FIFO里)错误。我怀疑是MPU6050硬件可能有点问题(或者是我的MPU6050模块有问题)。原子的MPU6050的程序表面上看没有问题。但是你如果判断一下获取数据函数的返回值,就会发现隔几次之后就会出现FIFO溢出错误。这样的话用自带DMP来做四轴的飞控肯定实时性得不到保证,只能自己做姿态解算了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-14 21:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表