需要InvenSenses Motion Driver的说明

时间:2018-03-15 08:30:29

标签: c microcontroller mpu6050

我正在使用InvenSense的Motion Driver API处理项目,以便从MPU-6050读取值。作为一个开始,我试图获得温度。

阅读注册文件有以下句子。

  

给定寄存器值的温度(℃)可以是   计算公式为:温度单位为℃=(TEMP_OUT寄存器值为a   签字数量)/ 340 + 36.53

在此API的源代码中,有以下函数

int mpu_get_temperature(long *data, unsigned long *timestamp)
{
    unsigned char tmp[2];
    short raw;

    if (!(st.chip_cfg.sensors))
        return -1;

    if (i2c_read(st.hw->addr, st.reg->temp, 2, tmp))
        return -1;
    raw = (tmp[0] << 8) | tmp[1];
    if (timestamp)
        get_ms(timestamp);

    data[0] = (long)((35 + ((raw - (float)st.hw->temp_offset) / st.hw->temp_sens)) * 65536L);
    return 0;
}

当我在互联网上搜索时,我通常会遇到这个似乎有效的片段

uint8_t buf[2];
mpu_read_reg(0x41, &buf[0]);
mpu_read_reg(0x42, &buf[1]);
uint16_t raw = (((uint16_t) buf[0]) << 8) | buf[1];
float temperature = raw / 340.0f + 36.53f;

有人可以向我解释(long)((35 + ((raw - (float)st.hw->temp_offset) / st.hw->temp_sens)) * 65536L)行吗? 这是某种类型转换还是我出错?

1 个答案:

答案 0 :(得分:0)

这实际上是一样的。

  1. 65536转换为its documentation
  2. 文档和来源都说:.temp_sens = 340, .temp_offset = -521
  3. 现在我们有:35 +(R - -521)/ 340 == 35 + R / 340 + 521/340 == 35 + 1.53 + R / 340