skyboy_23 发表于 2013-6-18 22:30:23

MPU6050的数据处理疑问

菜鸟我最近在调试这个6050,我先把程序的一些设置给大家说下,大家帮我看看吧~!拜托了

陀螺仪:灵敏度 16.4 LSB/(°/s)量程+/- 2000°/s
加速度仪:灵敏度 16384 LSB/g 量程+/- 2g

问题来了,我先把6050放在桌面上,采集回来的数据如图:

上图中大家看AZ=0.9g还能理解 因为重力加速度在

可是当我把6050片子以Y轴进行180度来个底朝天旋转,大家请看图:

为什么AY达到了3.8个g呢?而AZ也到了2.9个g?但是我选的量程才+/-2g啊?这是什么情况啊

skyboy_23 发表于 2013-6-18 22:31:45

:'( 大神快来啊

skyboy_23 发表于 2013-6-18 22:33:51

不能沉啊:)

skyboy_23 发表于 2013-6-18 22:59:58

:Q:Q:Q:Q怎么办呢

370439 发表于 2013-6-18 23:35:50

帮顶~~~~~:(

skyboy_23 发表于 2013-6-19 08:35:49

没有人懂吗???

拾瑞 发表于 2013-6-19 10:08:15

你代码不贴,接法不贴,都需要人家帮你猜的,有得帮你猜,我自己去猜彩票去了!!!!!!

Microsoft 发表于 2013-6-19 12:38:35

靠别人不如靠自己啊

skyboy_23 发表于 2013-6-19 21:51:39

好吧,不过在用了DMP后,倾斜角啊,横滚啊 都正常了

skyboy_23 发表于 2013-6-19 21:55:44

好吧 我用的是stm32代码实在是太长了我把主要的弄上来
//************************************
/*Ä£ÄaIICêäèëêä3ö½ó¿ú*/
#define SCL_H         GPIOB->BSRR = GPIO_Pin_6
#define SCL_L         GPIOB->BRR= GPIO_Pin_6
   
#define SDA_H         GPIOB->BSRR = GPIO_Pin_7
#define SDA_L         GPIOB->BRR= GPIO_Pin_7

#define SCL_read      GPIOB->IDR& GPIO_Pin_6
#define SDA_read      GPIOB->IDR& GPIO_Pin_7



//*************3õê¼»ˉMPU6050***********************
void Init_MPU6050(void)
{

           Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x00);        //½a3yDYÃß×′ì¬
        Single_Write(MPU6050_Addr,SMPLRT_DIV, 0x07);
        Single_Write(MPU6050_Addr,CONFIG, 0x06);
        Single_Write(MPU6050_Addr,GYRO_CONFIG, 0x18);
        Single_Write(MPU6050_Addr,ACCEL_CONFIG, 0x01);
}
       
//******¶áè¡MPU6050êy¾Y****************************************
void READ_MPU6050(void)
{
   BUF=Single_Read(MPU6050_Addr,GYRO_XOUT_L);
   BUF=Single_Read(MPU6050_Addr,GYRO_XOUT_H);
   GX=        (BUF<<8)|BUF;
   GX/=16.4;                                                            //¶á衼ÆËãGXêy¾Y

   BUF=Single_Read(MPU6050_Addr,GYRO_YOUT_L);
   BUF=Single_Read(MPU6050_Addr,GYRO_YOUT_H);
   GY=        (BUF<<8)|BUF;
   GY/=16.4;                                                            //¶á衼ÆËãGYêy¾Y

   BUF=Single_Read(MPU6050_Addr,GYRO_ZOUT_L);
   BUF=Single_Read(MPU6050_Addr,GYRO_ZOUT_H);
   GZ=        (BUF<<8)|BUF;
   GZ/=16.4;                                                          //¶á衼ÆËãGZêy¾Y

   BUF=Single_Read(MPU6050_Addr,TEMP_OUT_L);
   BUF=Single_Read(MPU6050_Addr,TEMP_OUT_H);
   T=(BUF<<8)|BUF;
   T = 35+ ((double) (T + 13200)) / 280;   //¶á衼ÆËãoÏ3é ζè

   BUF=Single_Read(MPU6050_Addr,ACCEL_XOUT_L);
   BUF=Single_Read(MPU6050_Addr,ACCEL_XOUT_H);
   AX=        (BUF<<8)|BUF;
   AX/=16384.00;                                                          //¶á衼ÆËãAXêy¾Y

   BUF=Single_Read(MPU6050_Addr,ACCEL_YOUT_L);
   BUF=Single_Read(MPU6050_Addr,ACCEL_YOUT_H);
   AY=        (BUF<<8)|BUF;
   AY/=16384.00;                                                          //¶á衼ÆËãAYêy¾Y

   BUF=Single_Read(MPU6050_Addr,ACCEL_ZOUT_L);
   BUF=Single_Read(MPU6050_Addr,ACCEL_ZOUT_H);
   AZ=        (BUF<<8)|BUF;
   AZ/=16384.00;                                                          //¶á衼ÆËãAYêy¾Y

}

/*
********************************************************************************
** Function Name : main(void)
** Description   : Ö÷oˉêy
** Input             : None
** Output             : None
** Return             : None
********************************************************************************
*/
int main(void)
{
RCC_Configuration();               //ÅäÖÃRCC
GPIO_Configuration();               //ÅäÖÃGPIO
USART1_Configuration();       //ÅäÖÃ′®¿úUSART1
I2C_GPIO_Config();               //ÅäÖÃ IIC
Delayms(10);                               //Ñóê±
Init_MPU6050();                     //3õê¼»ˉMPU6050
while(1)
{
        READ_MPU6050();                 //¶áè¡MPU6050êy¾Y
   
        printf("gyr :GX=%d GY=%d GZ=%d \n",GX,GY,GZ);
    printf("acc :AX=%7f AY=%7f AZ=%7f \n",AX,AY,AZ);
        printf("Temp: %d\n",(T-32)*5/9);
        Delayms(20);                        //Ñóê±


}
}

ianon 发表于 2013-8-8 17:37:55

应该是负数没有处理
输出值范围是0~65536, 其中0~32768对应0 ~ +2g,而65536~32769对应0 ~ -2g
我是用这个公式,Ax = acc<32768?acc:acc-65536
也许不是太准确,差个1,影响不大,我也没有深究了
页: [1]
查看完整版本: MPU6050的数据处理疑问