摘 要:介紹一種類R—F轉(zhuǎn)換頻率測量溫度的方法,由AVR單片機引腳輸出的高低電平通過熱敏電阻和標準電阻對電容充放電,并由外部輸入捕獲中斷測量充電時間,然后單片機根據(jù)測得的時間和標準電阻阻值計算出熱敏電阻的阻值,查表得到溫度值。詳細介紹了該方法的測量原理,給出了主要程序流程圖和關(guān)鍵程序代碼,并在一款溫度計的設(shè)計中成功運用了該方法,實現(xiàn)低成本、高精度的溫度測量。
關(guān)鍵詞:熱敏電阻;溫度測量;AVR單片機;捕獲中斷
中圖分類號:TP391 文獻標識碼:B
文章編號:1004373X(2008)0313803
Temperature Measurement Based on AVR Capture Interrupt and Thermistor
TIAN Kaikun,XU Haixia
(Electrician and Electronics Experiment Center,Hubei Normal University,Huangshi,435002,China)
Abstract:The paper introduces a method of measuring thermistor temperature the similar to R—F convert frequency method,high level or low level output from AVR MCU charges up capacitance through thermistor and standard resistance,outside input capture interrupt measures charged time,and calculates resistance value of thermistor according to charged time and the value of standard resistance,get temperature value by means of table look—up.It discusses the measuring theorem,gives main program flowchart and key code.And this method is successfully launched in designing thermometer,realized lower—cost,high—precision temperature measurement.
Keywords:thermistor;temperature measurement;AVR MCU;capture interrupt
溫度測量常采用熱敏電阻做傳感器,測量的方法有R—V轉(zhuǎn)換電壓測量法和 R—F轉(zhuǎn)換頻率測量法。這兩種方法的電路復(fù)雜成本高,并且電路中很多元器件直接影響測量精度。本文介紹一種類R—F轉(zhuǎn)換頻率測量溫度的方法。
1 負溫?zé)崦綦娮?/p>
PSB型負溫?zé)崦綦娮栌蒀o,Mn,Ni等過渡金屬元素的氧化物組成,經(jīng)高溫?zé)砂胩沾?,利用半?dǎo)體毫微米的精密加工工藝,采用玻璃管封裝,耐溫性好,可靠性高,反應(yīng)速度快、靈敏度高。他采用軸向型結(jié)構(gòu),便于安裝,能承受更高溫度,且玻璃封裝耐高低溫(-50~350 ℃)。PT—25E2熱敏電阻溫度阻值變化曲線圖如圖1所示。
圖1 熱敏電阻PT—25E2溫度阻值曲線圖
2 AVR單片機測溫原理
溫度測量電路如圖2所示,標準電阻Rp,熱敏電阻Rt,電容C1與AVR單片機三個引腳相連。其中PC0,PC1為一般普通IO引腳,CP1為捕獲觸發(fā)輸入引腳,可以設(shè)定上升沿觸發(fā)捕獲中斷。
Rp為100 kΩ的精密電阻;
Rt為100 kΩ精度為1%的熱敏電阻;
C1為0.1 μF的瓷片電容。
圖2 溫度測量電路原理圖
其工作原理為:
先將PC0,PC1,CP1都設(shè)為低電平輸出,使C1完全放電。
接著將PC1,CP1設(shè)置為輸入狀態(tài),PC0設(shè)為高電平輸出,通過Rp電阻對C1充電,同時啟動內(nèi)部定時器從零開始計時。電容實際充電曲線如圖3所示,當C1上的電壓逐步升高到Vh,CP1檢測出電壓達到單片機高電平輸入門檻電壓時,將定時器計數(shù)值捕獲,從而測出從開始充電到CP1轉(zhuǎn)變?yōu)楦唠娖降臅r間Tp。
再次將PC0,PC1,CP1都設(shè)為低電平輸出,使C1完全放電。
隨后將PC0,CP1設(shè)置為輸入狀態(tài),PC1設(shè)為高電平輸出,通過Rt電阻對C1充電,過程同上,得到時間Tt。
圖3 電容充電曲線示波器截圖
根據(jù)電容電壓公式:
通過單片機計算得到熱敏電阻Rt的阻值,并通過查表法可以得到溫度值。
從上述可以看出,該測溫電路的誤差來源于這幾個方面:單片機的定時器精度,精密電阻Rp的精度,熱敏電阻Rt的精度,而與單片機的輸出電壓值、門檻電壓值、電容精度無關(guān)。因此,適當選取熱敏電阻Rt和精密電阻Rp的精度,單片機的工作頻率夠高,就可以得到較好的測溫精度。
3 AVR捕獲
本文以AVR 系列中高性價比的ATmage88為例,利用16位時鐘單元T/C1 的捕獲中斷來實現(xiàn)電容充電時間的測量,單片機時鐘選擇8 MHz。輸入捕獲單元方框圖如圖4所示。當引腳ICP1 上的邏輯電平(事件) 發(fā)生了變化,并且這個電平變化為邊沿檢測器所證實,輸入捕捉被激發(fā):16位的TCNT1 數(shù)據(jù)被復(fù)制到輸入捕捉寄存器ICR1,同時輸入捕捉標志位ICF1置位。如果此時ICIE1為1,輸入捕捉標志將產(chǎn)生輸入捕獲中斷。
ATmega88在3.3 V供電時,當電容電壓上升到1.84 V時,如圖3所示,發(fā)生捕獲中斷。
圖4 捕獲單元框圖
4 軟件設(shè)計
基于ATmage88捕獲中斷測溫程序流程圖如圖5所示,包括主程序流程圖,捕獲中斷流程圖和定時溢出中斷流程圖。
圖5 程序流程圖
ATmage88定時器初始化涉及TCCR1B,TIMSK1控制寄存器的配置,介紹如下:
ICNC1:輸入捕捉噪聲抑制器,“1”啟用;
ICES1:捕捉觸發(fā)沿選擇,“1”上升沿,“0”下降沿;
CS1[2:0]:時鐘選擇,有多種預(yù)分頻時鐘可供選擇;
ICIE1:T/C1輸入捕捉中斷使能;
TOIE1:T/C1溢出中斷使能。
定時器T1初始化代碼如下(AVR—GCC):
void timer1_init(void)
{
TCCR1B = _BV(ICES1) |_BV(CS10);
//上升沿觸發(fā),時鐘不分頻
TIMSK1 =_BV(ICIE1) |_BV(TOIE1);
//捕獲中斷和溢出中斷允許
}
捕獲中斷函數(shù)代碼如下:
SIGNAL(SIG_INPUT_CAPTURE1)
{
if(flag==Tp)
{
timeL[Tp] = ICR1;
timeH[Tp] = counter[Tp];
else
{
timeL[Tt] = ICR1;
timeH[Tt] = counter[Tt];
}
flag = 0xff;
}
}
其中宏定義Tp=0;Tt=1;需要定義數(shù)組:
uint16_t timeL[2],timeH[2],counter[2]
當測量時間超過定時器最長計時時,定時器會溢出,定時器T1溢出中斷函數(shù)代碼如下:
SIGNAL(SIG_OVERFLOW1)
{
if(flag==Tp) counter[Tp]++;
else counter[Tt]++;
}
完成一次測量后,根據(jù)Rt=TtTpRp,得:
最后通過查表法就可以得到測量的溫度。查表溫度間隔一般為1 ℃,如果忽略熱敏電阻1 ℃以內(nèi)的非線性誤差,可以將兩攝氏度之間取線性計算,這樣可以得到0.1 ℃的分辨率。
5 結(jié) 語
筆者應(yīng)用該方法已設(shè)計出一款溫度計,在范圍-10~80 ℃時,分辨率達到0.1 ℃,誤差在0.5 ℃以內(nèi)。本文充分利用了AVR的捕獲功能,使得電路簡潔,成本低廉。
參考文獻
[1]吳華程.AVR單片機捕獲中斷實現(xiàn)紅外線解碼[J].國外電子元器件,2005(8):21—23.
[2]傅民倉,馮立杰,袁俊飛.基于PIC 單片機的熱敏電阻數(shù)字化方法[J].現(xiàn)代電子技術(shù),2006,29(5):76—78.
[3]AVR 8—bit Microcontroller Data Sheet: en_mega88.pdf[Z].ATMEL Corporation,2004.
[4]芝浦電子.PT—25E2—H1 Data sheet[Z].2000.
作者簡介 田開坤 男,1978年出生,湖北五峰縣人,講師。主要從事電子、通信與自動控制技術(shù)方向的研究。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。