Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 

    BMP390 accuracy problem

    wesleyg
    New Poster

    BMP390 accuracy problem

    Hello,

    we are enountering problems with BMP390 sensor during a fast movements.

    When sensor is stationary, drift is relatively small - just meter or so during a few minutes.

    But when we are doing fast movements up and down periodically measurement has incremental offset with each "down" movement.

    Up and Down movement is same, in range for around +/- 0.5 meter. When we are moving with PCB by hand, not touching the sensor or anything from the electronics, after lets say 20 up and down movements we are + 10 meters in offset. This offset will remain indefinitively.

    Interestingly we have BME280 in our other device and this offset does not happen. We tried several batches of BMP390 and the problem is happening with all of them.

    Can you let me know what could be wrong? We tried all possible oversampling and filter settings with no improvement. There is absolutely no light that could interfere with sensor.

     

    Also when sensor is cold and we will start device, it seems that temperature compensation does not work properly, because it can drift by 30 meters once it stabilizes within 2 minutes.

    Tags (1)
    2 REPLIES 2
    wesleyg
    New Poster

    Re: BMP390 accuracy problem

    I found very interesting thing. Same code executed at PC will result in a different (correct) values. While values executed on ARM MCU is giving wrong values.

    Wow. So this is reason for imprecision. I believe when I will find reason for this, it will work correctly.

    Problem is 64bit math. It seems double nor int64 is working correctly.

    BSTRobin
    Community Moderator

    Re: BMP390 accuracy problem

    Hello wesleyg,

    If your host platform supports double precision operation, open this macro definition BMP3_DOUBLE_PRECISION_COMPENSATION and use the corresponding double type for pressure. Otherwise, uint64_t will be used for pressure type.

    #ifdef BMP3_DOUBLE_PRECISION_COMPENSATION
    /*!
    * @brief bmp3 sensor structure which comprises of temperature and pressure
    * data.
    */
    struct bmp3_data
    {
    /*! Compensated temperature */
    double temperature;

    /*! Compensated pressure */
    double pressure;
    };

    #else
    /*!
    * @brief bmp3 sensor structure which comprises of temperature and pressure
    * data.
    */
    struct bmp3_data
    {
    /*! Compensated temperature */
    int64_t temperature;

    /*! Compensated pressure */
    uint64_t pressure;
    };
    #endif

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist