jinmailang 发表于 2013-3-26 17:49:35

MPU6050读出来的数据是0

MPU6050读出来的数据是0,但我读WHO AM I 的时候返回值确是0X68,证明通信连接了吧?但为什么读其他寄存器的时候返回值却是0啊。。。。。求大神指导。。。

zjykwym 发表于 2013-3-26 17:58:31

初始化没做好吧

jinmailang 发表于 2013-3-26 18:24:02

zjykwym 发表于 2013-3-26 17:58 static/image/common/back.gif
初始化没做好吧

   Single_Write(SlaveAddress,PWR_MGMT_1, 0x00);   //
   Single_Write(SlaveAddress,SMPLRT_DIV, 0x07);    //
   Single_Write(SlaveAddress,CONFIG, 0x06);    //±2000°
   Single_Write(SlaveAddress,GYRO_CONFIG, 0x18 );//
   Single_Write(SlaveAddress,ACCEL_CONFIG, 0x01);   //

#define        SMPLRT_DIV                0x19        //陀螺仪采样率,典型值:0x07(125Hz)
#define        CONFIG                        0x1A        //低通滤波频率,典型值:0x06(5Hz)
#define        GYRO_CONFIG                0x1B        //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
#define        ACCEL_CONFIG        0x1C        //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)
#define        ACCEL_XOUT_H        0x3B
#define        ACCEL_XOUT_L        0x3C
#define        ACCEL_YOUT_H        0x3D
#define        ACCEL_YOUT_L        0x3E
#define        ACCEL_ZOUT_H        0x3F
#define        ACCEL_ZOUT_L        0x40
#define        TEMP_OUT_H                0x41
#define        TEMP_OUT_L                0x42
#define        GYRO_XOUT_H                0x43
#define        GYRO_XOUT_L                0x44       
#define        GYRO_YOUT_H                0x45
#define        GYRO_YOUT_L                0x46
#define        GYRO_ZOUT_H                0x47
#define        GYRO_ZOUT_L                0x48
#define        PWR_MGMT_1                0x6B        //电源管理,典型值:0x00(正常启用)
#define        WHO_AM_I                        0x75        //IIC地址寄存器(默认数值0x68,只读)
#define        SlaveAddress6050        0xD0

初始化我是参考网上的代码,您看看有问题吗??

tincal 发表于 2013-3-26 20:04:00

i2c 读取代码贴上来看看

zjykwym 发表于 2013-3-27 01:20:38

