我們已經(jīng)討論過多種溫度檢測方式,但我們尚未關(guān)注熱電阻溫度檢測,但熱電阻測溫在工業(yè)環(huán)境中是非常常見的。盡管有很多集成的數(shù)字式的熱電阻接口元器件,但這些器件不但成本較高,靈活性也大打折扣。所以我們有時(shí)會(huì)使用更簡單靈活的電路來驅(qū)動(dòng)RTD。而在這一篇中,我們將討論如何設(shè)計(jì)并實(shí)現(xiàn)RTD熱電阻測溫的驅(qū)動(dòng)。
1、功能概述
??RTD熱電阻是常用的測溫元件。RTD的英文全稱為“Resistance Temperature Detector”,因此準(zhǔn)確來說,它應(yīng)該翻譯為“電阻溫度檢測器”。RTD是一種特殊的電阻,其阻值會(huì)隨著溫度的升高而變大,隨著溫度的降低而減小。工業(yè)上利用它的這一特性進(jìn)行溫度測量,因此RTD也被俗稱為“熱電阻”。
??并不是所有的金屬都適合做成RTD,符合這一特性的材料需要滿足如下幾個(gè)要求:
- 該金屬的電阻值與溫度變化能呈線性關(guān)系;
- 該金屬對溫度的變化比較敏感,即單位溫度變化引起的阻值變化(溫度系數(shù))比較大;
- 該金屬能夠抵抗溫度變化造成的疲勞,具有好的耐久性;
??符合該要求的金屬并不多,常見的RTD材料有:鉑(Pt)、鎳(Ni)和銅(Cu)。對應(yīng)的國家統(tǒng)一生產(chǎn)工業(yè)標(biāo)準(zhǔn)化熱電阻有三種:WZP型鉑電阻、WZC型銅熱電阻和WZN型鎳熱電阻。
1.1、鉑熱電阻
??鉑電阻是我們常用的RTD,鉑熱電阻采用溫度系數(shù)為3.885x10-3的元件,溫度和電阻的關(guān)系表達(dá)式:
??在-200℃~0℃為:
??在0℃~850℃為:
??其中:Rt溫度為t℃時(shí)的電阻;R0是溫度為0℃時(shí)的電阻。而各個(gè)系數(shù)均為常數(shù):
??常數(shù)A=3.9083×10-3
??常數(shù)B=-5.775×10-7
??常數(shù)C=-4.183×10-12
??鉑熱電阻對應(yīng)的測溫范圍是:-200℃~850℃。常見的型號(hào)Pt50、Pt100、Pt200、Pt500和Pt1000等。名稱中的數(shù)值表示熱電阻在0℃下的標(biāo)稱電阻值。
1.2、銅熱電阻
??銅熱電阻也是在工業(yè)上常用的RTD,銅熱電阻采用溫度系數(shù)為:4.28x10-3的元件。溫度和電阻的關(guān)系表達(dá)式:
??其中,Rt是溫度為t℃時(shí)的電阻,R0是溫度為0℃時(shí)電阻,而各個(gè)系數(shù)長數(shù)的取值為:
??常數(shù)α=4.28x10-3
??常數(shù)β=-9.31x10-8
??常數(shù)γ=1.23x10-9
??銅熱電阻對應(yīng)的測溫范圍是:-50℃~150℃。而常見的分類型號(hào)有:Cu50、Cu100等。名稱中的數(shù)值表示熱電阻在0℃下的標(biāo)稱電阻值。
1.3、鎳熱電阻
??另一種工業(yè)標(biāo)準(zhǔn)RTD則是鎳熱電阻。鎳熱電阻采用溫度系數(shù)為6.17x10-3的元件。溫度和電阻的關(guān)系表達(dá)式:
??其中,Rt是溫度為t℃時(shí)的電阻,R0是溫度為0℃時(shí)電阻,而各個(gè)系數(shù)長數(shù)的取值為:
??常數(shù)A=5.485x10-3
??常數(shù)B=6.65x10-6
??常數(shù)C=2.805x10-11
??鎳電阻對應(yīng)的測溫范圍是:-60℃~180℃。而常見的分類型號(hào)有:Ni100、Ni300、Ni500等。名稱中的數(shù)值表示熱電阻在0℃下的標(biāo)稱電阻值。
2、驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)
??我們已經(jīng)了解了RTD的特性,以及不同材質(zhì)的RTD溫度與點(diǎn)組的關(guān)系表達(dá)式。接下來我們就實(shí)現(xiàn)通過RTD檢測溫度的驅(qū)動(dòng)。
2.1、對象定義
??在實(shí)現(xiàn)RTD的驅(qū)動(dòng)之前,我們依然需要抽象并定義RTD對象,并將其聲明為對象類型。
2.1.1、對象的抽象
??在實(shí)現(xiàn)對RTD的操作之前,我們先抽象RTD對象。每一個(gè)RTD對象都有幾個(gè)共同的屬性:標(biāo)稱電阻,溫度和類型。類型就是前面所描述的三種,我們將其定義為枚舉。對象的聲明如下:
/* 定義RTD類型枚舉 */
typedef enum RTDCategory {
WZP,
WZC,
WZN
}RTDCategoryType;
/* 定義RTD對象 */
typedef struct RTDObject{
float nominalR; //RTD標(biāo)稱電阻
float temperature; //所測溫度
RTDCategoryType type; //RTD類型
}RTDObjectType;
2.1.2、對象的初始化
??聲明一個(gè)RTD對象后,僅僅只是聲明了一個(gè)對象變量,在賦值之前尚不能使用。所以我們要使用初始化函數(shù)將其初始化之后才可使用。RTD對象的初始化函數(shù)如下:
/* 初始化RTD對象 */
void RTDInitialization(RTDObjectType *rtd,RTDCategoryType type,float nr)
{
if(rtd==NULL)
{
return;
}
rtd->type=type;
rtd->nominalR=nr;
}
2.2、對象操作
??前面我們已經(jīng)提到了各類熱電阻的電阻與溫度的關(guān)系表達(dá)式。在這些表達(dá)式中,二次以上的項(xiàng)的系數(shù)其實(shí)是非常小的,所以在一般要求不高,溫度變化不是很大的場合基本就是線性關(guān)系。所以我們將其簡化為線性方程:
2.2.1、WZP鉑電阻
??鉑電阻的溫度與電阻的關(guān)系在0度以上和0度以下略有差別,但如果我們采用線性近似的話則是一樣的。所以我們采用線性方程實(shí)現(xiàn)如下:
/* 計(jì)算鉑電阻溫度 */
static float CalcWzpTemperature(RTDObjectType *rtd,float rt)
{
float temp=0.0;
float a=0.0039083;
temp=((rt/rtd->nominalR)-1.0)/a;
rtd->temperature=temp;
return temp;
}
2.2.2、WZC銅電阻
??銅電阻的溫度與電阻的關(guān)系表達(dá)式相對復(fù)雜,但好在高次項(xiàng)的影響相對較小,我們依然可以使用線性近似來實(shí)現(xiàn)它。
/* 計(jì)算銅電阻溫度 */
static float CalcWzcTemperature(RTDObjectType *rtd,float rt)
{
float temp=0.0;
float alpha=0.00428;
temp=((rt/rtd->nominalR)-1.0)/alpha;
rtd->temperature=temp;
return temp;
}
2.2.3、WZN鎳電阻
??鎳電阻的電阻溫度系數(shù)比鉑電阻和銅電阻都要好,但其線性度則不如鉑電阻,同樣的是其高次項(xiàng)的影響也相對較小,在溫度并不大范圍變化時(shí)仍然可以采取線性近似。
/* 計(jì)算鎳電阻溫度 */
static float CalcWznTemperature(RTDObjectType *rtd,float rt)
{
float temp=0.0;
float a=0.005485;
temp=((rt/rtd->nominalR)-1.0)/a;
rtd->temperature=temp;
return temp;
}
2.2.4、統(tǒng)一溫度獲取
??面向不同類型的RTD,我們實(shí)現(xiàn)了各自的溫度轉(zhuǎn)換函數(shù),但作為驅(qū)動(dòng)函數(shù)庫,我們總是希望能進(jìn)行無差別調(diào)用。所以我們希望設(shè)計(jì)一個(gè)統(tǒng)一的接口函數(shù)。所幸每種類型RTD操作函數(shù)均有相同的格式,于是我們就很容易想到使用函數(shù)指針來處理它。
float (*CalcTemperature[])(RTDObjectType *rtd,float rt)={CalcWzpTemperature,CalcWzcTemperature,CalcWznTemperature};
/*計(jì)算熱電阻測得的溫度*/
float CalcRTDTemperature(RTDObjectType *rtd,float rt)
{
float temp=0.0;
temp=CalcTemperature[rtd->type](rtd,rt);
return temp;
}
3、驅(qū)動(dòng)的使用
??我們采用RTD測溫時(shí)可以使用這一驅(qū)動(dòng)。其實(shí)用步驟分兩步:聲明并初始化對象;調(diào)用函數(shù)計(jì)算溫度值。接下來我們就來實(shí)現(xiàn)之。
3.1、聲明并初始化對象
??首先使用RTDObjectType類型定義RTD對象,如果有多個(gè)可以使用數(shù)組方式定義。RTDObjectType rtd;或RTDObjectType rtd[N];的形式。其中N為數(shù)量。
??定義對象變量后和以調(diào)用初始化函數(shù)對齊進(jìn)行初始化:
??RTDInitialization(&rtd,type,nr);
??其中type為RTDCategoryType枚舉類型,可以是鉑熱電阻(WZP)、銅熱電阻(WZC)和鎳熱電阻(WZN)。nr為所操作對象在0攝氏度時(shí)的標(biāo)稱電阻值。
3.2、調(diào)用函數(shù)計(jì)算溫度值
??對象初始化后就可以操作對象來獲取對象當(dāng)前時(shí)刻的溫度值。具體如下:
??CalcRTDTemperature(&rtd,rt);
??其中rt為當(dāng)前對象的電阻值。
4、應(yīng)用總結(jié)
??我們實(shí)現(xiàn)了RTD的檢測,對得到的當(dāng)前溫度電阻值,使用根本驅(qū)動(dòng)就可以計(jì)算得到當(dāng)前的溫度。
??本驅(qū)動(dòng)支持鉑熱電阻(WZP)、銅熱電阻(WZC)和鎳熱電阻(WZN)。對于不同該類型,不同標(biāo)稱值的對象均可以使用。不過需要注意:鉑熱電阻對應(yīng)的測溫范圍是:-200℃~850℃;銅熱電阻對應(yīng)的測溫范圍是:-50℃~150℃;鎳電阻對應(yīng)的測溫范圍是:-60℃~180℃。超過范圍的將不被支持。
-
電阻
+關(guān)注
關(guān)注
86文章
5507瀏覽量
171919 -
RTD
+關(guān)注
關(guān)注
1文章
153瀏覽量
27508 -
熱電阻
+關(guān)注
關(guān)注
6文章
373瀏覽量
28002 -
鉑電阻
+關(guān)注
關(guān)注
1文章
73瀏覽量
34200 -
驅(qū)動(dòng)設(shè)計(jì)
+關(guān)注
關(guān)注
1文章
111瀏覽量
15285
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論