基于PC的數(shù)字電壓表設(shè)計(jì)
數(shù)字電壓表的設(shè)計(jì)和開(kāi)發(fā),已經(jīng)有多種類(lèi)型和款式。傳統(tǒng)的數(shù)字電壓表各有特點(diǎn),它們適合在現(xiàn)場(chǎng)做手工測(cè)量,要完成遠(yuǎn)程測(cè)量并要對(duì)測(cè)量數(shù)據(jù)做進(jìn)一步分析處理,傳統(tǒng)數(shù)字電壓表是無(wú)法完成的。然而基于PC通信的數(shù)字電壓表,既可以完成測(cè)量數(shù)據(jù)的傳遞,又可借助PC,做測(cè)量數(shù)據(jù)的處理。所以這種類(lèi)型的數(shù)字電壓表無(wú)論在功能和實(shí)際應(yīng)用上,都具有傳統(tǒng)數(shù)字電壓表無(wú)法比擬的特點(diǎn),這使得它的開(kāi)發(fā)和應(yīng)用具有良好的前景。
新型數(shù)字電壓表的整機(jī)設(shè)計(jì)
該新型數(shù)字電壓表測(cè)量電壓類(lèi)型是直流,測(cè)量范圍是-5~+5V。整機(jī)電路包括:數(shù)據(jù)采集電路的單片機(jī)最小化設(shè)計(jì)、單片機(jī)與PC接口電路、單片機(jī)時(shí)鐘電路、復(fù)位電路等。下位機(jī)采用AT89S51芯片,A/D轉(zhuǎn)換采用AD678芯片。通過(guò)RS232串行口與PC進(jìn)行通信,傳送所測(cè)量的直流電壓數(shù)據(jù)。整機(jī)系統(tǒng)電路如圖1所示。
數(shù)據(jù)采集電路的原理
在單片機(jī)數(shù)據(jù)采集電路的設(shè)計(jì)中,做到了電路設(shè)計(jì)的最小化,即沒(méi)用任何附加邏輯器件做接口電路,實(shí)現(xiàn)了單片機(jī)對(duì)AD678轉(zhuǎn)換芯片的操作。
AD678是一種高檔的、多功能的12位ADC,由于其內(nèi)部自帶有采樣保持器、高精度參考電源、內(nèi)部時(shí)鐘和三態(tài)緩沖數(shù)據(jù)輸出等部件,所以只需要很少的外部元件就可以構(gòu)成完整的數(shù)據(jù)采集系統(tǒng),而且一次A/D轉(zhuǎn)換僅需要5ms。
在電路應(yīng)用中,AD678采用同步工作方式,12位數(shù)字量輸出采用8位操作模式,即12位轉(zhuǎn)換數(shù)字量采用兩次讀取的方式,先讀取其高8位,再讀取其低4位。根據(jù)時(shí)序關(guān)系,在芯片選擇/CS=0時(shí),轉(zhuǎn)換端/SC由高到低變化一次,即可啟動(dòng)A/D轉(zhuǎn)換一次。再查詢轉(zhuǎn)換結(jié)束端/EOC,看轉(zhuǎn)換是否已經(jīng)結(jié)束,若結(jié)束則使輸出使能/OE變低,輸出有效。12位數(shù)字量的讀取則要控制高字節(jié)有效端/HBE,先讀取高字節(jié),再讀取低字節(jié)。整個(gè)A/D操作大致如此,在實(shí)際開(kāi)發(fā)應(yīng)用中調(diào)整。
圖1 數(shù)字電壓表的電路圖
由于電路中采用AD678的雙極性輸入方式,輸入電壓范圍是-5~+5V,根據(jù)公式Vx=10(V)/4096*Dx,即可計(jì)算出所測(cè)電壓Vx值的大小。式中Dx為被測(cè)直流電壓轉(zhuǎn)換后的12位數(shù)字量值。
RS232接口電路的設(shè)計(jì)
AT89S51與PC的接口電路采用芯片Max232。Max232是德州儀器公司(TI)推出的一款兼容RS232標(biāo)準(zhǔn)的芯片。該器件包含2個(gè)驅(qū)動(dòng)器、2個(gè)接收器和1個(gè)電壓發(fā)生器電路提供TIA/EIA-232-F電平。Max232芯片起電平轉(zhuǎn)換的功能,使單片機(jī)的TTL電平與PC的RS232電平達(dá)到匹配。
串口通信的RS232接口采用9針串口DB9,串口傳輸數(shù)據(jù)只要有接收數(shù)據(jù)針腳和發(fā)送針腳就能實(shí)現(xiàn):同一個(gè)串口的接收腳和發(fā)送腳直接用線相連,兩個(gè)串口相連或一個(gè)串口和多個(gè)串口相連。在實(shí)驗(yàn)中,用定時(shí)器T1作波特率發(fā)生器,其計(jì)數(shù)初值X按以下公式計(jì)算:
波特率=*(T1的溢出率)
=*
串行通信波特率設(shè)置為1200b/s,而SMOD=1,fosc=6MHz,計(jì)算得到計(jì)數(shù)初值X=0f3H。在編程中將其裝入TL1和TH1中即可。
為了便于觀察,當(dāng)每次測(cè)量電壓采集數(shù)據(jù)時(shí),單片機(jī)有端口輸出時(shí),用發(fā)光二極管LED指示。
軟件編程
軟件程序主要包括:下位機(jī)數(shù)據(jù)采集程序、上位機(jī)可視化界面程序、單片機(jī)與PC串口通信程序。單片機(jī)采用C51語(yǔ)言編程,上位機(jī)的操作顯示界面采用VC++6.0進(jìn)行可視化編程。在串口通信調(diào)試過(guò)程中,借助“串口調(diào)試助手”工具,有效利用這個(gè)工具為整個(gè)系統(tǒng)提高效率。
單片機(jī)編程
下位機(jī)單片機(jī)的數(shù)據(jù)采集通信主程序流程如圖2所示、中斷子程序如圖3所示、采集子程序如圖4所示。單片機(jī)的編程仿真調(diào)試借助WAVE2000仿真器,本系統(tǒng)有集成的ISP仿真調(diào)試環(huán)境。
圖2 單片機(jī)采集通信主程序
在采集程序中,單片機(jī)的編程操作要完全符合AD678的時(shí)序規(guī)范要求,在實(shí)際開(kāi)發(fā)中,要不斷加以調(diào)試。最后將下位機(jī)調(diào)試成功而生成的.bin文件固化到AT89S51的Flash單元中。
圖3 中斷服務(wù)子程序 圖4 采集子程序
人機(jī)界面編程
打開(kāi)VC++6.0,建立一個(gè)基于對(duì)話框的MFC應(yīng)用程序,串口通信采用MSComm控件來(lái)實(shí)現(xiàn)。其他操作此處不贅述,編程實(shí)現(xiàn)一個(gè)良好的人機(jī)界面。數(shù)字直流電壓表的操作界面如圖5所示。運(yùn)行VC++6.0編程實(shí)現(xiàn)的Windows程序,整個(gè)樣機(jī)功能得以實(shí)現(xiàn)。
功能結(jié)果
根據(jù)上面所述工作原理及實(shí)施方案,在實(shí)踐中很好地實(shí)現(xiàn)了整個(gè)樣機(jī)的功能,各項(xiàng)指標(biāo)達(dá)到了預(yù)先的設(shè)計(jì)要求。電路工作穩(wěn)定,每次測(cè)量均伴有LED發(fā)光指示,可視化界面顯示也正常。
圖5 數(shù)字電壓表的人機(jī)界面
AD678轉(zhuǎn)換精度是12位,它的分辨率為1/4096。這為整機(jī)系統(tǒng)的高精度提供了保障。為了提高測(cè)量精度,運(yùn)用了AD678自帶的校準(zhǔn)電路,這樣使其A/D轉(zhuǎn)換精度更高。在實(shí)際測(cè)量中,整機(jī)測(cè)量精度達(dá)到了0.8%。