《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計 > 設(shè)計應(yīng)用 > 基于單片機(jī)控制的數(shù)字氣壓計設(shè)計與實現(xiàn)
基于單片機(jī)控制的數(shù)字氣壓計設(shè)計與實現(xiàn)
摘要: 介紹了一種精密數(shù)字氣壓計的軟硬件實現(xiàn)方法,。該方法通過氣壓傳感器獲得與大氣壓相對應(yīng)的模擬電壓值,,并經(jīng)過V/F變換輸入到單片機(jī)進(jìn)行處理,,從而實時顯示相應(yīng)的氣壓值,。用本文所述的方法制成的氣壓計攜帶方便,,操作簡單,,精確度高,,完全符合設(shè)計要求,。
Abstract:
Key words :

1 引言

氣壓計是利用壓敏元件將待測氣壓直接變換為容易檢測,、傳輸?shù)碾娏骰螂妷盒盘?,然后再?jīng)過后續(xù)電路處理并進(jìn)行實時顯示的一種設(shè)備。其中的核心元件就是氣壓傳感器,,它在監(jiān)視壓力大小,、控制壓力變化以及物理參量的測量等方面起著重要作用。運用于氣壓計的氣壓傳感器基本都是依靠不同高度時的氣壓變化來獲取氣壓值的,。

氣象學(xué)研究表明,,在垂直方向上氣壓隨高度增加而降低。例如在低層,,每上升100m?氣壓便降低10hPa,;在5~6km的高空,高度每增加100m,,氣壓便會降低7hPa,;而當(dāng)高度進(jìn)一步增加時,,即到9~10km的高空之后,高度每增加100m,,氣壓便會降低5hPa,;同樣,若空氣中有下降氣流時,,氣壓會增加,;若空氣中有上升氣流時,作用于空氣柱底部的氣壓就會減小,。一般把作用于單位面積上空氣柱的重量稱為大氣壓力,。

2 氣壓計的結(jié)構(gòu)

本文研究的氣壓計結(jié)構(gòu)如圖1所示,。其中氣壓傳感器用來將被測氣壓轉(zhuǎn)換為電壓信號,;用V/F轉(zhuǎn)換器則可把氣壓傳感器輸出的電壓信號轉(zhuǎn)換成具有一定頻率的脈沖信號;以便用單片機(jī)接收該脈沖信號,,并根據(jù)單位時間內(nèi)得到的脈沖數(shù),,依據(jù)電壓與頻率的線性關(guān)系式計算出所對應(yīng)的氣壓值,最后在單片機(jī)控制下由LED顯示出來,。

本氣壓計能夠在氣壓傳感器的線性范圍內(nèi)準(zhǔn)確測量相應(yīng)氣壓值,。需要說明的是,其測量值是絕對氣壓值,。本文研究的氣壓計的技術(shù)指標(biāo)如下:

●測量范圍:300hPa~1050hPa,;

測量精度:0.1%FS(20℃);

●顯示精度:0.1%,,由4個8段LED顯示實現(xiàn),;

●工作溫度范圍:0~85℃;

●電源電壓:9V,。

3 系統(tǒng)實現(xiàn)

在系統(tǒng)構(gòu)建過程中,,需要考慮穩(wěn)定性、復(fù)雜程度,、造價和調(diào)試的難易程度等因素,。圖1所示框圖中的每一部分就是一個單元電路,可完成各自的功能,。模塊之間沒有復(fù)雜的信號傳輸,,且干擾很少,因而系統(tǒng)整體比較穩(wěn)定,。

3.1 氣壓傳感器

氣壓傳感器在氣壓計中占據(jù)核心位置,。設(shè)計時可根據(jù)測量精度、測量范圍,、溫度補償,、測量絕對氣壓值等幾個性能指標(biāo)來選取氣壓傳感器,。

由于該氣壓計顯示的是絕對氣壓值,因而需要選取測量絕對氣壓值的氣壓傳感器,。同時為了簡化電路,,提高穩(wěn)定性和抗干擾能力,要求該氣壓傳感器應(yīng)帶有溫度補償,。

