找回密码
 立即注册
查看: 662|回复: 2

关于BMP280数据修正的问题

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:507
  • 最近打卡:2025-06-19 11:48:25

22

主题

178

回帖

1688

积分

金牌会员

积分
1688
发表于 2024-4-15 15:06:57 | 显示全部楼层 |阅读模式
最近用屠龙刀驱动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;
}

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:136
  • 最近打卡:2025-06-19 15:40:05

47

主题

1350

回帖

8046

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8046
QQ
发表于 2024-4-15 15:44:17 | 显示全部楼层
串口打印一下每一步计算之后那个变量的结果看看就知道哪里的问题了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:507
  • 最近打卡:2025-06-19 11:48:25

22

主题

178

回帖

1688

积分

金牌会员

积分
1688
发表于 2024-4-15 16:10:36 | 显示全部楼层
本帖最后由 Tuier 于 2024-4-15 16:11 编辑

ADC值是差不多的,就是这个将读取到的ADC值转换为实际值的函数结果不对。这个转换函数用在STC12C5上没问题,但屠龙刀上就不对了
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-20 02:48 , Processed in 0.133803 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表