天天看點

外設驅動庫開發筆記36:NTC負溫度系數熱電阻測溫驅動

  在嵌入式産品中,溫度檢測非常常見。在成本比較敏感而精度要求較低時,NTC電阻是個不錯的選擇。在這一篇中,我們将讨論如何和設計并實作一個通用的NTC驅動,以便在後續的項目中更友善的複用。

1、功能概述

  NTC是指随溫度上升電阻呈指數關系減小、具有負溫度系數的熱敏電阻現象和材料。NTC熱敏電阻是以錳、銅、矽、鈷、鐵、鎳、鋅等金屬氧化物為主要材料,采用陶瓷工藝制造而成的,其電阻率和材料常數随材料成分比例、燒結氣氛,燒結溫度和結構狀态不同而變化。現在還出現了以碳化矽、硒化錫、氮化钽等為代表的非氧化物系NTC熱敏電阻材料。是以,在實作小型化的同時,還具有電阻值、溫度特性波動小、對各種溫度變化響應快的特點,可進行高靈敏度、高精度的檢測。

  NTC 熱敏電阻是一種典型具有溫度敏感性的半導體電阻。根據标準IEC 60539-1的規定,NTC的電阻與溫度存在如下關系曲線:

外設驅動庫開發筆記36:NTC負溫度系數熱電阻測溫驅動

  對于NTC的這種電阻與溫度的關系也可以使用近似的舒徐公式來表示:

外設驅動庫開發筆記36:NTC負溫度系數熱電阻測溫驅動

  其中,R是在絕對溫度T時,NTC的零功率電阻。Ra是在絕對溫度Ta時,NTC的零功率電阻。

  B值是負溫度系數熱敏電阻器的熱敏常數,每種既定的材料都隻有一個B值。B值可以通過測量在25攝氏度和50攝氏度(或85攝氏度)時的電阻值後進行計算。B值與産品電阻溫度系數正相關,也就是說B值越大,其電阻溫度系數也就越大。

2、驅動設計與實作

  NTC作為測溫元件的原理我們已經明白了,在此基礎上我們就可以來實作其測溫的驅動程式。

2.1、對象定義

  我們依然是将NTC當作一個對象,首先定義其對象類型。對于不同的NTC有三個參數是與其自身緊密相關的,或者說一旦制造就不會更改的。那就是B值、标稱溫度與标稱電阻。B值與材質有關,标稱溫度通常定為25攝氏度,标稱電阻則為标稱溫度下的電阻。是以我們定義NTC對象類型為:

/* 定義NTC電阻測溫對象 */
typedef struct NTCObject{
     float BValue;       //NTC的B常數
     float nominalT;     //NTC标稱溫度(攝氏度)
     float nominalR;     //NTC标稱電阻
}NTCObjectType;
           

  在一個對象使用之前必須對其實作初始化配置。主要是對指針進行檢查及對屬性變量和操作指針進行指派。

/* NTC對象初始化函數 */
void NTCInitialization(NTCObjectType *ntc,float bValue,float nt,float nr)
{
     if(ntc==NULL)
     {
        return;
     }
     
     ntc->BValue=bValue;
     ntc->nominalT=nt;
     ntc->nominalR=nr;
}
           

2.2、對象操作

  在我們實作了對象的定義和初始化之後,我們就可以操作對象來得到溫度值。那麼如何操作對象得到溫度值呢?我們前面已經提到過,NTC是一種随溫度上升時,電阻值呈指數關系減小的熱敏電阻。而這種指數關系就是我們前面提到的電阻與溫度的關系表達式。于是我們就可以根據這一表達式推導出有電阻計算溫度的公式:

外設驅動庫開發筆記36:NTC負溫度系數熱電阻測溫驅動

  根據以上公式我們可以通過檢測電阻來計算溫度:

/*公式法計算NTC溫度值*/
float NTCTemperature(NTCObjectType *ntc,float resistance)
{
 float temp;
 float result=0.0;
 
 result=resistance/ntc->nominalR;
 result=(log(result)/ntc->nominalR)+(1/(ntc->nominalT+KELVIN_CONSTANT));
 temp=1/result-KELVIN_CONSTANT;
 
 return temp;
}
           

3、驅動的使用

  接下來使用我們前面開發的驅動來實作NTC檢測溫度。首先需要使用NTCObjectType對象類型聲明NTC對象變量。

  NTCObjectType ntc;

  這個對象變量必須初始化才能使用。是以我們采用初始化函數對這個變量進行初始化:

  NTCInitialization(&ntc,bValue,nt,nr);

  如果是有多個NTC對象可以使用數組等方式來處理。初始化完成後我們就可以操作該對象了。我們通常會采用一個電橋電路來檢測NTC電阻,以測量目前的溫度。電路圖如下:

外設驅動庫開發筆記36:NTC負溫度系數熱電阻測溫驅動

  上圖中我們通過一個電橋來采集NTC電阻的變化,因為電阻的變化會引起C17兩端電壓的變化。溫度越高NTC電阻越小,C17兩端電壓差就越大,反之越小。我們采用了25攝氏度時,阻值為10K的NTC。不難推斷出輸出電壓與NTC電阻值的關系。當輸出電壓為0V時,電阻約25K,查表可知溫度為5攝氏度左右。當輸出電壓為5V時,電阻值接近0,查表可知在100攝氏度以上。這也便是這個電路的理論測量範圍。

  我們檢測到目前的電阻後,調用NTCTemperature(NTCObjectType *ntc,float resistance);函數來計算對應的溫度值。

4、應用總結

  使用NTC作為測溫和控溫的元件所得到的結果基本與預期的一緻。但在控溫的精度和響應速度上略有不足,對于一般的應用是完全足夠的。在要求較高的場合我們也可以通過軟體提高控溫精度。

  使用NTC作為測溫元件需要注意,由于阻值與溫度的非線性,而我們解非線性方程可能會造成較大誤差,是以測溫有時候會有較大的誤差。而且NTC的測溫範圍很有限,是以使用是需要考慮這個問題。同時NTC存在較大的個體差異。當然作為一般的應用這些都不是問題。

歡迎關注:

外設驅動庫開發筆記36:NTC負溫度系數熱電阻測溫驅動

如果閱讀這篇文章讓您略有所得,還請點選下方的【好文要頂】按鈕。

當然,如果您想及時了解我的部落格更新,不妨點選下方的【關注我】按鈕。

如果您希望更友善且及時的閱讀相關文章,也可以掃描上方二維碼關注我的微信公衆号【木南創智】

繼續閱讀