搜索
bottom↓
回复: 14

关于MPU6050读数一直是0的一种解决办法

[复制链接]

出0入0汤圆

发表于 2013-11-14 19:34:02 | 显示全部楼层 |阅读模式
本帖最后由 samo110 于 2013-11-14 19:35 编辑

        现在好像用mpu6050的人越来越多了,确实也比较方便,之前我一直用单独的加速度计和陀螺仪,现在也换成这个了。
        关于标题中的问题,一周之内看到有两位网友发帖求解决办法了,问题的显著特征是可以确定i2c总线没有问题,但是读数就是一直是0,其实很多情况下都是因为没有对器件进行复位造成的(我也没有深入去考虑为什么需要先复位,可能通过某些配置可以不用先复位也没准)。
        下面是mpu6050手册上的截图,可以看到PWR_MGMT_1寄存器有一位是DEVICE_RESET,对他写入1就行了。



       不保证所有读数为0的情况都可用,但是大家可以试试这种方法,说不定正好能解决。
        顺便贴出我的初始化代码:
  1. void device_init(void)
  2. {
  3.   unsigned char dat;

  4.   //MPU6050
  5.   dat = 0x80 ;
  6.   i2c_write(Slave_MPU6050, PWR_MGMT_1,1,&dat) ;
  7.   rt_thread_delay(60);
  8.   dat = 0x00 ;
  9.   i2c_write(Slave_MPU6050, PWR_MGMT_1,1,&dat) ;
  10.   rt_thread_delay(60);
  11.   i2c_write(Slave_MPU6050, PWR_MGMT_1,1,&dat) ;
  12.   dat = 0x09;
  13.   i2c_write(Slave_MPU6050, SMPLRT_DIV,1,&dat) ;
  14.   dat = 0x04;
  15.   i2c_write(Slave_MPU6050, CONFIG,1,&dat) ;
  16.   dat = 0x00;
  17.   i2c_write(Slave_MPU6050, GYRO_CONFIG,1,&dat) ;
  18.   dat = 0x08;
  19.   i2c_write(Slave_MPU6050, ACCEL_CONFIG,1,&dat) ;
  20. }
复制代码
PS:另一种常见问题是读数全为-1,一般是i2c总线出了问题,自己写软膜你的i2c驱动的话最容易出错的就是发送和接收的时序,我以前折腾了好长时间后来发现只是ack时机把握不对,可以着重检查一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-11-16 11:12:55 | 显示全部楼层
对了  我读出来的数据就是0,原本以为配置不对,原来是没有完全解除睡眠...

出0入0汤圆

发表于 2013-11-16 14:48:20 | 显示全部楼层
我的程序有时候管用,有时候都是0和-1,这是不是时序不对啊?

出0入0汤圆

 楼主| 发表于 2013-11-16 16:49:57 | 显示全部楼层
mahengyu 发表于 2013-11-16 14:48
我的程序有时候管用,有时候都是0和-1,这是不是时序不对啊?

如果一次启动出现这种情况我就不知道了,如果重启后分别可能出现其中一种情况,那你试试初始化代码里面每次写入加入几十毫秒延时试试

出0入0汤圆

发表于 2013-11-16 19:11:19 | 显示全部楼层
初始化后,加足够时间的延时,确定是这个问题后,再把时间改小。

出0入0汤圆

发表于 2014-5-15 16:26:19 | 显示全部楼层
我要好好看看我的时序,昨晚还有ACK呢,今天没有了,纠结中!谢谢提醒!

出0入0汤圆

发表于 2014-5-27 15:57:30 | 显示全部楼层
请问楼主,我的程序可以读出T,但是x,y,z都是0,怎么回事啊,急求谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-5-27 20:56:20 | 显示全部楼层
SZHjy 发表于 2014-5-27 15:57
请问楼主,我的程序可以读出T,但是x,y,z都是0,怎么回事啊,急求谢谢

你试试用手按住芯片,看温度变化吗
最好贴上读数部分的代码,这样也不好说啊

出0入0汤圆

发表于 2014-5-27 22:04:06 | 显示全部楼层
本帖最后由 SZHjy 于 2014-5-27 22:05 编辑
samo110 发表于 2014-5-27 20:56
你试试用手按住芯片,看温度变化吗
最好贴上读数部分的代码,这样也不好说啊 ...


先谢谢楼主了
温度没有变化,代码见图(就是楼主的代码,改了读数的函数)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-5-27 23:22:34 | 显示全部楼层
SZHjy 发表于 2014-5-27 22:04
先谢谢楼主了
温度没有变化,代码见图(就是楼主的代码,改了读数的函数) ...

你这个看起来不对啊,你能把 mpu6050_register_read(xx,xx,xx);的具体函数内容发上来吗

出0入0汤圆

发表于 2014-5-28 00:22:02 | 显示全部楼层
用K60的孩纸伤不起,IIC是个坑。

出0入0汤圆

发表于 2014-5-28 08:40:42 | 显示全部楼层
samo110 发表于 2014-5-27 23:22
你这个看起来不对啊,你能把 mpu6050_register_read(xx,xx,xx);的具体函数内容发上来吗 ...

谢谢了,我再研究一下吧

出0入0汤圆

 楼主| 发表于 2014-5-28 09:18:10 | 显示全部楼层
SZHjy 发表于 2014-5-28 08:40
谢谢了,我再研究一下吧

给你一个参考吧, 我用的这个可以读取,你那个函数参数里面&OUT[0]是寄存器? 16又是什么?

  1. i2c_read(Slave_MPU6050,ACCEL_XOUT_H,6,&BUF[0]) ;
  2.     i2c_read(Slave_MPU6050,TEMP_OUT_H,  2,&BUF[6]) ;
  3.     i2c_read(Slave_MPU6050,GYRO_XOUT_H, 6,&BUF[8]) ;
  4.                
  5.         mpu[0] = (short)((BUF[0]<<8) + BUF[1]); //ax
  6.         mpu[1] = (short)((BUF[2]<<8) + BUF[3]);//ay
  7.         mpu[2] = (short)((BUF[4]<<8) + BUF[5]);//az
  8.         mpu[3] = (short)((BUF[8]<<8) + BUF[9]);//gx
  9.         mpu[4] = (short)((BUF[10]<<8) + BUF[11]);//gy
  10.         mpu[5] = (short)((BUF[12]<<8) + BUF[13]);//gz
复制代码


  1. unsigned char i2c_read(unsigned char dev,
  2.                unsigned char reg,
  3.                unsigned char length,
  4.                unsigned char * data)
  5. {
  6.     unsigned char i ;
  7.     i2c_start() ;
  8.     i2c_send_byte(dev) ;
  9.     i2c_send_byte(reg) ;
  10.     i2c_start() ;
  11.     i2c_send_byte(dev + 1) ;
  12.     for(i = 0; i < length; i ++)
  13.     {
  14.         data[i] = i2c_recv_byte() ;
  15.         if(i == length-1)
  16.             i2c_send_ack(_NACK) ;
  17.         else
  18.             i2c_send_ack(_ACK) ;
  19.     }
  20.     i2c_stop() ;
  21.     return 0 ;
  22. }
复制代码

出0入0汤圆

发表于 2014-5-29 08:48:39 | 显示全部楼层
samo110 发表于 2014-5-28 09:18
给你一个参考吧, 我用的这个可以读取,你那个函数参数里面&OUT[0]是寄存器? 16又是什么?

嗯,谢谢了

出0入0汤圆

发表于 2014-6-25 15:52:00 | 显示全部楼层
请问一下,我的数据不是0,也不是-1,但是不会变化,是什么原因啊?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-4 02:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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