|
本帖最后由 samo110 于 2013-11-14 19:35 编辑
现在好像用mpu6050的人越来越多了,确实也比较方便,之前我一直用单独的加速度计和陀螺仪,现在也换成这个了。
关于标题中的问题,一周之内看到有两位网友发帖求解决办法了,问题的显著特征是可以确定i2c总线没有问题,但是读数就是一直是0,其实很多情况下都是因为没有对器件进行复位造成的(我也没有深入去考虑为什么需要先复位,可能通过某些配置可以不用先复位也没准)。
下面是mpu6050手册上的截图,可以看到PWR_MGMT_1寄存器有一位是DEVICE_RESET,对他写入1就行了。
不保证所有读数为0的情况都可用,但是大家可以试试这种方法,说不定正好能解决。
顺便贴出我的初始化代码:- void device_init(void)
- {
- unsigned char dat;
- //MPU6050
- dat = 0x80 ;
- i2c_write(Slave_MPU6050, PWR_MGMT_1,1,&dat) ;
- rt_thread_delay(60);
- dat = 0x00 ;
- i2c_write(Slave_MPU6050, PWR_MGMT_1,1,&dat) ;
- rt_thread_delay(60);
- i2c_write(Slave_MPU6050, PWR_MGMT_1,1,&dat) ;
- dat = 0x09;
- i2c_write(Slave_MPU6050, SMPLRT_DIV,1,&dat) ;
- dat = 0x04;
- i2c_write(Slave_MPU6050, CONFIG,1,&dat) ;
- dat = 0x00;
- i2c_write(Slave_MPU6050, GYRO_CONFIG,1,&dat) ;
- dat = 0x08;
- i2c_write(Slave_MPU6050, ACCEL_CONFIG,1,&dat) ;
- }
复制代码 PS:另一种常见问题是读数全为-1,一般是i2c总线出了问题,自己写软膜你的i2c驱动的话最容易出错的就是发送和接收的时序,我以前折腾了好长时间后来发现只是ack时机把握不对,可以着重检查一下。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|