為此,,筆者選用Motorola的MAX4100A氣壓傳感器來測量絕對氣壓值。該傳感器的溫度補償范圍為-40~+125℃,;壓力范圍為20kPa~1050kPa,;輸出電壓信號(Vs=5.0V)范圍為0.3~4.65V;測量精度為0.1%VFSS,,同時在20kPa~1050kPa時具有良好的線性,,具體輸出關(guān)系如下:

Vout=Vs(0.01059 P-0.1528)±Error

式中,Vs是工作電壓, P是大氣壓值,,Vout為輸出電壓,。

3.2 V/F變換

V/F器件的作用是將輸入電壓的幅值轉(zhuǎn)換成頻率與輸入電壓幅值成正比的脈沖串。雖然V/F本身還不能算做量化器,,但加上定時器與計數(shù)器以后也可以實現(xiàn)A/D轉(zhuǎn)換,。它的突出特點就是把模擬電壓轉(zhuǎn)換成抗干擾能力強(qiáng),可遠(yuǎn)距離傳送并能直接輸入計算機(jī)的脈沖串,,從而通過測量V/F的輸出頻率來實現(xiàn)A/D轉(zhuǎn)換功能,。

考慮到外圍電路實現(xiàn)的難易程度和相應(yīng)的性能指標(biāo),筆者選用了LM331電壓/頻率轉(zhuǎn)換芯片,。該器件使用了溫度補償能隙基準(zhǔn)電路,,因而具有極佳的溫度穩(wěn)定性,最大溫漂為50ppm/℃,,同時該器件的脈沖輸出可與任何邏輯形式兼容,;LM331可單、雙電源供電,,電壓范圍為5~40V,;滿量程范圍1Hz~100kHz;最大非線性誤差為0.01%,。圖2所示是該系統(tǒng)中LM331的外圍電路,。在該電路中,基于LM331的壓頻轉(zhuǎn)換關(guān)系為:

fo=K Vi

其中,,K=Rs/(2.09 Rt Ct RL)?,, Rs=Rs1+Rs2

實際上,電路中的Rs主要用于調(diào)節(jié)電路的轉(zhuǎn)換增益?Rt, Ct,,RL的典型值分別為6.8kΩ,、0.01pF和100kΩ,,K值則可由設(shè)計者自己決定。該設(shè)計中,,?。耍剑玻埃埃埃遥螅剑玻福矗玻?kΩ?主要是考慮到單片機(jī)部分使用測頻率法來測fo能夠保證頻率信號的測量精度,。由于Rs,、RL、Rt和電容Ct會直接影響fo的轉(zhuǎn)換結(jié)果,。因此,,對這些元件的參數(shù)有一定的要求,設(shè)計時應(yīng)根據(jù)轉(zhuǎn)換精度適當(dāng)選擇,。電容CL對轉(zhuǎn)換結(jié)果雖然沒有直接影響,,但是應(yīng)選擇漏電流小的電容器。用電阻R1, 電容C1組成低通濾波器,,可減少輸入電壓中的干擾脈沖,,提高轉(zhuǎn)換精度,。

    3.3 單片機(jī)

本氣壓計實現(xiàn)方案需使用單片機(jī)的P1口和P3口的一部分以及一個中斷源,、一個定時器和一個計數(shù)器。因此,,筆者選用了ATMEL的AT89C2051單片機(jī),,該器件與89C51兼容,具有2kB的可重復(fù)編程閃存,,2.7V~6V的工作電壓范圍,,128Byte的內(nèi)部RAM以及兩個I/O口(P1,P3),、2個16位的計數(shù)器/定時器和6個中斷源,,并可直接驅(qū)動LED輸出,同時帶有可編程的串行通訊口,。另外,,該單片機(jī)還具有體積小,價格低等特點,。

3.4 LED顯示

單個LED是由7段發(fā)光二極管構(gòu)成的顯示單元,。有10個引腳,對應(yīng)于7個段,、一個小數(shù)點和兩個公共端,。在顯示電路中,這些發(fā)光二極管有兩種接法:共陽極接法和共陰極接法,。本設(shè)計中需要用4個LED組成顯示單元,,并采用動態(tài)顯示方式,。由于使用4個單個LED進(jìn)行顯示的連線比較復(fù)雜,同時單片機(jī)的端口驅(qū)動能力也難以保證,,而需要加入專門的驅(qū)動芯片,。所以,筆者采用了4個LED連體的,、內(nèi)部已將其相應(yīng)段接好的共陽極LED,,它具有12個引腳,含7個段和4個公共端,,為提高數(shù)碼管的亮度,,可在位選線上加入一個三極管驅(qū)動電路。

