首页 » 技术分享 » BMP180气压传感器波动过大的解决方案

BMP180气压传感器波动过大的解决方案

 

BMP180由于其价格原因,静止状态气压数值波动挺大的,就是用最高精度误差也是不小。针对这个误差大的问题,我一直倾向于使用数学方式来进行补偿。
个人的解决方案如下:

使用一阶卡尔曼滤波来对得到的数据进行滤波,以尽可能的排除误差,提高精度

网络上的一阶卡尔曼滤波很多的,我选用的是单函数版本的(忘了是哪里看到的了……效果很不错,如果原作者看到了请记得联系我,我会添上引用与来源),可以使其静止精度基本上可以达到ms5611原始水平,气压的值可在0.01mbar稳定。
使用的卡尔曼滤波代码如下:

double KalmanFilter(const double ResrcData,double ProcessNiose_Q,double MeasureNoise_R)
{
        static double x_last;
        static double p_last;
        double R = MeasureNoise_R;
        double Q = ProcessNiose_Q;
        double x_mid = x_last;
        double x_now;
        double p_mid ;
        double p_now;
        double kg;   

        x_mid=x_last; //x_last=x(k-1|k-1),x_mid=x(k|k-1)
        p_mid=p_last+Q; //p_mid=p(k|k-1),p_last=p(k-1|k-1),Q=噪声
        kg=p_mid/(p_mid+R); //kg为kalman filter,R为噪声
        x_now=x_mid+kg*(ResrcData-x_mid);//估计出的最优值

        p_now=(1-kg)*p_mid;//最优值对应的covariance      

        p_last = p_now; //更新covariance值
        x_last = x_now; //更新系统状态值

        return x_now;               
}

参数我选择的是10,300,数据更新速度20hz,没经过特别的选参,但随意的选参就能达到很好的效果我觉得这个很有调试的价值,但经过滤波后其实时性会受到影响,所以并不是十分适合运用在需要快速得到当前气压的情况(如四轴,个人意见,更新速度足够快我认为也不是不行,但效果肯定没MS5611再加上滤波效果好了)

转载自原文链接, 如需删除请联系管理员。

原文链接:BMP180气压传感器波动过大的解决方案,转载请注明来源!

0