楼主你好,我现在在用mpu9150在做姿态,然后我的陀螺仪和加计读数读正确,但磁力计读数感觉有问题,Id能读出,低8位数据读出来也会随着转动而变化,但高8位要么是0要么是255,感觉这不对。我的磁力计代码如下:
void READ_AK8975(void)
{
Single_Write(MPU6050_Addr,USER_CTRL, 0x00);
delay_ms(3);
Single_Write(MPU6050_Addr,INT_PIN_CFG, 0x02);
Single_Write(AK8975_I2C_ADDR,AK8975_CNTL, 0x01); //不加这句无法连续读数
BUF[0]=Single_Read(AK8975_I2C_ADDR,AK8975_HXL);
BUF[1]=Single_Read(AK8975_I2C_ADDR,AK8975_HXH);
MX=(BUF[1]<<8)|BUF[0];
BUF[2]=Single_Read(AK8975_I2C_ADDR,AK8975_HYL);
BUF[3]=Single_Read(AK8975_I2C_ADDR,AK8975_HYH);
MY= (BUF[3]<<8)|BUF[2];
BUF[4]=Single_Read(AK8975_I2C_ADDR,AK8975_HZL);
BUF[5]=Single_Read(AK8975_I2C_ADDR,AK8975_HZH);
MZ=(BUF[5]<<8)|BUF[4];
Single_Write(MPU6050_Addr,USER_CTRL, 0x20);
delay_ms(3);
Single_Write(MPU6050_Addr,INT_PIN_CFG, 0x00);
}
按照这个写的:
读取顺序:
1.关闭MPU9150的I2C_MASTER模式
2.延迟2ms左右
3.开启bypass
4.读取compass数据
5.开启MPU9150的I2C_MASTER模式
6.延迟2ms左右
7.关闭bypass
以上这个顺序我试了很多遍,少1条都不行,不知道为什么,有时候虽然
少其中1条可以读,但是过一会或者晃一晃数据就不变了。。
第2、6条这个延迟你可以试,找到最小的延迟时间。官方库里给的是3ms
延迟,但是我觉得1.5ms就够了,2ms比较安全
延时我也试着增大,但不管用。
|