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

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;

相关技术文档:

Silicon Labs EFM32JG12 Jade Gecko 32位MCU数据手册 详情>>>

Silicon Labs EFM32JG1 32 bit MCU 详细数据手册(英文) 详情>>>

看到这里您是否又有项目灵感需实现,点击下面开发软件帮你忙。

Silicon Labs Simplicity Studio平台开发工具

05-11 22:49