小华ADC+NTC温度测量
NTC电阻是一种低成本的温度传感器,在很多方案中都有广泛的使用。本文分享本人使用过程中的一些经验方法,使用小华L196芯片的ADC外设+ NTC电阻实现的一种温度检测方法。此方法有以下特点:1、 不需要高精度基准电压。2、 采样结果自动累加,可以减少MCU的一些工作量,方便做平均,采样值比较稳定。3、 具有温度区间细化功能,提高温度结果的精度,实际进行高低温测试,结果与TI的高精度温度传感器(TMP117)的误差在1℃以内。
硬件设计:硬件设计比较简单,NTC测温核心电路可以简化为如下电路,电阻分压之后直接接入芯片的ADC引脚,测量分压即可计算出当前电阻,并进一步计算出温度。
软件设计:1、 ADC配置本次采样点连接到通道ADCCH11。小华ADC外设支持单通道重复采集,并可以将采集结果进行累加。所以本次代码中,将ADC配置为顺序扫描,扫描数为8,将ADCCH11连续转换8次,并将结结果自动累加。如下代码voidApp_AdcInit(void){ stc_adc_cfg_t stcAdcCfg; DDL_ZERO_STRUCT(stcAdcCfg); ///< 开启ADC/BGR外设时钟 Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE); Bgr_BgrEnable(); ///< 开启BGR ///< ADC 初始化配置 stcAdcCfg.enAdcMode= AdcScanMode; ///<采样模式 多通道采样 stcAdcCfg.enAdcClkDiv = AdcMskClkDiv1; ///<采样分频-1 stcAdcCfg.enAdcSampCycleSel =AdcMskSampCycle8Clk; ///<采样周期数8 stcAdcCfg.enAdcRefVolSel=AdcMskRefVolSelAVDD; ///<参考电压选择 外部AVDD stcAdcCfg.enAdcOpBuf =AdcMskBufDisable; ///<OP BUF配置-关 stcAdcCfg.enInRef =AdcMskInRefDisable;///<内部参考电压使能-关 stcAdcCfg.enAdcAlign= AdcAlignRight; ///<转换结果对齐方式-右 Adc_Init(&stcAdcCfg);}///< ADC 采样模式 配置voidApp_AdcSglCfg(void){
stc_adc_sqr_cfg_t stcAdcSqrCfg; DDL_ZERO_STRUCT(stcAdcSqrCfg); ///< 顺序扫描模式功能及通道配置 stcAdcSqrCfg.bSqrDmaTrig = FALSE; stcAdcSqrCfg.enResultAcc =AdcResultAccEnable; stcAdcSqrCfg.u8SqrCnt = 8; Adc_SqrModeCfg(&stcAdcSqrCfg); Adc_CfgSqrChannel(AdcSQRCH0MUX,AdcExInputCH11); Adc_CfgSqrChannel(AdcSQRCH1MUX,AdcExInputCH11); Adc_CfgSqrChannel(AdcSQRCH2MUX,AdcExInputCH11); Adc_CfgSqrChannel(AdcSQRCH3MUX,AdcExInputCH11); Adc_CfgSqrChannel(AdcSQRCH4MUX,AdcExInputCH11); Adc_CfgSqrChannel(AdcSQRCH5MUX,AdcExInputCH11); Adc_CfgSqrChannel(AdcSQRCH6MUX,AdcExInputCH11); Adc_CfgSqrChannel(AdcSQRCH7MUX,AdcExInputCH11);}
2、 获取NTC当前阻值在ADC采样之后,就会获得当前的ADC的值。当前ADC的值可以根据参考电压转换成实际电压值,如果参考电压不稳或者参考电压存在一致性不好的问题,那ADC抓换出的电压值也会存在误差,因此常规做法必须要有一个稳定的电压参考源。但实际上,我们最终的目的是要得到NTC的电阻,我们在计算过程中把参考电压消除掉,就可以不去关心参考电压的精度。
假设分压后的电压为V0,ADC采样后的值为V_adc,12位ADC满量程值为0XFFF。则根据电路我们得到以下关系10K / R_NTC = (0XFFF– V_adc) / V_adc;因此 R_NTC = 10k *V_adc /(0XFFF – V_adc)可以看出NTC的阻值,只跟ADC采样值以及标准10K相关,与基准电压无关。代码如下,传入参数为AD采集值,返回对应的NTC电阻值。uint16_tGet_NTC_Res(uint16_t NTC_ADC){ uint16_t NTC_Res = 0; NTC_Res = 10000 * NTC_ADC / (0xfff -NTC_ADC); return NTC_Res;}
3、根据NTC阻值获取温度NTC电阻采用NCP18XH103F03RB,其阻值与温度的对应关系并不是线性的,如下图所示NTC厂家会给出具体的阻值表,以5度为一个跨度,如下图实际代码中,为简化计算,认为每5度的区间内,NTC的温度阻值关系是线性的。因此代码需要做两个步骤,一是确认当前阻值落在哪个温度区间,二是计算当前区间内的具体温度。对于第一步区间查找,本例采用二分法查表
最终获取NTC温度的代码如下
以上就是使用小华ADC和NTC电阻采样温度的方法,需要注意硬件中使用的10K标准电阻要使用1%精度的电阻,实测可以较为准确的测量环境温度,误差在1℃范围内。
ntc电阻是那种阻值变动特别大的温度传感器吗 5度为跨度的话 精度是不是相差很多 adc在采集前是不是应该做一下自校准啊
温度采集本来就相对来说 滞后,查表的话 跨度还这么大
ntc温度传感器是不是也分好多种类呢
这个阻值和温度的转换关系有算法吗
可以,可以,收藏一下
NTC或者PTC都是可以用芯片来搞定的。 本次采样点连接到通道ADCCH11。 小华ADC外设支持单通道重复采集,并可以将采集结果进行累加 NTC电阻的阻值会随着温度变化,而ADC通过测量电阻的分压来推算温度。 学习一下, NTC电阻通常用于温度检测。其电阻值随温度变化而变化,温度越高,电阻越小。
页:
[1]