需要解释 InvenSenses Motion Driver
Need explanation for InvenSenses Motion Driver
我正在开展一个项目,使用 InvenSense 的运动驱动程序 API 从 MPU-6050 读取值。首先,我正在尝试获取温度。
阅读注册文档有下面这句话
The temperature in degrees C for a given register value may be
computed as: Temperature in degrees C = (TEMP_OUT Register Value as a
signed quantity)/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)
行吗?
这是某种类型转换还是我弄错了什么?
这个其实是一样的
- 65536 转换为 Q-format
- 文档和来源都说:
.temp_sens = 340, .temp_offset = -521
- 现在我们有:35 + (R - -521) / 340 == 35 + R / 340 + 521 / 340 == 35 + 1.53 + R/340
我正在开展一个项目,使用 InvenSense 的运动驱动程序 API 从 MPU-6050 读取值。首先,我正在尝试获取温度。
阅读注册文档有下面这句话
The temperature in degrees C for a given register value may be computed as: Temperature in degrees C = (TEMP_OUT Register Value as a signed quantity)/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)
行吗?
这是某种类型转换还是我弄错了什么?
这个其实是一样的
- 65536 转换为 Q-format
- 文档和来源都说:
.temp_sens = 340, .temp_offset = -521
- 现在我们有:35 + (R - -521) / 340 == 35 + R / 340 + 521 / 340 == 35 + 1.53 + R/340