基于單片機的數(shù)字電壓表的設(shè)計
摘要
近些年來,數(shù)字電壓表逐漸進入人們的視線中,它主要采取數(shù)字化測量技術(shù)。與傳統(tǒng)的指針式儀表相比,它的功能有了進一步的完善,并且精度也有了很大的提高。數(shù)字電壓表主要采用單片機和模/數(shù)轉(zhuǎn)換模塊,這樣不僅提高了測量速度,而且抗干擾能力強、使用便捷、可擴展性強、測量準確。 本文主要采用AT89C51單片機和ADC0808芯片制作的簡易數(shù)字電壓表,可以采集0~5V和5~10V的模擬直流電壓進行測量,其測量結(jié)果在液晶LCD1602上顯示。該設(shè)計硬件電路主要有三個模塊組成:A/D轉(zhuǎn)換模塊、數(shù)據(jù)處理模塊及輸出顯示模塊。數(shù)據(jù)處理由單片機AT89C51來完成,它主要把ADC0808傳送來的數(shù)值經(jīng)一定的數(shù)據(jù)處理,然后送至顯示模塊進行顯示,同時控制顯示芯片1602的工作。程序設(shè)計上有各模塊初始化操作、電壓檔位選擇和LCD1602液晶顯示程序等。
系統(tǒng)硬件設(shè)計總體方案 1.1 設(shè)計要求以MCS-51單片機為關(guān)鍵部件,制作一個簡易的數(shù)字電壓表。 - 使用雙通道可選擇直流電壓輸入,能夠測量0-5V和5-10V之間的直流電壓。當電壓值超過5V時,選擇通道2(5-10V通道)采集電壓。
- 使用LCD1602來完成電壓的液晶顯示。
- 使用較少的元器件,盡可能降低功率損耗,同時準確、快速完成測量。
- 由于電壓表允許過載,因此所測電壓允許適當超過量程。
1.2 設(shè)計方案總體設(shè)計電路有以下幾部分組成:AT89C51單片機、A/D轉(zhuǎn)換電路、液晶LCD顯示電路、時鐘電路、復位電路、被測電壓輸入電路及量程選擇和報警電路。總體硬件設(shè)計框圖如圖1-1所示: 
圖1-1 硬件電路設(shè)計框圖
1.3 2. 系統(tǒng)硬件電路設(shè)計2.1 A/D轉(zhuǎn)換模塊日常生活中的物理量都是模擬量,為了能夠方便的分析各個量,就需要把模擬量轉(zhuǎn)換成數(shù)字量的器件。現(xiàn)在越來越多的設(shè)備都需要進行模數(shù)轉(zhuǎn)換,把復雜的模擬信號轉(zhuǎn)換成已明白的數(shù)字信號,因此A/D轉(zhuǎn)換器也得到了更深一層的研究。按照不同的A/D轉(zhuǎn)換芯片的轉(zhuǎn)換原理可把其分為逐次逼近行、雙積分型等。其中雙積分式A/D轉(zhuǎn)換器抗干擾能力強、轉(zhuǎn)換精度高、價格便宜。但與雙積分相比,逐次逼近式A/D轉(zhuǎn)換的轉(zhuǎn)換速度更快,而且精度更高,它們可以與單片機系統(tǒng)連接,將數(shù)字量送入單片機進行分析和顯示。一個n位的逐次逼近型轉(zhuǎn)換器只需要比較n次,這樣大大節(jié)省了時間,而且逐次逼近型轉(zhuǎn)換速度快,因而在實際中得到廣泛的使用。 由于ADC0808芯片采用逐次逼近式A/D轉(zhuǎn)換原理,因此本設(shè)計便運用其進行模/數(shù)轉(zhuǎn)換,它可以實現(xiàn)8路模擬信號的選擇采集,而且它的轉(zhuǎn)換時間為100us。此次使用的是12MHz的晶振,因此它能夠提供轉(zhuǎn)換的時鐘即滿足設(shè)計的需要。 對于n位的A/D轉(zhuǎn)換器,它的分辨率是滿量程輸入電壓和2n之比。ADC0808的滿量程為5V。則其分辨率為0.02V。 ADC0808內(nèi)部結(jié)構(gòu)主要有8路模擬通道選擇開關(guān)、地址鎖存與譯碼器和8位A/D轉(zhuǎn)換器、三態(tài)輸出鎖存器等構(gòu)成,其引腳及連接電路如圖2-1所示: 
圖2-1 ADC0808引腳圖 由圖2-1所示,其中IN0~IN7為模擬量輸入通道,其輸入電壓范圍均為0~5V。此次設(shè)計分為兩通道輸入分別為IN0(0-5V)和IN1(5-10V),并且采用開關(guān)K1、K2來選擇。A、B、C為模擬量輸入通道的選擇端,是與單片機的P1相連并通過軟件的編程產(chǎn)生控制信號。ALE、START為地址鎖存允許信號和轉(zhuǎn)換啟動信號,它們都有單片機P3口產(chǎn)生控制信號。轉(zhuǎn)換器的CLK由單片機的中斷程序產(chǎn)生,主要是完成輸入數(shù)據(jù)的掃描。EOC是ADC0808轉(zhuǎn)換結(jié)束信號端口,只有等到EOC變?yōu)楦唠娖剑瑪?shù)據(jù)轉(zhuǎn)換才結(jié)束。實現(xiàn)這個過程,就需要使用程序設(shè)計來完成。OE是輸出允許信號,只有OE為低電平時,才能輸出轉(zhuǎn)換得到的數(shù)據(jù)。程序中先讓OE為0,然后為1,這樣把數(shù)據(jù)送入單片機P2口。VREF(+)、VREF(—)是芯片的電源接口。 2.2 電壓輸入電路ADC0808的基準電壓為+5V,所以當要測量的電壓值超過5V時則需要由開關(guān)選擇衰減電路,經(jīng)過衰減后輸入轉(zhuǎn)換采集器。輸入電路如圖2-4所示: 
圖2-4 輸入電路圖 當要測試的電壓為0~5V時,選擇IN0輸入,在仿真中運用滑動變阻器分壓的原理產(chǎn)生0-5V的電壓來代表實際電壓。而當超過5V時則選擇左邊的電路,由于實際的電壓變允許適當?shù)某砍蹋詧D中R5和R6的電阻值分別為6k、3k,這樣就把電壓衰減為原來電壓值的1/3,同時由于RV5分壓的原理可以得到5~10V的電壓來模擬實際要測試的電壓值。同時其最高測量電壓允許適當超過10V。這樣本電壓表就有兩個量程即0~5V和5V~10V。需要變換量程時,由選側(cè)開關(guān)K1、K2相互切換。由于本此設(shè)計采用手動調(diào)節(jié)電壓檔位的方式,因此在測量電壓時應(yīng)該先對被測電壓進行估算,同時先由較大量程進行測量,如果值過小,再調(diào)節(jié)檔位。不然不容易超量程損壞儀器。直流電壓輸入時,由于尖峰的出現(xiàn),也就需要對輸入的電壓進行濾波,電容C4、C5在次的作用就是進行濾波
2.3 接口電路對于本設(shè)計,主要的接口電路有時鐘電路、復位電路、電壓量程選擇和報警電路。 2.4.1時鐘電路單片機89C51芯片中有一個內(nèi)部時鐘,其中引腳18為輸入端,19為輸出端引腳,這兩個引腳連接一個12MHz的晶振,同時再連接兩個瓷片電容,這樣便提供片內(nèi)相移的條件,時鐘電路如圖2-5所示: 
圖2-5 時鐘電路圖 由圖2-4可知,晶體的振蕩頻率通常取取12MHz,對于11.0592MHz一般在單片機串行通信時使用。這時單片機一個時鐘周期為: (2-1)
圖電容C1和C2,它們和晶振的主要作用是結(jié)合單片機內(nèi)部振蕩電路實現(xiàn)相位的180°移相,這樣晶振才能夠起振。同時對電路中所需的電容儲電量要求不高,均為30pF。若過高或過低都會對振蕩產(chǎn)生影響。 2.4.2 復位電路AT89C51單片機的RST為復位引腳,復位信號高電平有效,并且其有效時間應(yīng)該延續(xù)出現(xiàn)2個機器周期以上即可確保系統(tǒng)復位,復位操作完成后,RST端一直保持高電平,那么單片機就始終處于復位狀態(tài),當RST恢復低電平后單片機才能進入其他操作。單片機復位電路有幾種類,本次設(shè)計主要采用手動復位電路,這樣可以人為的操作,簡單方便。電路如圖2-6所示: 
圖2-6 復位電路 由上圖2-6可知,只有RST端維持2個周期以上高電平才能完成復位操作。電容C3兩端在單片機啟動時持續(xù)充電為5V,由于按鍵未按下,電阻R1兩端電壓為0,此時RST處于低電平系統(tǒng)工作正常,當按鍵摁下時,電阻R2所在的支路導通,與C3形成一個回路,電容C3開始釋放之前所充的電量,在很短的時間內(nèi),其電壓值由5V變?yōu)?.0V,甚至更小些,與此同時,RST又收到高電平,這時系統(tǒng)自動復位。 2.4.3量程選擇和報警電路本設(shè)計由于采用雙通道輸入的方式,所以可以選擇不同的量程,分別為0~5V和5~10V。這個操作由選擇開關(guān)K1、K2來完成,但是如果K1、K2同時閉合,報警提示燈點亮。電路如圖2-7所示: 
圖2-7 量程選擇和報警電路圖
2.4 LCD1602顯示電路設(shè)計本次設(shè)計中采用LCD1602作為顯示器,與以前的LED數(shù)碼管顯示相比,其顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富等優(yōu)點,而且不需要外加驅(qū)動電路。同時可以滿足不同的輸入、移位要求,而且接口方式簡單、可靠。LCD1602模塊的引腳及連接電路如圖2-8所示: 
圖2-8 LCD1602引腳 其中D0~D7數(shù)據(jù)接收端口與單片機P0口相連。E端為使能端,當它由0變?yōu)?,LCD1602才能進行讀寫操作,它和單片機P3.5相連,并由其輸出控制信號。RS、RW是1602的讀寫控制端,它們分別與單片機的P3.6、P3.7相對應(yīng),這樣使用LCD顯示時可由單片機的程序完成控制。VDD、VSS為液晶屏的電源端口,VEE端電壓信號的大小可以改變液晶屏的亮度。由于P0口作為輸出口時,它沒有高電平的狀態(tài)所以仿真電路時需要加上拉電阻RP1,這樣P0口就有高電平狀態(tài)。
3. 系統(tǒng)程序設(shè)計系統(tǒng)的主程序流程如圖3-1所示: 
圖3-1 系統(tǒng)主程序流程圖 本設(shè)計程序設(shè)計主要分為幾個模塊:初始化程序設(shè)計、A/D采樣程序設(shè)計、測量參數(shù)數(shù)據(jù)處理程序設(shè)計、量程選擇和報警程序設(shè)計、LCD1602顯示程序設(shè)計。下面逐個介紹各個模塊的程序設(shè)計。 3.1 初始化程序所謂初始化,將利用到單片機內(nèi)部各部件或擴展芯片進行初始工作狀態(tài)設(shè)定,其主要負責設(shè)置定時器模式、初始設(shè)定、開中斷和打開定時器等,對于液晶1602同樣也要進行初始化,其中包括清除顯示屏、顯示開/關(guān)控制、功能設(shè)置、進入模式設(shè)置等。其中部分初始化程序如下: w_comd(0x0c); //開顯示屏,關(guān)光標; w_comd(0x06); //字符進入模式:屏幕不動,字符后移; ET0=1; //開定時中斷; 3.2 A/D轉(zhuǎn)換程序模/數(shù)轉(zhuǎn)換流程圖如圖3-2所示。

