ddd 发表于 2017-4-11 12:36:00

MPU6050设置时钟这块是要干嘛啊

#define MPU6050_CLOCK_PLL_YGYRO         0x02
#define devAddr0xD0
#define MPU6050_RA_PWR_MGMT_1       0x6B
#define MPU6050_PWR1_CLKSEL_BIT         2
#define MPU6050_PWR1_CLKSEL_LENGTH      3


MPU6050_setClockSource(MPU6050_CLOCK_PLL_YGYRO); //设置时钟
void MPU6050_setClockSource(uint8_t source){
    IICwriteBits(devAddr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_CLKSEL_BIT, MPU6050_PWR1_CLKSEL_LENGTH, source);

}


u8 IICwriteBits(u8 dev,u8 reg,u8 bitStart,u8 length,u8 data)
{

    u8 b;
    if (IICreadByte(dev, reg, &b) != 0) {
      u8 mask = (0xFF << (bitStart + 1)) | 0xFF >> ((8 - bitStart) + length - 1);
      data <<= (8 - length);
      data >>= (7 - bitStart);
      b &= mask;
      b |= data;
      return IICwriteByte(dev, reg, b);
    } else {
      return 0;
    }
}

给MPU6050的电源管理寄存器1(0X6B)的Bit3.Bit2.Bit1三位写入MPU6050_CLOCK_PLL_YGYRO(也就是0x02)是要使能温度传感器和使用外部32.768Khz作为参考吗?
就算是
在u8 mask = (0xFF << (bitStart + 1)) | 0xFF >> ((8 - bitStart) + length - 1);
      data <<= (8 - length);
      data >>= (7 - bitStart);
算法中我也有疑惑
在配置“陀螺仪最大量程 +-1000度每秒”和“加速度度最大量程 +-2G”时
因为是Bit4.Bit3两位(MPU6050_PWR1_CLKSEL_BIT=4,MPU6050_PWR1_CLKSEL_LENGTH=2)算法刚好能用,可是在配置电源管理寄存器1时好像算法有误啊
页: [1]
查看完整版本: MPU6050设置时钟这块是要干嘛啊