答案在风中飘 发表于 2014-4-19 01:29:46

mpu6050 读取加速度值失败

初始化程序如下:
void accInit(void)
{
HalI2CInit(0x68,i2cClock_267KHZ);
HalSensorWriteRegByte(PWR_MGMT_1, 0x00); //解除休眠状态
HalSensorWriteRegByte(SMPLRT_DIV, 0x07);
HalSensorWriteRegByte(CONFIG, 0x06);
HalSensorWriteRegByte(GYRO_CONFIG, 0x18);
HalSensorWriteRegByte(ACCEL_CONFIG, 0x01);
} // accInit


读加速度的程序如下:
uint16 accx,accy,accz,gyrox,gyroy,gyroz,ttemp;
void accReadAcc(int16 *paXVal, int16 *paYVal, int16 *paZVal,
                int16 *pgXVal, int16 *pgYVal, int16 *pgZVal,
                int16 *pTEMP)
{

    HalI2CInit(0x68,i2cClock_533KHZ);
    HalSensorReadReg(ACCEL_XOUT_H, (uint8 *)&accx,2 );
    HalSensorReadReg(ACCEL_YOUT_H, (uint8 *)&accy,2 );
    HalSensorReadReg(ACCEL_ZOUT_H, (uint8 *)&accz,2 );
    HalSensorReadReg(GYRO_XOUT_H, (uint8 *)&gyrox,2 );
    HalSensorReadReg(GYRO_YOUT_H, (uint8 *)&gyroy,2 );
    HalSensorReadReg(GYRO_ZOUT_H, (uint8 *)&gyroz,2 );
    HalSensorReadReg(TEMP_OUT_H, (uint8 *)&ttemp,2 );
    *paXVal = accx;
    *paYVal = accy;
    *paZVal = accy;

    *pgXVal = gyrox;
    *pgYVal = gyroy;
    *pgZVal = gyroz;

    *pTEMP = ttemp; // 需转换计算出温度
   
//    *pXVal = (int8)(gyrox/256);
//    *pYVal = (int8)(gyroy/256);
//    *pZVal = (int8)(gyroz/256);

} // accReadAcc

读到的加速度值了大于10000,也不知哪里出了问题

cshp138 发表于 2014-4-19 09:54:14

看datasheet,换算后才能用;加速度2G范围记得是要除16384,陀螺仪1000范围是除32.8

答案在风中飘 发表于 2014-4-19 15:48:26

cshp138 发表于 2014-4-19 09:54
看datasheet,换算后才能用;加速度2G范围记得是要除16384,陀螺仪1000范围是除32.8 ...

我将读出来的值 除以了16384 ,可是经常 Y Z 轴的加速度都大于 1g ,且波动的厉害。是不是我初始化写的有问题,我不需要融合,只要能正确读出加速度值就可以了,麻烦了。
页: [1]
查看完整版本: mpu6050 读取加速度值失败