圖3-2 A/D轉(zhuǎn)換流程圖 由圖可知,A/D轉(zhuǎn)換程序首先定義啟動信號、輸出允許信號、輸入地址鎖存信號、A/D轉(zhuǎn)換結(jié)束信號及CLK時鐘信號的變量。然后利用AT89C51中定時器T0的工作方式2產(chǎn)生CLK信號,供A/D轉(zhuǎn)換器使用,START信號的上升沿啟動A/D轉(zhuǎn)換,等待轉(zhuǎn)換結(jié)束,即EOC從0變?yōu)?,同時OE是輸出使能信號端,其信號從高到低電平,輸出轉(zhuǎn)換數(shù)據(jù)并將其進行數(shù)值轉(zhuǎn)換分別求出百、十、個位,再送入LCD進行數(shù)據(jù)顯示。 3.3 LCD1602顯示程序3.3.1 LCD1602初始化液晶LCD初始化主要就是在液晶顯示器的每一個寄存器的初始設(shè)置,也就是向LCD中的各個寄存器寫入要設(shè)定的數(shù)據(jù)。該設(shè)計的初始化過程為先上電,然后進行判忙操作,最后再進行各個功能的設(shè)置,其中包括顯示狀態(tài)的設(shè)置(行、位的起始位置)、輸入方式的設(shè)置。初始化過程如圖3-5所示: 
圖3-5 LCD初始化流程圖 該設(shè)計主要使用了LCD1602的讀忙操作、寫數(shù)據(jù)操作、寫命令操作和寫字符操作。其中每個操作都需要使能端RW、RS的控制信號,當RS、RW均為0的情況下,可以進行讀、寫操作,而讀忙只有RS=0、RW=1時,才能進行此操作。LCD1602如果要顯示字符,首先要寫入顯示字符的首地址,此次使用的是從第一行第四個字符04地址開始顯示,但是液晶寫數(shù)據(jù)操作時地址最高位D7必須為高電平,因此寫入數(shù)據(jù)的時候應(yīng)該是00000100(04H)+10000000(80H)=10000100(84H)。
4.1 顯示結(jié)果及誤差分析4.2.1 顯示結(jié)果- 當輸入電壓為4.55V時,顯示結(jié)果如圖4-1 所示,實際電壓為4.54V。