jinmailang 发表于 2013-3-26 18:24 static/image/common/back.gif
Single_Write(SlaveAddress,PWR_MGMT_1, 0x00);   //
   Single_Write(SlaveAddress,SMPLRT_DIV, 0x07 ...

我也是用这个代码的,读取没有问题

CCALM 发表于 2013-4-1 12:11:02

我的也是,不知道是不是烧了

z318 发表于 2013-5-3 08:59:32

我的也是一样的情况,请问楼主解决了吗?

billhsu 发表于 2013-5-3 13:07:31

我也出现过这个问题。
卖IMU的给的代码在STM32F103C8T6上有问题,重写i2c就好了。

mtjjjjj 发表于 2013-5-3 20:39:19

帮顶下,日后可能会用到

ksn13 发表于 2013-6-20 16:34:19

我读WHO AM I 的时候返回值确是0X79

想飞的四轴 发表于 2013-8-12 16:01:41

楼主我的也遇到相同的问题在读取器件ID时返回值为68   但是其他的返回值都是零怎么回事?C:\Users\孟涛\Desktop

想飞的四轴 发表于 2013-8-12 16:02:55

楼主这是我调试时串口返回数据的截图

xiefy21 发表于 2013-8-17 17:42:13

mark....
顶一个...{:lol:}

ztjshaha 发表于 2013-8-23 20:33:00

我也遇到同样问题,,,想哭 不知道什么原因我用的两个6050试的WHO AM I都过了   有代码呈现http://www.amobbs.com/forum.php?mod=viewthread&tid=5517820&highlight=MPU6050

Zoiphy 发表于 2013-9-6 07:59:41

我的MPU6050读取数据中总是在正确数据中伴有数据0,这是怎么回事啊?应该不是IIC发送时间延时的问题,改快改慢都不行啊....

pal443 发表于 2013-9-9 15:09:24

初步判断是i2C做初始化的问题,有用示波器捕捉I2C波形看是否I2C读写正确吗?

孩子莫悲伤 发表于 2013-11-14 14:41:07

楼主,解决问题了么? 我也遇到了这样的问题,数据采的好好的,我甩了下传感器,就出来都是0了!~

读WHO AM I 能读出来68,说明模拟IIC读取没问题呀!{:dizzy:}

samo110 发表于 2013-11-14 19:10:39

初始化代码开头加入复位传感器的操作,同样是i2c写PWR_MGMT_1寄存器,有一个位是复位用的,过一会(几毫秒或几十毫秒吧)再接你的代码。

woshicky 发表于 2013-12-20 23:59:58

太伤感了,终于解决了,只恨没早看见这个帖啊{:lol:}

flwave 发表于 2014-1-11 13:59:38

我记得如果你端口的设置没对的话会是0,设置为漏极,悬空。不知道是不是这个问题

firstzys 发表于 2014-1-14 10:15:07

我也出现这个问题了,读出ID,其他都是0

firstzys 发表于 2014-1-14 15:05:01

woshicky 发表于 2013-12-20 23:59
太伤感了,终于解决了,只恨没早看见这个帖啊

怎么解决的?求教

woshicky 发表于 2014-1-14 15:09:19

firstzys 发表于 2014-1-14 15:05
怎么解决的?求教

上电后进行一次软件复位,像这样:
        /* Reset The MPU6050 Device */       
        MPU6050_Reset(RESET);
        delay_ms(30);
        MPU6050_Reset(SET);
希望对你有用{:smile:}

firstzys 发表于 2014-1-14 15:56:53

woshicky 发表于 2014-1-14 15:09
上电后进行一次软件复位,像这样:
        /* Reset The MPU6050 Device */       
        MPU6050_Reset(RESET);


多谢多谢!{:handshake:}

mengxiaolong 发表于 2014-6-30 21:24:10

顶一下,因为这个问题纠结好长时间了,原来是在进行mpu6050的初始化之前还要进行一下复位和延时,呵呵,真的谢谢了

v灰尘 发表于 2014-9-8 19:58:14

firstzys 发表于 2014-1-14 15:56
多谢多谢!

出现同样的问题,请教怎么复位?

v灰尘 发表于 2014-9-8 21:14:06

v灰尘 发表于 2014-9-8 19:58
出现同样的问题,请教怎么复位?

不用了{:biggrin:} ,已经知道怎么弄了

        IIC_Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x80);       
        delay_ms(5);
        IIC_Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x00);       
        IIC_Single_Write(MPU6050_Addr,SMPLRT_DIV, 0x07);       
        IIC_Single_Write(MPU6050_Addr,CONFIG, 0x06);               
        IIC_Single_Write(MPU6050_Addr,GYRO_CONFIG, 0x18);
        IIC_Single_Write(MPU6050_Addr,ACCEL_CONFIG, 0x01);

青龙 发表于 2014-9-8 21:27:40

嘿嘿,顶一下顶一下

sss22213 发表于 2015-7-14 22:13:59

我的复位后还是一样,只有ID读得出来,其余读出来的数据是0。

void MPU6050(void)
{
                I2C_InitTypeDef I2C_Con;
                I2C_Con.I2C_Mode=I2C_Mode_I2C;
                I2C_Con.I2C_DutyCycle=I2C_DutyCycle_2;
                I2C_Con.I2C_OwnAddress1=0x00;
                I2C_Con.I2C_Ack=I2C_Ack_Enable;
                I2C_Con.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;
                I2C_Con.I2C_ClockSpeed=50000;
                I2C_ITConfig(I2C1,I2C_IT_BUF|I2C_IT_EVT ,DISABLE);
                I2C_Init(I2C1,&I2C_Con);
                I2C_Cmd(I2C1,ENABLE);
                I2C_AcknowledgeConfig(I2C1,ENABLE);

                Delay_Ms(1000);

                I2C_WriteByte(0xD0,0x6B,0x80);
               
                Delay_Ms(200);

                I2C_WriteByte(0xD0,0x6B,0x00);

                Delay_Ms(200);
       
                  I2C_WriteByte(0xD0,0x19,0x07);//SMPLRT_DIV
                  
                I2C_WriteByte(0xD0,0x1A,0x06);//Config

                I2C_WriteByte(0xD0,0x1B,0x18);//GYRO_CONFIG
       
                   I2C_WriteByte(0xD0,0x1C,0x01);//ACCEL_CONFIG
       
                USART_SendData(USART1,I2C_ReadByte(0xD0,0x41));

}
页: [1]
查看完整版本: MPU6050读出来的数据是0