基于AVR單片機(jī)捕獲中斷和熱敏電阻的溫度測(cè)量
溫度測(cè)量常采用熱敏電阻做傳感器,測(cè)量的方法有R-V轉(zhuǎn)換電壓測(cè)量法和R-F轉(zhuǎn)換頻率測(cè)量法。這兩種方法的電路復(fù)雜成本高,并且電路中很多元器件直接影響測(cè)量精度。本文介紹一種類R-F轉(zhuǎn)換頻率測(cè)量溫度的方法。
1 負(fù)溫?zé)崦綦娮?/p>
PSB型負(fù)溫?zé)崦綦娮栌蒀o,Mn,Ni等過渡金屬元素的氧化物組成,經(jīng)高溫?zé)砂胩沾桑冒雽?dǎo)體毫微米的精密加工工藝,采用玻璃管封裝,耐溫性好,可靠性高,反應(yīng)速度快、靈敏度高。他采用軸向型結(jié)構(gòu),便于安裝,能承受更高溫度,且玻璃封裝耐高低溫(-50~350℃)。PT-25E2熱敏電阻溫度阻值變化曲線圖如圖1所示。
2 AVR單片機(jī)測(cè)溫原理
溫度測(cè)量電路如圖2所示,標(biāo)準(zhǔn)電阻Rp,熱敏電阻Rt,電容C1與AVR單片機(jī)三個(gè)引腳相連。其中PC0,PC1為一般普通IO引腳,CP1為捕獲觸發(fā)輸入引腳,可以設(shè)定上升沿觸發(fā)捕獲中斷。
Rp為100 kΩ的精密電阻;Rt為100 kΩ精度為1%的熱敏電阻;C1為0.1μF的瓷片電容。
其工作原理為:
先將PC0,PC1,CP1都設(shè)為低電平輸出,使C1完全放電。
接著將PC1,CP1設(shè)置為輸入狀態(tài),PC0設(shè)為高電平輸出,通過Rp電阻對(duì)C1充電,同時(shí)啟動(dòng)內(nèi)部定時(shí)器從零開始計(jì)時(shí)。電容實(shí)際充電曲線如圖3所示,當(dāng)C1上的電壓逐步升高到Vh,CP1檢測(cè)出電壓達(dá)到單片機(jī)高電平輸入門檻電壓時(shí),將定時(shí)器計(jì)數(shù)值捕獲,從而測(cè)出從開始充電到CP1轉(zhuǎn)變?yōu)楦唠娖降臅r(shí)間Tp。
再次將PC0,PC1,CP1都設(shè)為低電平輸出,使C1完全放電。
隨后將PC0,CP1設(shè)置為輸人狀態(tài),PC1設(shè)為高電平輸出,通過Rt電阻對(duì)C1充電,過程同上,得到時(shí)間Tt。
通過單片機(jī)計(jì)算得到熱敏電阻Rt的阻值,并通過查表法可以得到溫度值。
從上述可以看出,該測(cè)溫電路的誤差來源于這幾個(gè)方面:?jiǎn)纹瑱C(jī)的定時(shí)器精度,精密電阻Rp的精度,熱敏電阻Rt的精度,而與單片機(jī)的輸出電壓值、門檻電壓值、電容精度無關(guān)。因此,適當(dāng)選取熱敏電阻Rt和精密電阻Rp的精度,單片機(jī)的工作頻率夠高,就可以得到較好的測(cè)溫精度。
3 AVR捕獲
本文以AVR系列中高性價(jià)比的ATmage88為例,利用16位時(shí)鐘單元T/C1的捕獲中斷來實(shí)現(xiàn)電容充電時(shí)間的測(cè)量,單片機(jī)時(shí)鐘選擇8 MHz。輸入捕獲單元方框圖如圖4所示。當(dāng)引腳ICP1上的邏輯電平(事件)發(fā)生了變化,并且這個(gè)電平變化為邊沿檢測(cè)器所證實(shí),輸入捕捉被激發(fā):16位的TCNT1數(shù)據(jù)被復(fù)制到輸入捕捉寄存器ICR1,同時(shí)輸入捕捉標(biāo)志位ICF1置位。如果此時(shí)ICIE1為1,輸入捕捉標(biāo)志將產(chǎn)生輸入捕獲中斷。
ATmega88在3.3 V供電時(shí),當(dāng)電容電壓上升到1.84 V時(shí),如圖3所示,發(fā)生捕獲中斷。
4 軟件設(shè)計(jì)
基于ATmage88捕獲中斷測(cè)溫程序流程圖如圖5所示,包括主程序流程圖,捕獲中斷流程圖和定時(shí)溢出中斷流程圖。
ATmage88定時(shí)器初始化涉及TCCR1B,TIMSK1控制寄存器的配置,介紹如下:
ICNC1:輸入捕捉噪聲抑制器,“1”啟用;
ICES1:捕捉觸發(fā)沿選擇,“1”上升沿,“0”下降沿;
CS1[2:0]:時(shí)鐘選擇,有多種預(yù)分頻時(shí)鐘可供選擇;
ICIE1:T/C1輸入捕捉中斷使能;
TOIE1:T/C1溢出中斷使能。
定時(shí)器T1初始化代碼如下(AVR-GCC):
其中宏定義Tp=0;Tt=1;需要定義數(shù)組:
uint16_t timeL[2],timeH[2],counter[2]
當(dāng)測(cè)量時(shí)間超過定時(shí)器最長(zhǎng)計(jì)時(shí)時(shí),定時(shí)器會(huì)溢出,定時(shí)器T1溢出中斷函數(shù)代碼如下:
最后通過查表法就可以得到測(cè)量的溫度。查表溫度間隔一般為1℃,如果忽略熱敏電阻1℃以內(nèi)的非線性誤差,可以將兩攝氏度之間取線性計(jì)算,這樣可以得到0.1℃的分辨率。
5 結(jié) 語(yǔ)
筆者應(yīng)用該方法已設(shè)計(jì)出一款溫度計(jì),在范圍-10~80℃時(shí),分辨率達(dá)到0.1℃,誤差在0.5℃以內(nèi)。本文充分利用了AVR的捕獲功能,使得電路簡(jiǎn)潔,成本低廉。