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啊?这是什么情况啊 :'( 大神快来啊 不能沉啊:) :Q:Q:Q:Q怎么办呢 帮顶~~~~~:( 没有人懂吗??? 你代码不贴,接法不贴,都需要人家帮你猜的,有得帮你猜,我自己去猜彩票去了!!!!!! 靠别人不如靠自己啊 好吧,不过在用了DMP后,倾斜角啊,横滚啊 都正常了 好吧 我用的是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); //Ñóê±
}
} 应该是负数没有处理
输出值范围是0~65536, 其中0~32768对应0 ~ +2g,而65536~32769对应0 ~ -2g
我是用这个公式,Ax = acc<32768?acc:acc-65536
也许不是太准确,差个1,影响不大,我也没有深究了
页:
[1]