TI TMP006 Infrared Thermopile Sensor

Driver for the Texas Instruments TMP006 sensor. More...

Detailed Description

The TI TMP006 (Infrared Thermopile Contactless Temperature Sensor) measures the temperature of an object without need of direct contact with the object. After initialization the sensor can be set active for periodic measurements.
The conversion duration depends on oversample ratio. The oversample ratio can be determined by sensor initialization. The target object temperature can be calculated as follows:

Temperature of sensor's die (2 times right shifting and devide-by 32):

\begin{eqnarray*} T_{\mathrm{DIE}} &=& \frac{T_{\mathrm{RAW}}}{128} \end{eqnarray*}

Difference Temperature in Kelvin:

\begin{eqnarray*} T_{\mathrm{DIFF}} &=& T_{\mathrm{DIE}} - T_{\mathrm{REF}} \end{eqnarray*}

Sensitivity of the thermopile sensor, with $S_{\mathrm{0}}$ as calibration factor:

\begin{eqnarray*} S &=& S_{\mathrm{0}} \cdot ( 1 + a_1 \cdot T_{\mathrm{DIFF}} + a_2 \cdot T_{\mathrm{DIFF}}^2 ) \\ \end{eqnarray*}

Sensor's voltage (the LSB size is $ 156.25\,\mathrm{nV} $):

\begin{eqnarray*} V_{\mathrm{OBJ}} &=& V_{\mathrm{RAW}} \cdot 156.25\,\mathrm{nV} \end{eqnarray*}

Offset voltage:

\begin{eqnarray*} V_{OS} &=& b_0 + b_1 \cdot T_{\mathrm{DIFF}} + b_2 \cdot T_{\mathrm{DIFF}}^2 \\ \end{eqnarray*}

Seebeck coefficients of the thermopile:

\begin{eqnarray*} f(V_{\mathrm{OBJ}}) &=& (V_{\mathrm{OBJ}} - V_{O\mathrm{S}}) + c_2 \cdot (V_{\mathrm{OBJ}} - V_{\mathrm{OS}})^2 \\ \end{eqnarray*}

Temperature of the target object:

\begin{eqnarray*} T_{\mathrm{OBJ}} &=& \sqrt[4]{T_{\mathrm{DIE}}^4 + \frac{f(V_{\mathrm{OBJ}})}{S}} \\ \end{eqnarray*}

Constants:

\begin{eqnarray*} a_{\mathrm{1}} &=& 1.75 \cdot 10^{-3} \\ a_{\mathrm{2}} &=& -1.678 \cdot 10^{-5} \\ T_{\mathrm{REF}} &=& 298.15\,\mathrm{K} \\ b_{\mathrm{0}} &=& -2.94 \cdot 10^{-5} \\ b_{\mathrm{1}} &=& -5.7 \cdot 10^{-7} \\ b_{\mathrm{2}} &=& 4.63 \cdot 10^{-9} \\ c_{\mathrm{2}} &=& 13.4 \end{eqnarray*}

The calculation and constants are wrapped from TI TMP006 User's Guide SBOU107.

Files

file  tmp006.h
 Interface definition for the TMP006 sensor driver.
 
file  tmp006_regs.h
 Register definitions for TMP006 devices.
 

Data Structures

struct  tmp006_params_t
 Parameters needed for device initialization. More...
 
struct  tmp006_t
 Device descriptor for TMP006 sensors. More...
 

Macros

#define TMP006_I2C_ADDRESS   (0x41)
 TMP006 Default Address.
 
#define TMP006_CONVERSION_TIME   (1E6)
 Default Conversion Time in us.
 

Enumerations

enum  {
  TMP006_OK, TMP006_ERROR_BUS, TMP006_ERROR_DEV, TMP006_ERROR_CONF,
  TMP006_ERROR
}
 TMP006 specific return values. More...
 

Functions

int tmp006_init (tmp006_t *dev, const tmp006_params_t *params)
 Initialize the TMP006 sensor driver. More...
 
int tmp006_reset (const tmp006_t *dev)
 Reset the TMP006 sensor, afterwards it should be reinitialized. More...
 
int tmp006_set_active (const tmp006_t *dev)
 Set active mode, this enables periodic measurements. More...
 
int tmp006_set_standby (const tmp006_t *dev)
 Set standby mode. More...
 
int tmp006_read (const tmp006_t *dev, int16_t *rawv, int16_t *rawt, uint8_t *drdy)
 Read sensor's data. More...
 
