代码之家  ›  专栏  ›  技术社区  ›  JeffreyH

需要解释InvenSenses运动驱动程序

  •  0
  • JeffreyH  · 技术社区  · 8 年前

    我正在进行一个项目,使用InvenSense的运动驱动程序API读取MPU-6050中的值。首先,我想测一下体温。

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

    给定寄存器值的温度(以摄氏度为单位)可能为 计算方式:温度(摄氏度)=(TEMP\U 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 回复  |  直到 8 年前
        1
  •  0
  •   Alexander Dmitriev    8 年前

    这其实是一样的。

    1. 65536转换为 Q-format
    2. 文件和来源均表示: .temp_sens = 340, .temp_offset = -521
    3. 现在我们有:35+(R--521)/340==35+R/340+521/340==35+1.53+R/340
    推荐文章