提问人:Gambanishu Habbeba 提问时间:9/28/2023 更新时间:9/28/2023 访问量:27
BMP280 数据表中的温度补偿计算错误
bmp280 temperature compensation calculation wrong in datasheet
问:
我正在从事一个使用 BMP280 传感器的项目。原始温度/压力值必须使用存储在设备中的校准值进行补偿。现在是关于温度补偿计算的,更准确地说是关于数据表中发布的整数代数版本。
我们在第 22/23 页。var1 的计算公式为:
var1 = (adc / 16384 - t1 / 1024) * t2
根据 32 位系统中的数据表(假设 32 位有符号整数变量和 ADC 为 20 位无符号值,T1 和 T2 为 16 位有符号值):
var1 = [(adc>>3 - t1<<1) * t2]>>11
诀窍在于 adc 是一个 20 位无符号值。我认为这是错误的,因为将 20 位值乘以右移 3(产生 17 位值)与 16 有符号是 33 位数据与符号位。adc ic 的最大值0xFFFFF移位 -> 1FFFF * 7FFF = FFFD8001。有符号 32 int 的最大值为 7FFFFFFF。在高温下会溢出。(多么可爱的失败方式)
我认为正确的计算是:
var1 = [(adc>>4 - t1) * t2]>>10
PS:datasheed确实说使用这些计算的风险由您自己承担,但这并没有使它变得更好。
对此有何评论?
编辑:是的,理论上,-t1部分可以从adc值中降低一点。但 t1 可能很小,甚至为零,指望它来降低另一点价值是一厢情愿的想法。
答: 暂无答案
评论