void tmp006_convert (int16_t rawv, int16_t rawt, float *tamb, float *tobj)
 Convert raw sensor values to temperature. More...
 
int tmp006_read_temperature (const tmp006_t *dev, int16_t *ta, int16_t *to)
 Convenience function to get ambient and object temperatures in [°C]. More...
 

Conversion rate and AVG sampling configuration

#define TMP006_CONFIG_CR_AS1   (0x00)
 Conversion Time 0.25s, AVG Samples: 1.
 
#define TMP006_CONFIG_CR_AS2   (0x01)
 Conversion Time 0.5s, AVG Samples: 2.
 
#define TMP006_CONFIG_CR_AS4   (0x02)
 Conversion Time 1s, AVG Samples: 4.
 
#define TMP006_CONFIG_CR_AS8   (0x03)
 Conversion Time 2s, AVG Samples: 8.
 
#define TMP006_CONFIG_CR_AS16   (0x04)
 Conversion Time 4s, AVG Samples: 16.
 
#define TMP006_CONFIG_CR_DEF   TMP006_CONFIG_CR_AS4
 Default for Testing.
 

Constants for TMP006 calibration

#define TMP006_CCONST_S0   (6.4E-14)
 Calibration Factor.
 
#define TMP006_CCONST_A1   (1.75E-3)
 Constant $a_{\mathrm{1}}$.
 
#define TMP006_CCONST_A2   (-1.678E-5)
 Constant $a_{\mathrm{2}}$.
 
#define TMP006_CCONST_TREF   (298.15)
 Constant $T_{\mathrm{REF}}$.
 
#define TMP006_CCONST_B0   (-2.94E-5)
 Constant $b_{\mathrm{0}}$.
 
#define TMP006_CCONST_B1   (-5.7E-7)
 Constant $b_{\mathrm{1}}$.
 
#define TMP006_CCONST_B2   (4.63E-9)
 Constant $b_{\mathrm{2}}$.
 
#define TMP006_CCONST_C2   (13.4)
 Constant $c_{\mathrm{2}}$.
 
#define TMP006_CCONST_LSB_SIZE   (156.25E-9)
 Sensor Voltage Register LSB Size.
 

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
TMP006_OK 

Success, no error.

TMP006_ERROR_BUS 

I2C bus error.

TMP006_ERROR_DEV 

internal device error

TMP006_ERROR_CONF 

invalid device configuration

TMP006_ERROR 

general error

Definition at line 151 of file tmp006.h.

Function Documentation

◆ tmp006_convert()

void tmp006_convert ( int16_t  rawv,
int16_t  rawt,
float *  tamb,
float *  tobj 
)
Parameters
[in]rawvobject voltage value
[in]rawtraw die temperature value
[out]tambconverted ambient temperature
[out]tobjconverted object temperature

◆ tmp006_init()

int tmp006_init ( tmp006_t dev,
const tmp006_params_t params 
)
Parameters
[out]devdevice descriptor of sensor to initialize
[in]paramsconfiguration parameters
Returns
0 on success
-TMP006_ERROR_BUS on I2C bus error
-TMP006_ERROR_DEV if sensor test failed
-TMP006_ERROR_CONF if sensor configuration failed

◆ tmp006_read()

int tmp006_read ( const tmp006_t dev,
int16_t *  rawv,
int16_t *  rawt,
uint8_t *  drdy 
)
Parameters
[in]devdevice descriptor of sensor
[out]rawvobject voltage value
[out]rawtraw die temperature
[out]drdydata ready, 0 if a conversion is in progress
Returns
0 on success
-1 on error

◆ tmp006_read_temperature()

int tmp006_read_temperature ( const tmp006_t dev,
int16_t *  ta,
int16_t *  to 
)
Note
Temperature scaled by x100 for accuracy and avoid floats
Parameters
[in]devdevice descriptor of sensor
[out]taconverted ambient temperature
[out]toconverted object temperature

◆ tmp006_reset()

int tmp006_reset ( const tmp006_t dev)
Parameters
[out]devdevice descriptor of sensor
Returns
0 on success
-1 on error

◆ tmp006_set_active()

int tmp006_set_active ( const tmp006_t dev)
Parameters
[in]devdevice descriptor of sensor
Returns
0 on success
-1 on error

◆ tmp006_set_standby()

int tmp006_set_standby ( const tmp006_t dev)
Parameters
[in]devdevice descriptor of sensor
Returns
0 on success
-1 on error