TA的每日心情 | 开心 昨天 07:20 |
---|
签到天数: 129 天 [LV.7]常住居民III
高级会员
- 积分
- 502
|
最近用屠龙刀驱动BMP280(IIC模拟),用手册上的修正公式结果不对,相差太大。而用STC12C560S2驱动同一颗BMP280正常,同样的程序,同样的修正公式,同样的STC系列,只不过STC12时钟慢一些罢了,不影响模拟IIC的延时(用的是绝对延时,根据频率变化而调整)。请教用过BMP280或懂它的各位大佬帮忙解惑!谢谢!
温度修正:
double BME280_Temp(BME280_s32_t adc_T)
{
double var1, var2, T;
var1 = (((double)adc_T) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2);
var2 = ((((double)adc_T) / 131072.0 - ((double)dig_T1) / 8192.0) * (((double)adc_T) / 131072.0 - ((double)dig_T1) / 8192.0)) * ((double)dig_T3);
t_fine = (BME280_s32_t)(var1 + var2);
T = (var1 + var2) / 5120.0;
return T;
}
压力修正:
double BME280_Press(BME280_s32_t adc_P)
{
double var1, var2, p;
var1 = ((double)t_fine / 2.0) - 64000.0;
var2 = var1 * var1 * ((double)dig_P6) / 32768.0;
var2 = var2 + var1 * ((double)dig_P5) * 2.0;
var2 = (var2 / 4.0) + (((double)dig_P4) * 65536.0);
var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0;
var1 = (1.0 + var1 / 32768.0) * ((double)dig_P1);
if(0.0 == var1)
{
return 0; // avoid exception caused by division by zero
}
p = 1048576.0 - (double)adc_P;
p = (p - (var2 / 4096.0)) * 6250.0 / var1;
var1 = ((double)dig_P9) * p * p / 2147483648.0;
var2 = p * ((double)dig_P8) / 32768.0;
p = p + (var1 + var2 + ((double)dig_P7)) / 16.0;
return p;
}
|
|