陳 峰
(江蘇商貿(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)可分為手動(dòng)和自動(dòng)兩種工作模式。手動(dòng)模式下,系統(tǒng)通過按鍵切換通道進(jìn)行測量;自動(dòng)模式下,系統(tǒng)每隔1秒自動(dòng)切換通道進(jìn)行測量,液晶顯示屏實(shí)時(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ù)字信號(hào)后,送單片機(jī)處理并通過LCD1602液晶顯示系統(tǒng)的工作模式、測量通道和電壓值。其中模擬電壓輸入信號(hào)通過調(diào)節(jié)可調(diào)電位器來獲得。
圖2 多路數(shù)字電壓表電路原理圖
單片機(jī)最小系統(tǒng)主要由電源、時(shí)鐘電路和復(fù)位電路組成[3]。
采用8通道模擬多路選擇器74HC4051[4]。74HC4051帶有3個(gè)選擇輸入端,1個(gè)低電平有效使能端,8個(gè)獨(dú)立輸入/輸出端和1個(gè)公共輸入/輸出端。
使能端為低電平時(shí),8個(gè)開關(guān)的其中之一將被選中(低阻態(tài));使能端為高電平時(shí),所有開關(guān)都進(jìn)入高阻態(tài)。因此將三個(gè)選擇輸入端分別與單片機(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資源,模擬信號(hào)可采用單端輸入或差分輸入。ADC0831與單片機(jī)的接口為3條數(shù)據(jù)線,分別是片選端CS、時(shí)鐘輸入端CLK、串行數(shù)據(jù)輸出端DO。
采用1602液晶顯示器實(shí)時(shí)顯示多路數(shù)字電壓表的工作狀態(tài)和電壓值,液晶的第一行顯示工作模式,第二行顯示當(dāng)前測量的通道及其電壓值。
采用3個(gè)獨(dú)立按鍵來設(shè)置系統(tǒng)的工作模式和通道選擇。其中按鍵K1用于手動(dòng)和自動(dòng)兩種工作模式的切換,按鍵K2和K3只有在手動(dòng)工作模式下使用,用于選擇上一個(gè)或下一個(gè)測量通道。
根據(jù)多路數(shù)字電壓表的功能,軟件設(shè)計(jì)主要的工作是根據(jù)設(shè)置選擇測量通道,然后進(jìn)行模數(shù)轉(zhuǎn)換讀取轉(zhuǎn)換結(jié)果,并通過數(shù)據(jù)處理將數(shù)字信號(hào)換算為電壓值,最后進(jìn)行顯示。
系統(tǒng)的軟件設(shè)計(jì)流程圖如圖3所示,主要包括通道選擇程序、按鍵檢測程序、ADC0831模數(shù)轉(zhuǎn)換程序、LCD1602顯示程序。定時(shí)器0中斷服務(wù)程序的流程圖如圖4所示,主要用于自動(dòng)模式下每隔1秒進(jìn)行測量通道的切換,定時(shí)器定時(shí)時(shí)間為50ms,變量count用于判斷是否1秒時(shí)間,變量index用于表示當(dāng)前測量的通道。
圖3 主流程圖
圖4 定時(shí)器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è)置和手動(dòng)模式下測量通道的選擇,其流程圖如圖5所示,變量flag用于表示系統(tǒng)的工作模式,flag=0為手動(dòng)工作模式,flag=1為自動(dòng)工作模式;變量index用于表示當(dāng)前測量的通道。
圖5 按鍵檢測流程圖
根據(jù)ADC0831時(shí)序圖編寫A/D轉(zhuǎn)換子程序[5-6],其工作過程如下:當(dāng)要進(jìn)行模數(shù)轉(zhuǎn)換時(shí),應(yīng)將片選端CS置低電平并且保持低電平直到轉(zhuǎn)換結(jié)束;芯片開始工作后,還須讓單片機(jī)向芯片的時(shí)鐘輸入端CLK輸入時(shí)鐘脈沖;從第2個(gè)脈沖下降沿開始由串行數(shù)據(jù)輸出端DO輸出轉(zhuǎn)換數(shù)據(jù)最高位;隨后每一個(gè)脈沖下降沿DO端輸出下一位數(shù)據(jù),直到第9個(gè)脈沖時(shí)輸出數(shù)據(jù)的最低位。至此,一個(gè)字節(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í)顯示數(shù)字電壓表的工作模式、通道和電壓值。
利用Keil軟件與Proteus軟件進(jìn)行聯(lián)合仿真調(diào)試。系統(tǒng)仿真效果如圖6所示,采用虛擬儀表中的直流電壓表對輸入模擬電壓進(jìn)行測量,觀察顯示電壓值與直流電壓表顯示值是否一致,如圖顯示信息說明當(dāng)前工作模式為手動(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個(gè)通道電壓值,能實(shí)現(xiàn)手動(dòng)控制和自動(dòng)控制兩種模式。該系統(tǒng)具有測量精度高、顯示直觀、易擴(kuò)展等優(yōu)點(diǎn)。