摘 要: 本文中數(shù)字電流表的控制系統(tǒng)采用AT89S51單片機(jī),,A/D轉(zhuǎn)換器采用ADC0809為主要硬件,實(shí)現(xiàn)數(shù)字電流表的硬件電路與軟件設(shè)計(jì),。該系統(tǒng)的數(shù)字電流表電路簡單,,所用的元件較少,成本低,,調(diào)節(jié)工作可實(shí)現(xiàn)自動(dòng)化,。數(shù)字電流表可以測量0~200 mA的8路輸入電流值,并在LCD液晶顯示屏上顯示出來,。
關(guān)鍵詞: 單片機(jī),;數(shù)字電流表;A/D轉(zhuǎn)換器,;液晶顯示屏
0 引言
在現(xiàn)實(shí)中,,根據(jù)測試系統(tǒng)的要求,往往需要采集被測對象的各種參數(shù),如電壓,、電流等,,這些參數(shù)的采集是至關(guān)重要的,,它們直接影響到整個(gè)測試系統(tǒng)的測試精度,。在有些應(yīng)用中,需要對電流進(jìn)行檢測,,必須先將其電流信號(hào)轉(zhuǎn)換為電壓信號(hào),,然后才能實(shí)現(xiàn)A/D轉(zhuǎn)換。常用的轉(zhuǎn)換方法是在電路中加入精密電阻,,由此將電流信號(hào)轉(zhuǎn)換為電壓信號(hào)[1],。這種方法的優(yōu)點(diǎn)是測量簡單方便,但是這種方法當(dāng)電流很小時(shí),,從電阻上取得的電壓值可能很小,,影響測量精度,因而很難選擇一個(gè)合適的阻值,;其次,,所得到的電流檢測信號(hào)只有通過放大以后才能進(jìn)入電路中的比較器,從而增加了電路設(shè)計(jì)調(diào)試時(shí)的復(fù)雜度,。因此,,需要采用電流/電壓轉(zhuǎn)換芯片,并結(jié)合單片機(jī)以實(shí)現(xiàn)對電流信號(hào)的檢測,。本文中采用精密電阻,,克服了常規(guī)測量電流方法存在的測量范圍小、測量誤差大等缺點(diǎn),,可提高測量精度,,同時(shí)采用單片機(jī)可實(shí)現(xiàn)自動(dòng)檢測。
1 硬件電路設(shè)計(jì)
本設(shè)計(jì)旨在設(shè)計(jì)一款測量范圍在0~200 mA,、顯示精度在小數(shù)點(diǎn)前一位的基于AT89S51單片機(jī)帶液晶顯示功能的電流表,,經(jīng)查閱多種相關(guān)資料,確定本設(shè)計(jì)的總體框圖如圖1所示,。
圖1所示電路工作過程:將需要檢測的電流信號(hào)經(jīng)過I/V變換變?yōu)殡妷盒盘?hào),,將其輸出的電壓信號(hào)連接到ADC0809進(jìn)行A/D轉(zhuǎn)換,電壓信號(hào)經(jīng)過采樣后,,輸出到單片機(jī),,單片機(jī)控制中斷的過程以及數(shù)據(jù)的讀取過程,最后通過控制液晶顯示所讀取的數(shù)據(jù),。
1.1 I/V變換電路部分
對本設(shè)計(jì)來說,,由于精度要求并不高,故用有源I/V即可滿足要求,有源I/V變換是利用有源器件——運(yùn)算放大器和電阻電容組成的,,如圖2所示,。
該有源I/V變換電路利用同相放大電路,把電阻R1上的輸入電壓變成標(biāo)準(zhǔn)輸出電壓,。該同相放大電路的放大倍數(shù)為:
若取R1=20 Ω,,R2=100 kΩ,R3=100 kΩ,,R4=25 kΩ,,R5=10 kΩ,則當(dāng)輸入電流為0~200 mA時(shí),,對應(yīng)于0~5 V的電壓輸出,。
1.2 A/D轉(zhuǎn)換模塊
基于成本、功耗,、分辨率,、模擬電壓轉(zhuǎn)換范圍等因素,此處選擇ADC0809芯片,。ADC0809與8051單片機(jī)的硬件接口有3種形式,,分別是查詢方式、中斷方式和延時(shí)等待方式,。A/D轉(zhuǎn)換后得到的數(shù)據(jù)應(yīng)及時(shí)傳送給單片機(jī)進(jìn)行處理,。數(shù)據(jù)傳送的關(guān)鍵問題是如何確認(rèn)A/D轉(zhuǎn)換的完成,因?yàn)橹挥写_認(rèn)完成后,,才能進(jìn)行傳送,。在本設(shè)計(jì)中,選擇中斷方式,,即把表明轉(zhuǎn)換完成的狀態(tài)信號(hào)(EOC)作為中斷請求信號(hào),,以中斷方式進(jìn)行數(shù)據(jù)傳送。
1.3 單片機(jī)模塊
該電流表可測量0~200 mA的直流電壓,,通過電位器調(diào)節(jié)產(chǎn)生,,顯示位數(shù)3位[2],工作電壓5 V,。通過A/D轉(zhuǎn)換芯片ADC0809把模擬信號(hào)轉(zhuǎn)換為數(shù)字量傳送到單片機(jī)的P3口,,并在P2口把轉(zhuǎn)換的結(jié)果顯示出來。在仿真軟件Protesus[3]里選擇元器件后連接電流表總圖,,如圖3所示,。
本設(shè)計(jì)選用的AT89S51是ATMEL公司推出的高性能8位微控制器,由于ADC0809無片內(nèi)時(shí)鐘,,時(shí)鐘信號(hào)可由AT89S51的ALE信號(hào)經(jīng)D觸發(fā)器二分頻后獲得,。ALE引腳的脈沖頻率是8051時(shí)鐘頻率的1/6。本設(shè)計(jì)中單片機(jī)時(shí)鐘頻率采用6 MHz,則ALE輸出的頻率是1 MHz,,二分頻后為500 kHz,,符合ADC0809對頻率的要求。
1.4 顯示部分
本電流表的顯示[4]選擇LCDl602型LCD,,它具有電流小,、功耗低、體積小,、字跡清晰,、美觀,、方便,、使用壽命長、無電磁輻射等優(yōu)點(diǎn),。從圖3中可看出其與AT89S51的P0口相連,,其DO~D7為8位雙向數(shù)據(jù)線,VSS為地電源,,VDD接5 V正向電源,,VEE為液晶顯示器對比度調(diào)整端,接正向電源時(shí)對比度最弱,,而接地電源時(shí)對比度最高,。該引腳通過一只1 kΩ的電位器來調(diào)整其對比度。RS為寄存器選擇引腳,,RS為高電平時(shí)選用數(shù)據(jù)寄存器,;RS為低電平時(shí)選用指令寄存器。RW為可讀寫信號(hào)引腳,,RW高電平時(shí)為讀操作,;RW低電平時(shí)為寫操作。當(dāng)RS和RW共同為低電平時(shí)則寫入指令或者顯示地址,;當(dāng)RS為低電平,、RW為高電平時(shí)為讀忙信號(hào);當(dāng)RS為高電平,、RW為低電平時(shí)為寫人數(shù)據(jù),。E為使能端,當(dāng)E由高電平跳變?yōu)榈碗娖綍r(shí),,LCD液晶模塊開始執(zhí)行命令,。
2 電流表軟件設(shè)計(jì)
本電流表的主程序流程包括:系統(tǒng)初始化、中斷處理程序,、數(shù)值轉(zhuǎn)換程序,、顯示處理程序。較關(guān)鍵的是數(shù)據(jù)采集部分和顯示部分。
2.1 數(shù)據(jù)采集部分
本部分程序設(shè)計(jì)的思想如下:首先由ADC0809采集數(shù)據(jù),,采集完成后單片機(jī)通過中斷將數(shù)據(jù)讀入,,然后將所得十六進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),將此十進(jìn)制數(shù)的百,、十,、個(gè)位分別取出,在預(yù)先設(shè)置好的表中查出其所對應(yīng)的顯示指令并顯示出來,。以下為數(shù)值轉(zhuǎn)換的主代碼[5],。
codes=PORT;//將中斷值賦予codes
codes1=(codes&0xf0)>>4,;//取出codes的高4位
codes0=codes&0x0f,;//取出codes的低4位
code_d=codes1*16+codes0;//將codes轉(zhuǎn)化為十進(jìn)制數(shù)
bai=code_d/100,;//將code_d的百位取出
shi=code_d/10%10,;//將code_d的十位取出
ge=code_d%10;//將code_d的個(gè)位取出
2.2 數(shù)值顯示程序
這部分程序首先要將單位mA顯示出來,,因?yàn)檫@單位是不變的,。要把測得的數(shù)值在液晶屏上顯示出來時(shí),此處調(diào)用一個(gè)getchar函數(shù),。在這個(gè)函數(shù)中,,用了一個(gè)do{}while語句。在此語句的一開頭首先測試液晶模塊是否空閑,,若不空閑則等待其空閑,,當(dāng)液晶空閑時(shí),執(zhí)行嵌套switch/case語句,。由于要顯示三個(gè)數(shù)字,,所以設(shè)定了一個(gè)變量i,當(dāng)i=0時(shí)顯示百位,,當(dāng)i=1時(shí)顯示十位,,當(dāng)i=2時(shí)顯示個(gè)位。顯示數(shù)字時(shí)可選擇查表法,。先建立三個(gè)表,,每一位對應(yīng)一個(gè)表。以下為顯示十位的例子,。
case 1:
{
PA=TABLE2[shi*2+t],;
t++;
}break,;
顯示完成后,,進(jìn)行適當(dāng)?shù)难訒r(shí)以保證顯示的穩(wěn)定性,。
3 結(jié)論
在本次設(shè)計(jì)中,通過使用Proteus繪制電路圖,,用C語言編寫程序,,程序運(yùn)行完畢后,電壓表的顯示屏上就可以顯示出電流數(shù)值來,。調(diào)節(jié)電位器,,顯示數(shù)值就會(huì)發(fā)生變化。電壓表的最小顯示值是0 mA,,最大顯示值是200 mA,,這與設(shè)計(jì)目的一致,1 s內(nèi)大約可以測量2次電壓值,。
參考文獻(xiàn)
[1] 柳金龍.淺談數(shù)字電壓表的特點(diǎn)[J].中國計(jì)量,,2004(8):43-44.
[2] 王韜.3位半積分式A/D轉(zhuǎn)換DC電壓表[J].電子設(shè)計(jì)工程:電子世界,2002(2):44-45.
[3] 周潤景,,張麗娜.劉映群.PROTEUS入門使用教程[M].北京:機(jī)械工業(yè)出版社,,2007.
[4] 馬俊,劉曉林.智能鍵盤字符輸入及LCD顯示系統(tǒng)設(shè)計(jì)[J].電子設(shè)計(jì)工程,,2009,17(1):66-68.
[5] 馬忠梅,,籍順心,,張凱,等.單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)(第3版)[M].北京:北京航空航天大學(xué)出版社,,2003.