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)//爲真,則表示已經讀出數據
}