RG选用10k 1%精度NTC热敏电阻,R1使用10k 1%精度贴片电阻,电路如下图1所示,使用N76E003单片机AIN4通道进行采样,使用带隙电压进行修正。
分压计算公式:Urg=[RG/(RG+R1)]*Vdd *Coe
其中Coe是通过带隙电压得到的修正系数,为了获得正确的Vdd电压
(图1)
下图2为NTC热敏电阻数据手册中给出的电阻值对应温度表
(图2)
在程序中建立一温度/电阻对应数组(其中温度为数组的对应位)
//正温度数组
float TemperList1[55]={32.1,30.6,29.1,27.7,26.4,25.2,23.9,22.8,21.7,20.7,19.7,18.8,18,
17.1,16.4,15.6,14.9,14.2,13.6,13,12.4,11.9,11.4,10.9,10.4,10,9.5,9.1,8.7,8.4,8,7.7,
7.4,7.1,6.8,6.5,6.2,6,5.7,5.5,5.3,5.1,4.9,4.7,4.5,4.3,4.1,4,3.8,3.7,3.5,3.4,3.3,3.2,3};
带隙电压获取与修正在此不表,如有需要请看这篇博客
ADC_VC为单片机AIN4采集到的电压值
NTCr为计算得到的电阻值
TemperList1为正温度对照表
TemperAddr初值为-1,为温度值
/*热敏电阻测温度*/
/*
1、逆推NTC阻值——NTCr=(-10000*ADC_VC)/(ADC_VC-3300)
2、使用查表法(温度作为地址)
*/
void ADC_NTC()
{
uint i=0;
temp=ADC_VC/1000.00; //将采集到的电压转换为浮点型
NTCr=(10*temp)/(3.2-temp);//计算当前电阻值
if(NTCr<=32.1&&NTCr>=3)//此时为正温度,使用TemperList1
{
for(i=0;i<55;i++)
{
if(NTCr>TemperList1[i])
{
TemperAddr=i-1;//数据迁移一位
break;//跳出循环
}
}
}
if(TemperAddr!=-1)//为真,则表示已经读出数据
}