2017-05-09 13:59:35 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
****************************************************************************
|
|
|
|
* Copyright (C) 2017 - 2018 Bosch Sensortec GmbH
|
|
|
|
*
|
|
|
|
* File : bme680_calculations.h
|
|
|
|
*
|
|
|
|
* Date: 5 May 2017
|
|
|
|
*
|
|
|
|
* Revision : 2.2.0 $
|
|
|
|
*
|
|
|
|
* Usage: Sensor Driver for BME680 sensor
|
|
|
|
*
|
|
|
|
****************************************************************************
|
|
|
|
*
|
|
|
|
* \section Disclaimer
|
|
|
|
*
|
|
|
|
* Common:
|
|
|
|
* Bosch Sensortec products are developed for the consumer goods industry.
|
|
|
|
* They may only be used within the parameters of the respective valid
|
|
|
|
* product data sheet. Bosch Sensortec products are provided with the
|
|
|
|
* express understanding that there is no warranty of fitness for a
|
|
|
|
* particular purpose.They are not fit for use in life-sustaining,
|
|
|
|
* safety or security sensitive systems or any system or device
|
|
|
|
* that may lead to bodily harm or property damage if the system
|
|
|
|
* or device malfunctions. In addition,Bosch Sensortec products are
|
|
|
|
* not fit for use in products which interact with motor vehicle systems.
|
|
|
|
* The resale and or use of products are at the purchasers own risk and
|
|
|
|
* his own responsibility. The examination of fitness for the intended use
|
|
|
|
* is the sole responsibility of the Purchaser.
|
|
|
|
*
|
|
|
|
* The purchaser shall indemnify Bosch Sensortec from all third party
|
|
|
|
* claims, including any claims for incidental, or consequential damages,
|
|
|
|
* arising from any product use not covered by the parameters of
|
|
|
|
* the respective valid product data sheet or not approved by
|
|
|
|
* Bosch Sensortec and reimburse Bosch Sensortec for all costs in
|
|
|
|
* connection with such claims.
|
|
|
|
*
|
|
|
|
* The purchaser must monitor the market for the purchased products,
|
|
|
|
* particularly with regard to product safety and inform Bosch Sensortec
|
|
|
|
* without delay of all security relevant incidents.
|
|
|
|
*
|
|
|
|
* Engineering Samples are marked with an asterisk (*) or (e).
|
|
|
|
* Samples may vary from the valid technical specifications of the product
|
|
|
|
* series. They are therefore not intended or fit for resale to third
|
|
|
|
* parties or for use in end products. Their sole purpose is internal
|
|
|
|
* client testing. The testing of an engineering sample may in no way
|
|
|
|
* replace the testing of a product series. Bosch Sensortec assumes
|
|
|
|
* no liability for the use of engineering samples.
|
|
|
|
* By accepting the engineering samples, the Purchaser agrees to indemnify
|
|
|
|
* Bosch Sensortec from all claims arising from the use of engineering
|
|
|
|
* samples.
|
|
|
|
*
|
|
|
|
* Special:
|
|
|
|
* This software module (hereinafter called "Software") and any information
|
|
|
|
* on application-sheets (hereinafter called "Information") is provided
|
|
|
|
* free of charge for the sole purpose to support your application work.
|
|
|
|
* The Software and Information is subject to the following
|
|
|
|
* terms and conditions:
|
|
|
|
*
|
|
|
|
* The Software is specifically designed for the exclusive use for
|
|
|
|
* Bosch Sensortec products by personnel who have special experience
|
|
|
|
* and training. Do not use this Software if you do not have the
|
|
|
|
* proper experience or training.
|
|
|
|
*
|
|
|
|
* This Software package is provided `` as is `` and without any expressed
|
|
|
|
* or implied warranties,including without limitation, the implied warranties
|
|
|
|
* of merchantability and fitness for a particular purpose.
|
|
|
|
*
|
|
|
|
* Bosch Sensortec and their representatives and agents deny any liability
|
|
|
|
* for the functional impairment
|
|
|
|
* of this Software in terms of fitness, performance and safety.
|
|
|
|
* Bosch Sensortec and their representatives and agents shall not be liable
|
|
|
|
* for any direct or indirect damages or injury, except as
|
|
|
|
* otherwise stipulated in mandatory applicable law.
|
|
|
|
*
|
|
|
|
* The Information provided is believed to be accurate and reliable.
|
|
|
|
* Bosch Sensortec assumes no responsibility for the consequences of use
|
|
|
|
* of such Information nor for any infringement of patents or
|
2016-06-22 14:23:09 +02:00
|
|
|
* other rights of third parties which may result from its use.
|
|
|
|
* No license is granted by implication or otherwise under any patent or
|
2017-05-09 13:59:35 +02:00
|
|
|
* patent rights of Bosch. Specifications mentioned in the Information are
|
|
|
|
* subject to change without notice.
|
|
|
|
**************************************************************************/
|
2016-06-22 14:23:09 +02:00
|
|
|
/*! \file bme680_calculations.h
|
|
|
|
\brief BME680 Sensor Driver calculation Header File */
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
#ifndef __BME680_CALCULATIONS_H__
|
|
|
|
#define __BME680_CALCULATIONS_H__
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C"
|
|
|
|
{
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
Header files
|
|
|
|
****************************************************************************/
|
|
|
|
#include "bme680.h"
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
Macros, Enums, Constants
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
Module globals, typedefs
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
Function definitions
|
|
|
|
****************************************************************************/
|
|
|
|
/* bme680_calculations.h */
|
|
|
|
#ifdef FIXED_POINT_COMPENSATION
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION FOR INTEGER OUTPUT GAS*/
|
|
|
|
/**************************************************************/
|
|
|
|
/*!
|
|
|
|
* @brief This function is used to convert uncompensated gas data to
|
|
|
|
* compensated gas data using compensation formula(integer version)
|
|
|
|
*/
|
|
|
|
s32 bme680_calculate_gas_int32(u16 gas_adc_u16, u8 gas_range_u8,
|
|
|
|
struct bme680_t *bme680);
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION FOR INTEGER OUTPUT TEMPERATURE*/
|
|
|
|
/**************************************************************/
|
|
|
|
/*!
|
|
|
|
* @brief This function is used to convert the uncompensated
|
|
|
|
* temperature data to compensated temperature data using
|
|
|
|
* compensation formula(integer version)
|
|
|
|
*
|
|
|
|
* @note Returns the value in 0.01 degree Centigrade
|
|
|
|
* Output value of "5123" equals 51.23 DegC.
|
|
|
|
*/
|
|
|
|
s32 bme680_compensate_temperature_int32(u32 v_uncomp_temperature_u32,
|
|
|
|
struct bme680_t *bme680);
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION FOR INTEGER OUTPUT HUMIDITY*/
|
|
|
|
/**************************************************************/
|
|
|
|
/*!
|
|
|
|
* @brief This function is used to convert the uncompensated
|
|
|
|
* humidity data to compensated humidity data using
|
|
|
|
* compensation formula(integer version)
|
|
|
|
*
|
|
|
|
* @note Returns the value in %rH as unsigned 32bit integer
|
|
|
|
* in Q22.10 format(22 integer 10 fractional bits).
|
|
|
|
* @note An output value of 42313 represents 42313 / 1024 = 41.321 %rH
|
|
|
|
*/
|
|
|
|
s32 bme680_compensate_humidity_int32(u32 v_uncomp_humidity_u32,
|
|
|
|
struct bme680_t *bme680);
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION FOR INTEGER OUTPUT PRESSURE*/
|
|
|
|
/**************************************************************/
|
|
|
|
/*!
|
|
|
|
* @brief This function is used to convert the uncompensated
|
|
|
|
* pressure data to compensated pressure data data using
|
|
|
|
* compensation formula(integer version)
|
|
|
|
*
|
|
|
|
* @note Returns the value in Pascal(Pa)
|
|
|
|
* Output value of "96386" equals 96386 Pa = 963.86 hPa = 963.86 millibar
|
|
|
|
*/
|
|
|
|
s32 bme680_compensate_pressure_int32(u32 v_uncomp_pressure_u32,
|
|
|
|
struct bme680_t *bme680);
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION FOR INTEGER TEMPERATURE-RESISTANCE*/
|
|
|
|
/**************************************************************/
|
|
|
|
/*!
|
|
|
|
* @brief This function is used to convert temperature to resistance
|
|
|
|
* using the integer compensation formula
|
|
|
|
*/
|
|
|
|
u8 bme680_convert_temperature_to_resistance_int32(u16 heater_temp_u16,
|
|
|
|
s16 ambient_temp_s16, struct bme680_t *bme680);
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION TO CONVERT INT32_H to U16_H BIT OPUTPUT*/
|
|
|
|
/**************************************************************/
|
|
|
|
/*!
|
|
|
|
* @brief Reads actual humidity from uncompensated humidity
|
|
|
|
*
|
|
|
|
* @note Returns the value in %rH as unsigned 16bit integer
|
|
|
|
* @note An output value of 42313 represents 42313/512 = 82.643 %rH
|
|
|
|
*/
|
|
|
|
u16 bme680_compensate_H_int32_sixteen_bit_output(u32 v_uncomp_humidity_u32,
|
|
|
|
struct bme680_t *bme680);
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION TO CONVERT INT32_T to S16_T BIT OPUTPUT*/
|
|
|
|
/**************************************************************/
|
|
|
|
/*!
|
|
|
|
* @brief Reads actual temperature from uncompensated temperature
|
|
|
|
*
|
|
|
|
* @note Returns the value with 500LSB/DegC centred around 24 DegC
|
|
|
|
* output value of "5123" equals(5123/500)+24 = 34.246DegC
|
|
|
|
*/
|
|
|
|
s16 bme680_compensate_T_int32_sixteen_bit_output(u32 v_uncomp_temperature_u32,
|
|
|
|
struct bme680_t *bme680);
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION TO CONVERT INT32_P to U24_P BIT OPUTPUT*/
|
|
|
|
/**************************************************************/
|
|
|
|
/*!
|
|
|
|
* @brief Reads actual pressure from uncompensated pressure in Pa.
|
|
|
|
*
|
|
|
|
* @note Output value of "12337434" represents
|
|
|
|
* 12337434 / 128 = 96386.2 Pa = 963.862 hPa
|
|
|
|
*/
|
|
|
|
u32 bme680_compensate_P_int32_twentyfour_bit_output(u32 v_uncomp_pressure_u32,
|
|
|
|
struct bme680_t *bme680);
|
|
|
|
|
|
|
|
#else
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION FOR FLOAT OUTPUT GAS */
|
|
|
|
/**************************************************************/
|
|
|
|
/*!
|
|
|
|
* @brief This function is used to convert uncompensated gas data to
|
|
|
|
* compensated gas data using compensation formula
|
|
|
|
*/
|
|
|
|
double bme680_compensate_gas_double(u16 gas_adc_u16, u8 gas_range_u8,
|
|
|
|
struct bme680_t *bme680);
|
|
|
|
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION FOR FLOAT OUTPUT HUMIDITY */
|
|
|
|
/**************************************************************/
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* @brief This function is used to convert the uncompensated
|
|
|
|
* humidity data to compensated humidity data data using
|
|
|
|
* compensation formula
|
|
|
|
*
|
|
|
|
* @note returns the value in relative humidity (%rH)
|
|
|
|
* @note Output value of "42.12" equals 42.12 %rH
|
|
|
|
*/
|
|
|
|
double bme680_compensate_humidity_double(u16 uncom_humidity_u16,
|
|
|
|
double comp_temperature, struct bme680_t *bme680);
|
|
|
|
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION FOR FLOAT OUTPUT PRESSURE*/
|
|
|
|
/**************************************************************/
|
|
|
|
/*!
|
|
|
|
* @brief This function is used to convert the uncompensated
|
|
|
|
* pressure data to compensated data using compensation formula
|
|
|
|
*
|
|
|
|
* @note Returns pressure in Pa as double.
|
|
|
|
* @note Output value of "96386.2" equals 96386.2 Pa = 963.862 hPa.
|
|
|
|
*/
|
|
|
|
double bme680_compensate_pressure_double(u32 uncom_pressure_u32,
|
|
|
|
struct bme680_t *bme680);
|
|
|
|
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION FOR FLOAT OUTPUT TEMPERATURE*/
|
|
|
|
/**************************************************************/
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* @brief This function used to convert temperature data
|
|
|
|
* to uncompensated temperature data using compensation formula
|
|
|
|
*
|
|
|
|
* @note returns the value in Degree centigrade
|
|
|
|
* @note Output value of "51.23" equals 51.23 DegC.
|
|
|
|
*/
|
|
|
|
double bme680_compensate_temperature_double(u32 uncom_temperature_u32,
|
|
|
|
struct bme680_t *bme680);
|
|
|
|
|
|
|
|
/**************************************************************/
|
|
|
|
/**\name FUNCTION FOR TEMPERATURE TO RESISTANCE */
|
|
|
|
/**************************************************************/
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* @brief This function is used to convert temperature to resistance
|
|
|
|
* using the compensation formula
|
|
|
|
*/
|
|
|
|
double bme680_convert_temperature_to_resistance_double(u16 heater_temp_u16,
|
|
|
|
s16 ambient_temp_s16, struct bme680_t *bme680);
|
|
|
|
#endif
|
|
|
|
/* bme680_calculations.h */
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|