STM32一种基于NTC的控温电路及软件实现
NTC(Negative Temperature Coefficient)是一種隨溫度上升時,電阻值呈指數關系減小的熱敏電阻。應用廣泛,最近我們就采用了NTC來控制加熱并測溫,并達到了預期的效果。
1、硬件設計
我們使用三極管作為加熱元件,通過NTC來控制通過三極管的電流,以起到控制溫度的作用,至于溫度控制到多少,可以通過調節電位器來控制。同時使用另一個NTC來測量當前的溫度。電路圖如下:
上圖中我們通過一個電橋來采集NTC電阻的變化,因為電阻的變化會引起C17兩端電壓的變化。溫度越高NTC電阻越小,C17兩端電壓差就越大,反之越小。我們采用了25攝氏度時,阻值為10K的NTC。不難推斷出輸出電壓與NTC電阻值得關系。當輸出電壓為0V時,電阻約25K,查表可知唯獨為5攝氏度左右。當輸出電壓為5V時,電阻值接近0,查表可知在100攝氏度以上。職業便是這個電路的理論測量范圍。
2、軟件設計
前面我們設計了測量電路,也分析了檢測電壓與NTC電阻制的關系。接下來我們主要討論一下軟件設計。軟件的設計我們采用了公式法和查表法兩種方式來獲取溫度值。
2.1、公式法
我們前面已經提到過,NTC是一種隨溫度上升時,電阻值呈指數關系減小的熱敏電阻。而這種指數關系具體如下:
其中,B是NTC的常數,每種為固定值。Rt是NTC的電阻,R為標稱25攝氏度時的電阻。T1是Rt對應的開氏溫度,T2是標稱的開氏溫度。于是我們就可以推導出有電阻計算溫度的公式:
根據以上公式我們可以實現:
/*公式法計算NTC溫度值*/ static float FormulaNTCTemperature(float resistance) {float temp;float result=0.0;result=resistance/NTC_NOMINAL_RESISTANCE;result=(log(result)/NTC_NOMINAL_CONSTANT)+(1/(NTC_NOMINAL_TEMPERATURE+KELVIN_CONSTANT));temp=1/result-KELVIN_CONSTANT;return temp; }2.2、查表法
查表法顧名思義就是通過電阻分度表來獲取溫度區間,再做擬合。首先我們需要建立相應的表我們定義為數組。有了分度表實現也就簡單了,但需要注意兩端極限位置的處理。具體實現如下:
/*查表法計算NTC溫度值*/ static float LookupNTCTemperature(float resistance) {float temp;uint16_t index=NTC_TABLE_LENGTH+10;index=FindTargetLocation(resistance);if(index<=0){temp=ntcValueTable[0][0];}else if(index>=NTC_TABLE_LENGTH){temp=ntcValueTable[0][NTC_TABLE_LENGTH-1];}else{float lowT=ntcValueTable[0][index-1]; //??? float highT=ntcValueTable[0][index];float lowR=ntcValueTable[1][index-1];float highR=ntcValueTable[1][index];temp=((resistance-lowR)*0.5)/(highR-lowR)+lowT;}return temp; }/*查找目標位置*/ static uint16_t FindTargetLocation(float resistance) {uint16_t position=0;while(ntcValueTable[1][position]>resistance){if(position<NTC_TABLE_LENGTH-1){position++;}else{position++;break;}}return position; }3、小結
使用NTC作為測溫和控溫的元件所得到的結果基本與預期的一致。但在控溫的精度和響應速度上略有不足,對于一般的應用是完全足夠的。我們的應用對溫度的穩定性要求比較高所以我們后續做了一些改進。
為了取得更好的控制效果,我們引入一個類似于專家PID的控制器對加熱電源進行PWM調節,類似于與NTC的控制形成串級控制得到了良好的效果。在比較好的情況下,最終溫度可以穩定在0.1度的范圍內。
總結
以上是生活随笔為你收集整理的STM32一种基于NTC的控温电路及软件实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外设驱动库开发笔记6:AD719x系列A
- 下一篇: PID控制器开发笔记之十一:专家PID控