- Top Results

See all results

- Bosch Sensortec Community
- Discuss
- MEMS sensors forum
- BME680 Api Observations

Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

Options

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

06-04-2020 10:30 AM - edited 06-04-2020 10:33 AM

I have recently purchased a BME680 for evaluation and noticed that there are some errors in the description of pressure measurement (section 3.3.2) on the datasheet. In the floating point part there are undefined variables var1_p, var2_p and var3_p which comparing with the actual api code should be simply var1, var2 and var3. There are also some worrying mathematical errors:- (1) In initialising var1, the constant 64000.0 is used in the floating calc and the same effective value 64000 used in the integer calc. This cannot be correct because the integer calc is scaled by a factor of 100. Surely, one of these constants is incorrectly scaled? (2) Again comparing the update to var1 (line 5 in each case), the floating point and the integer versions are not mathematically equivalent. (3) Both the above issues are replicated in the driver library.

It looks like the compensation formulae in the data sheet have been reverse engineered from the code. It would be helpful and much clearer if the formula were expressed mathematically for all the compensation calculations and leave the programmer to implement them appropriately. For example the temperature compensation appears to be a simple hyperbolic function: t_comp = (x - a)(b + (x-a)c)/d . Some of the manipulations documented are obscure and I suspect have been programmed to avoid register overflow. This makes it tricky to implement the formula in other languages such as java.

Solved! Go to Solution.

4 REPLIES 4

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

06-04-2020 04:45 PM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

06-04-2020 05:36 PM

Hi,

Thanks for your inquiry.

We will investigate the conversion code in BME680 datasheet for the pressure sensor part to see if there is any mathematical mismatch regarding floating and integer calculations. We will then get back to you.

Regrading the calibration parameters for temperature sensor, pressure sensor and humidity, each BME680 has been factory calibrated and trimmed before shipping to the market. In order to get final compensated temperature, pressure and humidity results, we provide sample code in both datasheet and driver at https://github.com/BoschSensortec/BME680_driver. If users use different programming languages, then they can verify if the final compensated values match the environmental truth or not. The formula doesn't help too much to understand how the conversions work because they have been designed in the ASIC part of BME680.

Thanks.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

06-05-2020 06:59 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

08-11-2020 04:39 AM

In relation to the original question, I have found inconsistency among API and Datasheet for the calculation of gas sensor heater resistance.

Page 21 of Datasheet shows floating point and integer calculations but they are not equivalent. var1 in integer calculation is (amb_temp*par_g3/10)<<8, but the floating point method calculates this part as (amb_temp*par_g3*10)<<8 (var1 in the floating point method is different from that in the integer method, so I have deduced this result by rearranging the entire floating point formulae).

Moreover, the integer calculation in API is var1=(amb_temp*par_g3)/1000)*256 (small modifications made for clarity) in line 1006 of bme680.c. The floating point calculation in API looks the same as that in Datasheet.

So, there are three variations in calculating var1 or its equivalent, each 100 times different from another. Could you tell me which is correct, and hopefully fix the incorrect formulae? Thank you.

- Top Results

See all results