找回密码
 立即注册
搜索
查看: 8940|回复: 0

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

[复制链接]

3

主题

7

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2017-4-11 12:36:00 | 显示全部楼层 |阅读模式
#define MPU6050_CLOCK_PLL_YGYRO         0x02
#define devAddr  0xD0
#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时好像算法有误啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

粤ICP备20017043号|小黑屋|手机版|Archiver|轮趣科技(东莞)有限公司  

GMT+8, 2024-4-27 06:41 , Processed in 0.055361 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表