一種基於NTC的控溫電路及軟件實現
阿新 • • 發佈:2017-11-26
推導 極限 div images emp com 兩種 通過 cati
NTC(Negative Temperature Coefficient)是一種隨溫度上升時,電阻值呈指數關系減小的熱敏電阻。應用廣泛,最近我們就采用了NTC來控制加熱並測溫,並達到了預期的效果。
1、硬件設計
我們使用三極管作為加熱元件,通過NTC來控制通過三極管的電流,以起到控制溫度的作用,至於溫度控制到多少,可以通過調節電位器來控制。同時使用另一個NTC來測量當前的溫度。電路圖如下:
上圖中我們通過一個電橋來采集NTC電阻的變化,因為電阻的變化會引起C17兩端電壓的變化。溫度越高NTC電阻越小,C17兩端電壓差就越大,反之越小。我們采用了25攝氏度時,阻值為10K的NTC。不難推斷出輸出電壓與NTC電阻值得關系。當輸出電壓為0V時,電阻約25K,查表可知唯獨為5攝氏度左右。當輸出電壓為5V時,電阻值接近0,查表可知在100攝氏度以上。職業便是這個電路的理論測量範圍。
2、軟件設計
前面我們設計了測量電路,也分析了檢測電壓與NTC電阻制的關系。接下來我們主要討論一下軟件設計。軟件的設計我們采用了公式法和查表法兩種方式來獲取溫度值。
(1)公式法
我們前面已經提到過,NTC是一種隨溫度上升時,電阻值呈指數關系減小的熱敏電阻。而這種指數關系具體如下:
其中,B是NTC的常數,每種為固定值。Rt是NTC的電阻,R為標稱25攝氏度時的電阻。T1是Rt對應的開氏溫度,T2是標稱的開氏溫度。於是我們就可以推導出有電阻計算溫度的公式:
根據以上公式我們可以實現:
1 /*公式法計算NTC溫度值*/ 2 static float FormulaNTCTemperature(floatresistance) 3 { 4 float temp; 5 float result=0.0; 6 7 result=resistance/NTC_NOMINAL_RESISTANCE; 8 result=(log(result)/NTC_NOMINAL_CONSTANT)+(1/(NTC_NOMINAL_TEMPERATURE+KELVIN_CONSTANT)); 9 temp=1/result-KELVIN_CONSTANT; 10 11 return temp; 12 }
(2)查表法
查表法顧名思義就是通過電阻分度表來獲取溫度區間,再做擬合。首先我們需要建立相應的表我們定義為數組。有了分度表實現也就簡單了,但需要註意兩端極限位置的處理。具體實現如下:
1 /*查表法計算NTC溫度值*/ 2 static float LookupNTCTemperature(float resistance) 3 { 4 float temp; 5 uint16_t index=NTC_TABLE_LENGTH+10; 6 7 index=FindTargetLocation(resistance); 8 9 if(index<=0) 10 { 11 temp=ntcValueTable[0][0]; 12 } 13 else if(index>=NTC_TABLE_LENGTH) 14 { 15 temp=ntcValueTable[0][NTC_TABLE_LENGTH-1]; 16 } 17 else 18 { 19 float lowT=ntcValueTable[0][index-1]; 20 float lowR=ntcValueTable[1][index-1]; 21 float highR=ntcValueTable[1][index]; 22 23 temp=((resistance-lowR)*0.5)/(highR-lowR)+lowT; 24 } 25 26 return temp; 27 } 28 29 /*查找目標位置*/ 30 static uint16_t FindTargetLocation(float resistance) 31 { 32 uint16_t position=0; 33 while(ntcValueTable[1][position]>resistance) 34 { 35 if(position<NTC_TABLE_LENGTH-1) 36 { 37 position++; 38 } 39 else 40 { 41 position++; 42 break; 43 } 44 } 45 46 return position; 47 }
歡迎關註:
一種基於NTC的控溫電路及軟件實現