圖4-1 輸入電壓為4.55V時,LCD顯示結(jié)果
- 當輸入電壓為9.97V時,顯示結(jié)果如圖4.2所示,實際電壓為9.96V。

4.2.2 誤差分析
通過對輸入不同的電壓進行測試,得到了仿真數(shù)據(jù)。可得出兩者的對比測試表,如下表4-1所示: 表4-1 簡易電壓表與“標準”電壓表對比測試表 | | | 1.50 3.50 4.50 5.00 7.45 8.71 9.97 | 1.50 3.49 4.49 5.00 7.44 8.70 9.96 | 0.00 0.01 0.01 0.00 0.01 0.01 0.01 |
從表4-1中的幾組數(shù)據(jù)的分析,測試電壓誤差以0.01V的幅度變化。這主要是硬件本身的誤差導致。由于單片機AT89C51、ADC0808數(shù)據(jù)傳輸端口為8,當輸入電壓為5.00V時,輸出端口的數(shù)據(jù)為11111111(FFH),所以ADC0808的最高分辯率為0.0196V(5/255)。這就決定了電壓表的最高分辯率只能到0.0196,因此測試電壓通常以0.01的幅度變化。 該數(shù)字電壓表所測得的電壓值和標準的電壓相比,大概有0-0.01V的偏差。由于硬件方面的原因,此誤差只能通過硬件上的完善才能得以校正。因為該電壓表設(shè)計時用的是5V的供電電源作為基準電壓,所以電壓可能出現(xiàn)誤差。如果要測量大于5V的電壓時,應(yīng)當使用分壓電路,程序中對計算結(jié)果進行調(diào)整就可以了。 通過多次的仿真和調(diào)整,此次設(shè)計的電壓表的絕對誤差為0~0.01V,因此本次畢業(yè)設(shè)計符合最初設(shè)計要求。 附錄一 系統(tǒng)硬件設(shè)計總圖

單片機源程序如下:
完整的Word格式文檔51黑下載地址:
|