陳 峰
(江蘇商貿(mào)職業(yè)學(xué)院,江蘇 南通 226011)
數(shù)字電壓表最基本的功能是用來測量電壓,并將結(jié)果以數(shù)字的形式顯示出來,與傳統(tǒng)模擬電壓表相比,數(shù)字電壓表具有測量精度高、顯示直觀等優(yōu)點(diǎn)[1-2]。本文采用51單片機(jī)和ADC0831模數(shù)轉(zhuǎn)換器實(shí)現(xiàn)8路模擬電壓測量系統(tǒng),系統(tǒng)可分為手動和自動兩種工作模式。手動模式下,系統(tǒng)通過按鍵切換通道進(jìn)行測量;自動模式下,系統(tǒng)每隔1秒自動切換通道進(jìn)行測量,液晶顯示屏實(shí)時顯示系統(tǒng)的工作模式、當(dāng)前測量的通道和電壓值。
多路數(shù)字電壓表系統(tǒng)的總體設(shè)計(jì)框圖如圖1所示,由單片機(jī)最小系統(tǒng)、LCD1602液晶顯示電路、通道選擇電路、模數(shù)轉(zhuǎn)換電路和按鍵控制電路共同組成。
圖1 多路數(shù)字電壓表設(shè)計(jì)框圖
多路數(shù)字電壓表電路原理圖如圖2所示。系統(tǒng)以單片機(jī)為核心,采用8通道模擬多路選擇器74HC4051進(jìn)行通道選擇,利用模數(shù)轉(zhuǎn)換芯片ADC0831將模擬電壓轉(zhuǎn)換為8位二進(jìn)制數(shù)字信號后,送單片機(jī)處理并通過LCD1602液晶顯示系統(tǒng)的工作模式、測量通道和電壓值。其中模擬電壓輸入信號通過調(diào)節(jié)可調(diào)電位器來獲得。
圖2 多路數(shù)字電壓表電路原理圖
單片機(jī)最小系統(tǒng)主要由電源、時鐘電路和復(fù)位電路組成[3]。
采用8通道模擬多路選擇器74HC4051[4]。74HC4051帶有3個選擇輸入端,1個低電平有效使能端,8個獨(dú)立輸入/輸出端和1個公共輸入/輸出端。
使能端為低電平時,8個開關(guān)的其中之一將被選中(低阻態(tài));使能端為高電平時,所有開關(guān)都進(jìn)入高阻態(tài)。因此將三個選擇輸入端分別與單片機(jī)的P1.5、P1.6、P1.7引腳相連,使能端接地;通過程序控制選擇輸入端就可以對模擬電壓輸入通道進(jìn)行選擇。
模數(shù)轉(zhuǎn)換器采用ADC0831,它是美國國家半導(dǎo)體公司推出的一款8位分辨率、逐次逼近型串行模數(shù)轉(zhuǎn)換器,通過三線串行總線與單片機(jī)連接,可節(jié)省51系列單片機(jī)I/0資源,模擬信號可采用單端輸入或差分輸入。ADC0831與單片機(jī)的接口為3條數(shù)據(jù)線,分別是片選端CS、時鐘輸入端CLK、串行數(shù)據(jù)輸出端DO。
采用1602液晶顯示器實(shí)時顯示多路數(shù)字電壓表的工作狀態(tài)和電壓值,液晶的第一行顯示工作模式,第二行顯示當(dāng)前測量的通道及其電壓值。
采用3個獨(dú)立按鍵來設(shè)置系統(tǒng)的工作模式和通道選擇。其中按鍵K1用于手動和自動兩種工作模式的切換,按鍵K2和K3只有在手動工作模式下使用,用于選擇上一個或下一個測量通道。
根據(jù)多路數(shù)字電壓表的功能,軟件設(shè)計(jì)主要的工作是根據(jù)設(shè)置選擇測量通道,然后進(jìn)行模數(shù)轉(zhuǎn)換讀取轉(zhuǎn)換結(jié)果,并通過數(shù)據(jù)處理將數(shù)字信號換算為電壓值,最后進(jìn)行顯示。
系統(tǒng)的軟件設(shè)計(jì)流程圖如圖3所示,主要包括通道選擇程序、按鍵檢測程序、ADC0831模數(shù)轉(zhuǎn)換程序、LCD1602顯示程序。定時器0中斷服務(wù)程序的流程圖如圖4所示,主要用于自動模式下每隔1秒進(jìn)行測量通道的切換,定時器定時時間為50ms,變量count用于判斷是否1秒時間,變量index用于表示當(dāng)前測量的通道。
圖3 主流程圖
圖4 定時器0中斷服務(wù)程序流程圖
根據(jù)74HC4051的功能說明,編寫通道選擇函數(shù)的源程序如下:
sbit A0=P1^5;sbit A1=P1^6;sbit A2=P1^7;
void CH_Select(unsigned char ch)
{ switch(ch)
{ case 0: A0=0;A1=0;A2=0; break;
case 1: A0=1;A1=0;A2=0; break;
case 2: A0=0;A1=1;A2=0; break;
case 3: A0=1;A1=1;A2=0; break;
case 4: A0=0;A1=0;A2=1; break;
case 5: A0=1;A1=0;A2=1; break;
case 6: A0=0;A1=1;A2=1; break;
case 7: A0=1;A1=1;A2=1; break; }}
按鍵檢測控制程序主要進(jìn)行系統(tǒng)工作模式設(shè)置和手動模式下測量通道的選擇,其流程圖如圖5所示,變量flag用于表示系統(tǒng)的工作模式,flag=0為手動工作模式,flag=1為自動工作模式;變量index用于表示當(dāng)前測量的通道。
圖5 按鍵檢測流程圖
根據(jù)ADC0831時序圖編寫A/D轉(zhuǎn)換子程序[5-6],其工作過程如下:當(dāng)要進(jìn)行模數(shù)轉(zhuǎn)換時,應(yīng)將片選端CS置低電平并且保持低電平直到轉(zhuǎn)換結(jié)束;芯片開始工作后,還須讓單片機(jī)向芯片的時鐘輸入端CLK輸入時鐘脈沖;從第2個脈沖下降沿開始由串行數(shù)據(jù)輸出端DO輸出轉(zhuǎn)換數(shù)據(jù)最高位;隨后每一個脈沖下降沿DO端輸出下一位數(shù)據(jù),直到第9個脈沖時輸出數(shù)據(jù)的最低位。至此,一個字節(jié)數(shù)據(jù)輸出完成,最后將片選端CS拉高停止模數(shù)轉(zhuǎn)換。
數(shù)據(jù)處理子程序主要將模數(shù)轉(zhuǎn)換的數(shù)字量轉(zhuǎn)換為相應(yīng)的電壓值,控制程序如下:
Vol=adc()*5*100/255;//將電壓值擴(kuò)大100倍
變量Vol為擴(kuò)大100倍后的電壓值,adc()為模數(shù)轉(zhuǎn)換函數(shù)。
顯示子程序主要根據(jù)變量flag、index、Vol值實(shí)時顯示數(shù)字電壓表的工作模式、通道和電壓值。
利用Keil軟件與Proteus軟件進(jìn)行聯(lián)合仿真調(diào)試。系統(tǒng)仿真效果如圖6所示,采用虛擬儀表中的直流電壓表對輸入模擬電壓進(jìn)行測量,觀察顯示電壓值與直流電壓表顯示值是否一致,如圖顯示信息說明當(dāng)前工作模式為手動模式,通道CH3的測量電壓值為2.60V,結(jié)果表明系統(tǒng)能對多路模擬電壓進(jìn)行準(zhǔn)確測量。
圖6 系統(tǒng)仿真結(jié)果圖
本文利用單片機(jī)和ADC0831模數(shù)轉(zhuǎn)換芯片設(shè)計(jì)實(shí)現(xiàn)8路數(shù)字電壓表,循環(huán)采集8個通道電壓值,能實(shí)現(xiàn)手動控制和自動控制兩種模式。該系統(tǒng)具有測量精度高、顯示直觀、易擴(kuò)展等優(yōu)點(diǎn)。