EFM32JG系列MCU内部温度传感器使用方法

judy的头像
judy 发布于:周三, 02/07/2018 - 15:23 ,关键词:

在很多电子类应用场合中,我们经常需要采集产品工作的周围环境温度,一般采取的方式有两种:

1)外加温度传感器

2)采用MCU内部温度传感器

外加温度传感器会增加产品的成本以及布板空间,所以在很多场合,我们只要使用内部温度传感器就可以了,今天给大家介分享一下自带内部温度传感器EFM32JG系列MCU的使用方法和步骤。

基本原理:

EFM32JG的内部ADC集成在模拟模块部分,内部温度传感器上面的电压随着温度变化,需要通过12bit ADC采集温度传感器的ADC值,把ADC值换算成为温度值。

第一步:ADC采集

设置需要采集内部温度传感器的ADC通道,这里需要注意,ADC采用精度需要设置为12bit,参考源选择内部Vref 1.25V,采集信号源选择内部温度传感器。

第二步:读取内部出厂校准值

需要读取两个值:

1)校准的温度值

calTemp0 = ((DEVINFO->CAL & _DEVINFO_CAL_TEMP_MASK)

/ >> _DEVINFO_CAL_TEMP_SHIFT);

2)校准温度在46度下的ADC值

calValue0 = ((DEVINFO->ADC0CAL3

/* _DEVINFO_ADC0CAL3_TEMPREAD1V25_MASK is not correct in

current CMSIS. This is a 12-bit value, not 16-bit. */

& 0xFFF0)

>> _DEVINFO_ADC0CAL3_TEMPREAD1V25_SHIFT);

第三步:根据实际环境ADC采用的值,与校准值之间进行运算补偿,得出环境温度值

计算公式为:

TCELSIUS = CAL_TEMP-(ADC0CAL3_TEMPREAD1V25 - ADC_result)×VFS /(4096× V_TS_SLOPE)

具体代码实现:

readDiff =calValue0/2 - adcSample;

temp=((float)readDiff * 1250);

temp/=(4096 * -1.835);

/* Calculate offset from calibration temperature */

temp =(float)calTemp0-temp;

转自: Ph_one

围观 342