由AT89C2051控制的顯示電路如圖3所示,。該顯示電路需要選取合適的電阻R和Ra,,才能保證LED的亮度,過大或者過小都無法讓LED正常顯示,。設(shè)計時?。覟椋矗罚?Omega;?Ra為510Ω比較理想。若考慮印制板布線的方便,,可以采用貼片電阻和排阻來節(jié)省空間,。另外,也可以用74LS244和74LS06構(gòu)成驅(qū)動顯示電路,,但這樣同樣要加限流電阻,。因為74LS06是開漏器件,需要在輸出處加上拉電阻,。

4 軟件實現(xiàn)

通過以上設(shè)計,,便可通過fo來計算P的大小以得到實時的氣壓值。硬件電路設(shè)計完成之后,,可使用AEDK5196PH仿真器的仿真環(huán)境進(jìn)行仿真,,并可用C51語言來編寫處理程序。其基本程序流程如圖4所示,。

程序設(shè)定:T0為定時器,,基本的定時時基為50ms。T1為計數(shù)器,,運用內(nèi)部中斷0可保證T0定時滿500 ms后就讀取此時計數(shù)器的值,,以計算氣壓值。如使T1,、T0均工作于方式1,,并在P1口送字型碼,同時可用P3.0~P3.3做位選線,,那么,,其相應(yīng)的函數(shù)如下:

(1)定時器T0中斷函數(shù):

void timer0(void) interrupt 1 using 1

{uint x, y;

uint count_ pluse;

ET0=0; //關(guān)閉T/C0中斷

Tcount++; //中斷次數(shù)

if?Tcount == 10){

TR1=0; //停止計數(shù)器計數(shù)

Tcount=0;

x=TH1;

y=TL1;

count_pulse=(x*256+y)*2;

ph=(uint)(10 * ((float)(count pulse+1520)/105.9? ?? //計算氣壓值

TH1 = 0x00;  //重設(shè)計數(shù)初值

TL1=0x00;

}

TH0 = -50000/256; //重設(shè)50ms初值

TL0 = -50000%256;

if(TL0!= 0) TH0--;

ET0=1;

TR1=1;

return;

}

該中斷函數(shù)主要用于完成脈沖的讀取和氣壓值的計算,。ph是個全局變量,可用來保存氣壓值,。

(2)在顯示函數(shù)里,,將氣壓值先按位進(jìn)行分離并保存到數(shù)組,然后送段碼和相應(yīng)位選就可以顯示出相應(yīng)的氣壓值了,。具體程序如下:

void display(uint ph_in)

{ uchar i=0;

uchar j=0;

uchar select_bit=0; //位選

do {

cur_buf[i]=ph_in%10;

i++;

j=i;

}while(ph_in=ph_in/10);? //當(dāng)高位為零時?結(jié)束循環(huán)

i=0;

select_bit=0xfe;

do

{ P1=tab[*p];

P3=select_bit;

dl_ms();?

select_bit=(select bit<<1)+1;

//從最右邊一位開始顯示,循環(huán)左移

p++;

i++;

}while(i<j);

p=cur_buf; //指針歸位

return;}

這樣,,在主程序中,只要在程序第一次運行時進(jìn)行初始化,,然后再循環(huán)調(diào)用顯示函數(shù)即可實現(xiàn)實時顯示功能,。

5 結(jié)束語

筆者曾用純硬件電路設(shè)計過氣壓計。實踐表明,,由于受溫度的影響及硬件參數(shù)的限制,,實時顯示時穩(wěn)定性較差,并且精確度不高,。而改用V/F變換信號及編程的方法實現(xiàn)該測量則完全克服了上述缺點,。結(jié)果表明:該方法具有精度高、穩(wěn)定性好,、功能易于擴(kuò)展等優(yōu)點,,可為儀器及電子產(chǎn)品設(shè)計提供一種新的思路。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。