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

关于BMP280数据修正的问题

[复制链接]
  • TA的每日心情
    开心
    昨天 07:20
  • 签到天数: 129 天

    [LV.7]常住居民III

    6

    主题

    72

    回帖

    502

    积分

    高级会员

    积分
    502
    发表于 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;
    }

    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:20
  • 签到天数: 129 天

    [LV.7]常住居民III

    6

    主题

    72

    回帖

    502

    积分

    高级会员

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

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-4 06:15 , Processed in 0.054386 second(s), 37 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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