黑龍江職業(yè)學(xué)院畢業(yè)論文(設(shè)計)
摘 要
在日常維修、教學(xué)和科研中,電壓表是不可缺少的。本課題目的就是以單片機為基礎(chǔ)設(shè)計出一種結(jié)構(gòu)簡單、工作可靠、靈活性好的數(shù)字電壓表。
本文首先介紹了數(shù)字電壓表的發(fā)展現(xiàn)狀及課題的目的和意義。然后,對基于單片機的數(shù)字電壓表的硬件系統(tǒng)、軟件系統(tǒng)的設(shè)計原理及具體實現(xiàn)方案作以詳細介紹,其中,在硬件部分,較為詳細的討論了硬件的選擇、設(shè)計原理、使用方法和功能,同時,對各部分接口電路作以介紹;在軟件部分,介紹了軟件所使用的編程語言和編程思路。最后,對電路調(diào)試、印刷PCB板的制作及系統(tǒng)的抗干擾設(shè)計作了進一步分析和總結(jié)。
本文設(shè)計的數(shù)字電壓表,其硬件電路所用元件較少、成本低、調(diào)節(jié)簡單;軟件采用C語言編程,其靈活性高,可讀性強。經(jīng)過理論研究、原理設(shè)計和整機調(diào)試,實驗結(jié)果表明,該方案可行。
Abstract
In routine maintenance, teaching and research, voltage meter is indispensable. A direct current digital voltage meter has been designed, which is based on MCU, and has a simple structure, reliable, flexible.
Firstly,this paper introduced the development of the base on MCU digital voltage meter and the purpose and significanceof topic. Then in details this paper described the design principle of hardware and software systems. And in details the hardware part present a discussion in hardware selection, design principles, instructions and the function, further more,some of the interface circuit have been introduced. The software part introduced the programming language and programming ideas used in codes. Finally, the circuit debugging, the printed plate of PCB production and the anti-jamming system were designed to further analysis and synthesis.
The digital voltage meter designed here, have less components in the hardware part, lower cost and easier testing; software used C programming language which is high flexibility and strong readability. After theoretical research, principle design and debugging, the experimental results suppose it is feasible of choosing this program.
Keywords: Micro Controller Unit;voltage meter;A/D Converters;
Series Bus
目 錄
第1章 緒 論
1.1 課題概述
1.1.1 數(shù)字電壓表的發(fā)展歷程
1.1.2 國內(nèi)外的發(fā)展現(xiàn)狀與趨勢
1.2 課題的意義和目的
1.3 本文所作的主要工作
第2章 基于單片機數(shù)字電壓表的總體設(shè)計
2.1 設(shè)計指標(biāo)
2.2 系統(tǒng)概述
2.2.1 硬件電路圖及工作過程簡介
2.2.2 軟件程序設(shè)計簡介
2.3 小結(jié)
第3章 基于單片機數(shù)字電壓表的硬件設(shè)計
3.1 器件的選擇
3.2 A/D轉(zhuǎn)換電路
3.2.1 A/D轉(zhuǎn)換芯片的選擇
3.2.2 ADC0809轉(zhuǎn)換原理介紹
3.2.3 ADC0809芯片介紹
3.2.4 ADC0809與單片機的接口方法
3.3 單片機介紹
3.3.1 單片機介紹
3.3.2 采用AT89C51的原因
3.3.3 AT89C51芯片主要性能參數(shù)
3.3.4 功能介紹
3.3.5 芯片管腳介紹及分配
3.4 顯示驅(qū)動單元設(shè)計
3.4.1 ZLG7289芯片介紹
3.4.2 ZLG7289的主要特征
3.4.3 ZLG7289引腳功能說明
3.4.4 ZLG7289與單片機及數(shù)碼管的連接
3.4.5 時序圖中的各項延遲時間
3.4.6 控制指令
3.5 SPI接口技術(shù)
3.5.1 SPI總線簡介
3.5.2 SPI總線的基本結(jié)構(gòu)
3.5.3 數(shù)據(jù)的傳輸
3.6 電壓顯示電路
3.7 小結(jié)
第4章 基于單片機數(shù)字電壓表的軟件設(shè)計
4.1 軟件系統(tǒng)整體設(shè)計
4.1.1 C51簡介
4.1.2 程序流程圖
4.1.3 數(shù)據(jù)采集模塊的設(shè)計
4.1.4 數(shù)據(jù)處理模塊的設(shè)計
4.2 原程序見附錄A
4.3 小結(jié)
第5章 基于單片機數(shù)字電壓表的抗干擾設(shè)計
5.1硬件系統(tǒng)的可靠性與抗干擾設(shè)計
5.1.1 供電系統(tǒng)抗干擾措施
5.1.2 接地
5.1.3 傳輸通道的抗干擾措施
5.2 軟件系統(tǒng)的可靠性與抗干擾設(shè)計
5.3 小結(jié)
第6章 電路制作及調(diào)試
6.1 PCB板的制作
6.2 系統(tǒng)外觀
6.3電路調(diào)試
6.3.1 調(diào)試步驟
6.3.2 可能出現(xiàn)的問題解答
6.4 系統(tǒng)調(diào)試及結(jié)果分析
6.4 小結(jié)
結(jié) 論
致 謝
參考文獻
附錄 基于單片機的數(shù)字電壓表設(shè)計C51原程序
第1章 緒 論1.1 課題概述1.1.1 數(shù)字電壓表的發(fā)展歷程
數(shù)字電壓表簡稱DVM,它是采用數(shù)字化測量技術(shù)設(shè)計的電壓表。從性能來看:數(shù)字電壓表的發(fā)展從一九五二年美國NLS公司由四位電子管數(shù)字電壓表精度千分之一到現(xiàn)在已經(jīng)出現(xiàn)8位數(shù)字電壓表。參數(shù)可測量直流電壓、交流電壓、電流、阻抗等。測量自動化程度不斷提高,可以和計算機配合顯示、計算結(jié)果、然后打印出來。目前世界上美國FLUKE公司,在直流和低頻交流電量的校準(zhǔn)領(lǐng)域居國際先進水平。例如該公司生產(chǎn)的“4700A”多功能校準(zhǔn)器和“8505”危機數(shù)字多用電壓表,可用8位顯示,直流精度可達到±5/10-6,讀書分辨力為0.1μV。帶有A/D變換模式、數(shù)據(jù)輸出接口形式IEEE-488。具有比率測量軟件校準(zhǔn)和有交流電阻、電流選件。還具有高精度電壓校準(zhǔn)器“5400A”、“5200A”、“5450A”等數(shù)字儀表,都是作為一級計量站和國家級計量站使用的標(biāo)準(zhǔn)儀表。還有英國的“7055”數(shù)字電壓表采用脈沖調(diào)制技術(shù)。日本橫河公司的“2501”型采用三次采樣等等在不斷的蓬勃發(fā)展[1]。
從發(fā)展過程來看:數(shù)字電壓表自1952年問世以來,已有50年多年的發(fā)展史,大致經(jīng)歷了五代產(chǎn)品。第一代產(chǎn)品是20世紀(jì)50年代問世的電子管數(shù)字電壓表,第二代產(chǎn)品屬于20世紀(jì)60年代出現(xiàn)的晶體管數(shù)字電壓表,第三帶產(chǎn)品為20世紀(jì)70年代研制的中、小規(guī)模集成電路的數(shù)字電壓表。今年來,國內(nèi)外相繼推出有大規(guī)模集成電路(LSI)或超大規(guī)模集成電路(VLSI)構(gòu)成的數(shù)字電壓表、智能數(shù)字電壓表,分別屬于第四代、第五代產(chǎn)品。它們不僅開創(chuàng)了電子測量的先河,更以高準(zhǔn)確度、高可靠性、高分辨力、高性價比等優(yōu)良特性而受到人民的青睞[2]。
1.1.2 國內(nèi)外的發(fā)展現(xiàn)狀與趨勢數(shù)字電壓表作為電壓表的一個分支,在近五十年間得到巨大發(fā)展,構(gòu)成數(shù)字電壓表的核心器件已從早期的中小規(guī)模電路跨入到大規(guī)模ASIC(專用集成電路)階段。數(shù)字電壓表涉及的范圍也從傳統(tǒng)的測量擴展至自動控制、傳感、通信等領(lǐng)域,展示了廣闊的應(yīng)用前景。
傳統(tǒng)電壓表的設(shè)計思路主要分為:用電流計和電阻構(gòu)成的電壓表;用中小規(guī)模集成電路構(gòu)成的電壓表;用大規(guī)模ASIC(專用集成電路)構(gòu)成的電壓表。這幾中電壓表設(shè)計方式各有優(yōu)勢和缺點,分別適用于幾種特定的應(yīng)用環(huán)境,同時,也為很多新穎的電壓表的設(shè)計所借鑒和依據(jù)[2]。
近入21世紀(jì),隨著信息技術(shù)一日千里的發(fā)展,電壓表也必經(jīng)歷從單一測量向數(shù)據(jù)處理、自動控制等多功能過度的這一歷程,特別是計算機技術(shù)的發(fā)展必將
出現(xiàn)智能化技術(shù)。因此,把電壓表和計算機技術(shù)相結(jié)合的智能化電壓表就將成為21世紀(jì)的新課題。目前,數(shù)字化儀器與微處理器取得令人矚目的進展,就其技術(shù)背景而言,一個內(nèi)藏微處理器的儀表意味著計算機技術(shù)向儀器儀表的移植,它所具有的軟件功能使儀器 呈現(xiàn)出有某種延伸,強化的作用。這相對于過去傳統(tǒng)的、純硬件的儀器來說是一種新的突破,其發(fā)展?jié)摿κ志薮,這已為70年代以來儀表發(fā)展的歷史所證實。概括起來,具有微處理器的儀表具有以下特點:①測量過程的軟件控制對測量數(shù)據(jù)進行存儲及運算的數(shù)據(jù)處理功能是儀表最突出的特點;②在儀器的測量過程中綜合了軟件控制及數(shù)據(jù)處理功能,使一機多用或儀器的多功能化易于實現(xiàn),成為這類儀器的又一特點;③以其軟件為主體的智能儀器不僅在使用方便、功能多樣化等方面呈現(xiàn)很大的靈活性[3]。
下面從5個方面闡述新型數(shù)字儀表的發(fā)展趨向。
1.廣泛采用新技術(shù),不斷開發(fā)新產(chǎn)品
隨著科學(xué)技術(shù)的發(fā)展,新技術(shù)的廣泛應(yīng)用,新器件的不斷出現(xiàn)。首先是A/D轉(zhuǎn)換器:20世紀(jì)90年代世界各國相繼研發(fā)了新的A/D轉(zhuǎn)換技術(shù)。例如,四斜率A/D轉(zhuǎn)換技術(shù)(美國)、余數(shù)再循環(huán)技術(shù)(美國)、自動校準(zhǔn)技術(shù)(英國)、固態(tài)真有效值轉(zhuǎn)換技術(shù)(英國)、約瑟夫森效應(yīng)基準(zhǔn)源(2個納米穩(wěn)定度)、智能化專用芯片(80C51系列,荷蘭)等,這些新技術(shù)使數(shù)字電壓表向高準(zhǔn)確度、高可靠性及智能化、低成本方向發(fā)展。另外,集成電路的發(fā)展使電壓表只在外圍配置少量元器件,即可構(gòu)成完整的智能儀表,可以完成儲存、計算、比較、控制等多項功能[4]。
2.廣泛采用新工藝
新一代數(shù)字儀表正朝著標(biāo)準(zhǔn)模塊化的方向發(fā)展。預(yù)計在不久的將來,更多的數(shù)字儀表將由標(biāo)準(zhǔn)化、通用化、系列化的模塊所構(gòu)成,給電路設(shè)計、安裝調(diào)試和維修帶來極大方便。
3.多從顯示儀表
為徹底解決數(shù)字儀表不便于觀察連續(xù)變化量的技術(shù)難題;“數(shù)字/模擬條圖”雙顯示儀表已成為國際流行款式,它兼有數(shù)字儀表準(zhǔn)確度高、模擬式儀表便于觀察被測量的變化過程及變化趨勢這兩大優(yōu)點。
4.提高安全性
儀器儀表在設(shè)計和使用中的安全性,對生產(chǎn)廠家和廣大用戶都至關(guān)重要。一方面廠家必須為儀表設(shè)計安全保護電路,并使之符合國家標(biāo)準(zhǔn);另一方面用戶必須安全操作,時刻注意儀表上的各種安全警告指示。
5.操作簡單化
集成電路的發(fā)展使電壓表只在外圍配置少量元件,即可構(gòu)成完整的智能儀表,可以完成儲存、計算、比較、控制等多項功能。這使的按鍵變少,操作簡單。但是數(shù)字電壓表并不能完全取代指針式的電壓表,在反映電壓的連續(xù)變化和變化趨勢方面不如指針表的直觀。為克服這種缺憾,20世紀(jì)90年代初,一種“數(shù)字/光柱”的雙重顯示儀表已經(jīng)出現(xiàn),并成功地應(yīng)用于生產(chǎn)實踐中[5]。
綜上所述,十幾年來智能儀器雖然有了很大的發(fā)展,但總的看來,人們還是較習(xí)慣于從硬件的角度做工作,這是由于設(shè)計者的(硬件)技術(shù)背景,LSI器件不斷迅速更新的沖擊以及在現(xiàn)階段儀器硬件更新的數(shù)量還很大等因素所造成的。這種趨勢雖然仍會繼續(xù)下去,但從智能儀表的內(nèi)涵,從軟件的角度上看,軟件的作用還遠未發(fā)揮出來,這里有許多的領(lǐng)域等待著去開發(fā)。智能儀表最終必然會與人工智能聯(lián)系起來開創(chuàng)出全新的儀器。從這個觀點看,目前的智能儀器尚處于“幼年時期”。所以,就儀表的發(fā)展看來電壓表會朝著具有微控制處理單元的智能儀表方向發(fā)展。
1.2 課題的意義和目的數(shù)字電壓表是諸多數(shù)字化儀表的核心與基礎(chǔ)。以數(shù)字電壓表為核心,可以擴展成各種通用數(shù)字儀表、專用數(shù)字儀表及各種非電量的數(shù)字化儀表(如:溫度計,濕度計,酸度計,重量,厚度儀等),幾乎覆蓋了電子電工測量,工業(yè)測量,自動化儀表等各個領(lǐng)域。除此之外,數(shù)字電壓還有著傳統(tǒng)指針電壓表無可比擬的優(yōu)點:讀數(shù)直觀、準(zhǔn)確,顯示范圍寬、分辨力高,轉(zhuǎn)入阻抗高,功耗小、抗干擾強等[3]。因此 對數(shù)字電壓表作全面深入的了解是很有必要的。但是傳統(tǒng)的數(shù)字電壓表設(shè)計通常以大規(guī)模ASIC(專用集成電路)為核心器件,并輔以少量中規(guī)模集成電路及顯示器件構(gòu)成,可是這種設(shè)計方法靈活性差,系統(tǒng)功能固定,難以更新擴展,不能滿足日益發(fā)展的電子工業(yè)要求[6]。而應(yīng)用微處理器(單片機)為核心單元的數(shù)字電壓表,其靈活性高、系統(tǒng)功能擴展簡單,性能穩(wěn)定可靠。在這些背景下,設(shè)計一種以單片機為基礎(chǔ)、結(jié)構(gòu)簡單、工作可靠、靈活性好的數(shù)字電壓表是很有意義的。
1.3 本文所作的主要工作1.對系統(tǒng)總體框架進行分析,根據(jù)系統(tǒng)所要實現(xiàn)的目標(biāo),設(shè)計基于單片機的數(shù)字電壓表的硬件系統(tǒng),以模塊設(shè)計法為依據(jù)進行系統(tǒng)各個部分的具體設(shè)計。
2.設(shè)計基于單片機的數(shù)字控制系統(tǒng),發(fā)揮單片機的處理功能強大,運算速度快的特點,對被測電壓進行實時檢測和顯示。
3.制作印刷電路板,使硬件電路的設(shè)計更加清晰,同時使系統(tǒng)的抗干擾能力進一不加強。
4.針對系統(tǒng)的總體框架和硬件設(shè)計的特點,設(shè)計相應(yīng)的軟件系統(tǒng),更合理
的去完成系統(tǒng)測電壓的目的。
5.對系統(tǒng)進行整機調(diào)試,使得基于單片機的數(shù)字電壓表的實驗結(jié)果盡可能的滿足設(shè)計指標(biāo)。
第2章 基于單片機數(shù)字電壓表的總體設(shè)計2.1 設(shè)計指標(biāo)在日常維修、教學(xué)和科研中,電壓表是不可缺少的,傳統(tǒng)的數(shù)字電壓表設(shè)計通常以大規(guī)模ASIC(專用集成電路)為核心器件,并輔以少量中規(guī)模集成電路及顯示器件構(gòu)成,但是這種設(shè)計方法靈活性差,系統(tǒng)功能固定,難以更新擴展,不能滿足日益發(fā)展的電子工業(yè)要求。而應(yīng)用微處理器(單片機)為核心單元,其靈活性高、系統(tǒng)功能擴展簡單,性能穩(wěn)定可靠。本課題目的就是以單片機為基礎(chǔ)設(shè)計出一種結(jié)構(gòu)簡單、工作可靠、靈活性好的直流數(shù)字電壓表。要求數(shù)字電壓表精度為±0.05V,測量范圍為0~5V。
2.2 系統(tǒng)概述本課題所設(shè)計的數(shù)字電壓表主要包括兩部分:硬件電路及軟件程序。而硬件電路采用ATMEL公司的AT89C51作為主處理器,系統(tǒng)主要由信號采集、A/D轉(zhuǎn)換、數(shù)據(jù)處理輸出、驅(qū)動顯示等幾個功能模塊組成。各部分電路的設(shè)計及原理將會在硬件電路設(shè)計部分詳細介紹;程序的設(shè)計使用C語言編程,利用Keil 軟件對其編譯和仿真,詳細的設(shè)計算法將會在程序設(shè)計部分詳細介紹。
系統(tǒng)框圖(圖2.1)如下:
圖2-1 硬件原理框圖
被測直流電壓由A/D轉(zhuǎn)換單元采集后被量化,再由單片機對A/D轉(zhuǎn)換的結(jié)果進行標(biāo)度變換,得到被測電壓的數(shù)值,通過單片機對數(shù)次轉(zhuǎn)換結(jié)果求平均值、并通過SOI串行數(shù)據(jù)接口把所求平均值輸出給顯示驅(qū)動單元,由該單元完成譯碼,并驅(qū)動數(shù)碼管顯示。
2.2.1 硬件電路圖及工作過程簡介電壓表的數(shù)字化是將連續(xù)模擬的電壓量經(jīng)A/D轉(zhuǎn)化后變?yōu)椴贿B續(xù)的離散的數(shù)字量并加以顯示[7]。在設(shè)計過程中采用分模塊設(shè)計,按照圖2.1把電路分A/D轉(zhuǎn)換、數(shù)據(jù)處理輸出、驅(qū)動、顯示四個單元,分別設(shè)計。
A/D轉(zhuǎn)換器選用的是八位模/數(shù)轉(zhuǎn)換器ADC0809。其次,計算機中的數(shù)字都是十六進制數(shù),而我們習(xí)慣于十進制數(shù)的讀寫,因此,在軟件設(shè)計中則要把十六進制數(shù)轉(zhuǎn)換成十進制數(shù)。在顯示的時候也是如此。本裝置的輸出用四位LED顯示,因此在軟件設(shè)計中還要解決數(shù)字輸出與LED的接口問題。硬件則需要將輸出線接到八段數(shù)碼管上[8]。
數(shù)值顯示采用八段數(shù)碼管,由單片機以動態(tài)掃描方式驅(qū)動,在此方式下能保證足夠的亮度和較長的使用壽命。
由電路原理圖2.2可以看出ADC0809通過IN0采集電壓信號并送給單片機,單片機將采集來的信號進行一定的處理然后通過串口擴展的共陰極LED數(shù)碼管顯示采集的電壓值。
數(shù)碼管顯示是采用動態(tài)顯示的原理,要顯示的數(shù)碼通過單片機的串口發(fā)送然后通過ZLG7289轉(zhuǎn)換為并行信號分別加到四個數(shù)碼管的SA—DP,而四個數(shù)碼管的公共端分別接ZLG7289的DIG0-DIG3接口,因此要使哪個數(shù)碼管顯示就把相應(yīng)
的公共端口置零即可。比如:數(shù)字“1”的字型碼通過串口發(fā)送出來并經(jīng)過ZLG7289譯碼加到了四個數(shù)碼管上,如果其中一個引腳為“0”那么對應(yīng)的數(shù)碼管顯示數(shù)字“1”。在此電路中電壓值的三個數(shù)字分別通過串口依次的送出,對應(yīng)的公共端也依次被置“0”,由于兩次置“0”的時間間隔很短,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感。因此給人的感覺就是三個數(shù)碼管同時的顯示出電壓值四個數(shù)字[5]。
數(shù)字電壓表電路圖如圖2.2所示:
圖2-2 電路原理圖
ADC0809的REF(-)接地,REF(+)接電源+5V,因此采集電壓的范圍是0~5V,A/D轉(zhuǎn)換輸出的結(jié)果D0~D7為8位二進制數(shù)。轉(zhuǎn)換輸出的結(jié)果在0~255之間分別對應(yīng)著0~+5V之間的256個電壓值,因此單片機必須把A/D轉(zhuǎn)換輸出的結(jié)果轉(zhuǎn)換成可以顯示的電壓值,具體的方法是:
(2.1)
由上公式可知:當(dāng)ADC0809輸出為(11111111)B時,輸入電壓值VIN=5.00V;當(dāng)ADC0809輸出為(00000000)B時,輸入電壓值VIN=0.00V;當(dāng)ADC0809輸出為(10000000)B時,輸入電壓值VIN=2.50V,但是單片機在進行數(shù)學(xué)運算時結(jié)果只讀取整數(shù)部分,因此當(dāng)輸出為(10000000)B時計算得來的電壓值VIN=2.00V。由此可以看出這樣運算的輸出結(jié)果很不準(zhǔn)確,在0~+5V之間只有0,1,2,3,4,5六個電壓值,所以必須把單片機運算結(jié)果中的小數(shù)部分保留下來[8]。具體方法是:如果保留小數(shù)點后兩位,在運算的時候分子乘以100,保留三位就乘以1000。小數(shù)點后保留兩位的公式如下:
(2.2)
由新公式可知當(dāng)ADC0809輸出位(10000000)B時,單片機運算結(jié)果為2500。然后單片機將250除以10得到商為250,余數(shù)為0,再將250除以10得到商為25,余數(shù)為0,再將25除以10得到商為2,余數(shù)為5。這樣就可以得到電壓值的四個數(shù)字,最后分別將2、5、0、0四個數(shù)通過串口送出,顯示在四個數(shù)碼管上,并且把第一個數(shù)碼管的dp腳(即小數(shù)點)直接接地使其一直發(fā)亮,那么數(shù)碼管上就可以顯示輸入的電壓值“2.500”[5]。
2.2.2 軟件程序設(shè)計簡介開機后首先初始化,使數(shù)碼管顯示為“0.000”然后調(diào)用A/D轉(zhuǎn)換子程序啟動AD轉(zhuǎn)換器,單片機等待查詢轉(zhuǎn)換結(jié)束信號,如果有信號則通過并行口讀取轉(zhuǎn)換數(shù)據(jù)并存儲,就這樣連著讀取五次數(shù)據(jù)后求平均值,再按上面的方法通過串行口把數(shù)據(jù)傳輸出,經(jīng)譯碼在數(shù)碼管顯示。具體方法和程序見程序設(shè)計部分和附錄。
2.3 小結(jié) 在電路設(shè)計和軟件設(shè)計中都采用了分模塊設(shè)計,這種設(shè)計方法清晰的電路的功能,為設(shè)計和以后的調(diào)試和維修帶來了極大的方便。特別是在軟件設(shè)計中,這中方法曾強了程序的可移植性,為以后的功能擴展奠定了基礎(chǔ)。
第3章 基于單片機數(shù)字電壓表的硬件設(shè)計3.1 器件的選擇模數(shù)轉(zhuǎn)換器選用ADC0809
單片機用AT89C51
顯示驅(qū)動用ZLG7289
數(shù)碼管用四位共陰級LED(SM420364)
退耦電容100nf無極性電容和100μf的電解電容
位電容用10μf的電解電容
零歐電阻 限流電阻
共陰極八段數(shù)碼管sm420364
3.2 A/D轉(zhuǎn)換電路3.2.1 A/D轉(zhuǎn)換芯片的選擇A/D轉(zhuǎn)換器是模擬量輸入通道中的一個環(huán)節(jié),單片機通過A/D轉(zhuǎn)換器把輸入模擬量變成數(shù)字量再處理。
隨著大規(guī)模集成電路的發(fā)展,目前不同廠家已經(jīng)生產(chǎn)出了多種型號的A/D轉(zhuǎn)換器,以滿足不同應(yīng)用場合的需要。如果按照轉(zhuǎn)換原理劃分,主要有3種類型,即雙積分式A/D轉(zhuǎn)換器、逐次逼近式A/D轉(zhuǎn)換器和并行式A/D轉(zhuǎn)換器。目前最常用的是雙積分和逐次逼近式。
雙積分式A/D轉(zhuǎn)換器具有抗干擾能力強、轉(zhuǎn)換精度高、價格便宜等優(yōu)點,比如ICL71XX系列等,它們通常帶有自動較零、七段碼輸出等功能。與雙積分相比,逐次逼近式A/D轉(zhuǎn)換的轉(zhuǎn)換速度更快,而且精度更高,比如ADC0808、ADC0809等,它們通常具有8路模擬選通開關(guān)及地址譯碼、鎖存電路等,它們可以與單片機系統(tǒng)連接,將數(shù)字量送單片機進行分析和顯示[9]。
本設(shè)計中,要求精度小于0.5%,則選用分辨率為8位的芯片,如ADC0809,ADC0801,ADC0808就能滿足設(shè)計要求。本電路采用ADC0809。
3.2.2 ADC0809轉(zhuǎn)換原理介紹ADC是一種基本的外圍擴展器件,其種類很多,工作原理也不僅相同,比較有代表性的是:單積分型,雙積分型,脈寬調(diào)制型和逐次比較型(逐次逼近型)。從產(chǎn)品性價比、轉(zhuǎn)換速度和精度等方面綜合分析,逐次比較型ADC是相對應(yīng)用比較廣的類型之一。所以有著廣泛的應(yīng)用[10]。
黑龍江職業(yè)學(xué)院畢業(yè)論文(設(shè)計) 逐次逼近型ADC實際采用的方法上從高到底開始逐位設(shè)定,比較模擬量輸出,再來確定原設(shè)定位的正確與否。逐次比較型ADC原理結(jié)構(gòu)如圖2.3所示。其主要由采集保持電路、電壓比較器、逐次比較寄存器、數(shù)/模轉(zhuǎn)換器ADC和鎖存器等部分組成。
其工作原理如下:
首先,被測模擬電壓ui通過逐次比較寄存器,將傳遞進的脈沖CP信號轉(zhuǎn)換成數(shù)字信號,該數(shù)字量再經(jīng)過數(shù)/模轉(zhuǎn)換器生成對應(yīng)的模擬量Us。當(dāng)獲得模擬量Us的數(shù)值達到并接近被測電壓所對應(yīng)ui后,就可以檢測出電壓比較器完成最后的反轉(zhuǎn)。此時,逐次比較積存器的計數(shù)值就是被測電壓ui所對應(yīng)的數(shù)字量,從而完成模擬量的轉(zhuǎn)換。以上的分析表明,逐次比較的模/數(shù)轉(zhuǎn)換方法,歸根到底是數(shù)/模轉(zhuǎn)換,采用逐次與模擬量進行比較后得到最終的數(shù)字標(biāo)定值[11]。
3.2.3 ADC0809芯片介紹ADC0809是一種8位逐次逼近型A/D轉(zhuǎn)換器。帶8個模擬量輸入通道,芯片內(nèi)有通道地址譯碼鎖存器,有輸出三態(tài)數(shù)據(jù)鎖存器,啟動信號為脈沖啟動方式,每個通道的轉(zhuǎn)換時間大約為100μs,可以和單片機直接接口[9]。
ADC0809的引腳圖和內(nèi)部邏輯結(jié)構(gòu)如圖2.4所示。
圖3-2 圖 3-3
由圖1(b)可知,ADC0809由一個8路模擬開關(guān),一個地址鎖存與譯碼器、一個8位A/D轉(zhuǎn)換器和一個三態(tài)輸出鎖存器組成。多路開關(guān)可選通8個模擬通道IN0—IN7,允許8路模擬分量輸入,共用A/D轉(zhuǎn)換器 進行轉(zhuǎn)換。三態(tài)輸出鎖存器用于鎖存A/D轉(zhuǎn)換完的數(shù)字量,當(dāng)OE端為高電平時,才可以從三態(tài)輸出鎖存器取走轉(zhuǎn)換完的數(shù)據(jù)。
IN0—IN7:8條模擬量輸入通道。ADC0809對輸入模擬量的要求是信號單極性,電壓范圍是0—5V,若信號太小,必須進行放大:輸入的模擬量在轉(zhuǎn)換過程中應(yīng)保持不變,如若模擬信號變化太快,則需在輸入前增加采樣保持電路。
地址輸入和控制線:4條,ALE為地址鎖存允許輸入線,高電平有效。當(dāng)ALE線為高電平時,地址鎖存與譯碼器將A,B,C三條地址線的地址信號進行鎖存,經(jīng)譯碼后被選中的通道的模擬量進轉(zhuǎn)化器進行轉(zhuǎn)換。A,B,C為地址輸入線,用于選通IN0—IN7上的一路模擬量輸入。通道選擇如表2.1所示。
數(shù)字量輸出及控制線: 11條。START為上跳沿時,所有內(nèi)部寄存器清零;下跳沿時,開始進行A/D轉(zhuǎn)換:在轉(zhuǎn)換期間,START應(yīng)保持底電平。EOC為轉(zhuǎn)換結(jié)束信號。當(dāng)EOC為高電平時,表明轉(zhuǎn)換結(jié)束:否則,表明正在進行A/D轉(zhuǎn)換。OE為輸出允許信號,用于控制三條輸出鎖存器向單片機輸出轉(zhuǎn)換得到的數(shù)據(jù)。OE=1,輸出轉(zhuǎn)換得到的數(shù)據(jù)。OE=0,輸出數(shù)據(jù)線呈高阻狀態(tài)。D7—D0為數(shù)字量輸出線。
CLK為時鐘輸入信號線。由于ADC0809的內(nèi)部沒有時鐘電路,所需時鐘信號必須由外界提供,通常使用頻率為500KHz,最大不能超過1280KHz[11]。
VREF(+),VREF(-)為參考電壓輸入,決定了輸入模擬量的范圍。一般情況VREF(-)接地,VREF(+)接+5V電源。
3.2.4 ADC0809與單片機的接口方法 電路原理圖2.2可以看出ADC0809的數(shù)據(jù)D0—D7直接與單片機的總線P0相連。模擬輸入通道地址A、B、C直接接地,因此ADC0809只對通道IN0輸入的電壓進行模數(shù)轉(zhuǎn)換,其他通道直接接地(接地的目的主要是為了減少輸入噪聲,一般情況對于模數(shù)轉(zhuǎn)換芯片中沒用到的模擬輸入端都這樣處理)。時鐘CLK由單片機的ALE取得,對于晶振為12MHz的單片機ALE輸出為2MHz的方波,但前面提到ADC0809的時鐘頻率一般為500KHz,最大能超過1280KHz,但在實際應(yīng)用中2MHz的信號也可以使ADC0809正常工作。START、ALE和OE分別由單片機的WR、RD和P2.7經(jīng)或非門接入、這樣主要是滿足ADC0809的信號電平與時序的要求。按此圖中的片選接法。ADC0809通道—IN0的地址為7FFFH。
由于EOC未接入單片機,故只能采用延時等待的方法來讀取A/D轉(zhuǎn)換的結(jié)果(即當(dāng)單片機啟動ADC0809后延時一段時間再主動去讀ADC0809的轉(zhuǎn)換結(jié)果)。但是如果單片機在進行A/D轉(zhuǎn)換時還要執(zhí)行其他的程序可以將EOC接在單片機的中斷上,這樣當(dāng)A/D轉(zhuǎn)換完后EOC可以對單片機產(chǎn)生中斷使其讀取A/D轉(zhuǎn)換的結(jié)果,這樣做單片機的使用效率更高。
3.3 單片機介紹3.3.1 單片機介紹單片微型計算機簡稱單片機,又稱微型控制或嵌入式控制器,是將計算機的基本部件微型化,使之集成在一塊芯片上的微機。單片機有著體積小,功耗低,功能強,性能價格比高、易于推廣應(yīng)用等顯著優(yōu)點,在自動化裝置、智能化儀器儀表、過程控制和家用電器等領(lǐng)域得到日益廣泛的應(yīng)用。
3.3.2 采用AT89C51的原因在眾多的51系列單片機中,要算 ATMEL 公司的AT89C51更實用,它是由北京集成電路設(shè)計中心在MSC-51單片機的基礎(chǔ)上精心設(shè)計,由美國生產(chǎn)的至今為止世界上最新型的高性能八位單片機。它不但和8051指令、管腳完全兼容,而且其片內(nèi)的4K程序存儲器是FLASH工藝的,這種工藝的存儲器用戶可以用電的方式瞬間擦除、改寫,一般專為 ATMEL AT89Cx 做的編程器均帶有這些功能。顯而易見,這種單片機對開發(fā)設(shè)備的要求很低,開發(fā)時間也大大縮短[12]。
3.3.3 AT89C51芯片主要性能參數(shù)與MCS—51產(chǎn)品指令系統(tǒng)完全兼容
4K字節(jié)的可重擦寫Flash閃速存儲器
1000次擦寫周期
全靜態(tài)操作:0Hz–24Hz
三級加密程序存儲器
128×8字節(jié)內(nèi)部RAM
32個可編程I/O口線
2個16位定時/記數(shù)器
6個中斷源
可編程串行UART通道
底功耗空閑和掉電模式 圖3-4 AT89C51管腳分
3.3.4 功能介紹AT89C51是一種低損耗、高性能、CMOS八位微處理器,片內(nèi)有4K字節(jié)的在線可重復(fù)編程快擦快寫存儲器,能重復(fù)寫入/擦除1000次,數(shù)據(jù)保存時間為十年。它與MCS-51系列單片機在指令系統(tǒng)和引腳上完全兼容,不僅可完全代替MCS-51系列單片機,而且能使系統(tǒng)具有許多MCS-51單片機,而且能使系統(tǒng)具有許多MCS-51系列產(chǎn)品沒有的功能。AT89C51可構(gòu)成真正的單片機最小應(yīng)用系統(tǒng),縮小系統(tǒng)體積,增加系統(tǒng)的可靠性,降低了系統(tǒng)成本。只要程序長度小于4K,四個I/O口全部提供給用戶?捎5V電壓編程,而且擦寫時間僅需10毫秒,僅為8751/87C51的擦除時間的百分之一,與8751/87C51的12V電壓擦寫相比,不易損壞器件,沒有兩種電源的要求,改寫時不拔下芯片,適合許多嵌入式控制領(lǐng)域。工作電壓范圍寬2.7V-6V,全靜態(tài)工作,工作頻率寬,在0M Hz-24M Hz內(nèi),比8751/87C51等51系列的6MHz-12 MHz更具有靈活性,系統(tǒng)能快能慢。AT89C51芯片提供三級程序存儲器加密,提供了方便靈活而可靠的硬加密手段,能完全保證程序或系統(tǒng)不被仿制[13]。
另外,AT89C51還具有MCS-51系列單片機的所有優(yōu)點。128×8位內(nèi)部RAM,32位雙向輸入輸出線,兩個十六位定時/計數(shù)器,5個中斷源,兩級中斷優(yōu)先級,一個全雙工異步串行口及時鐘發(fā)生器等。
3.3.5 芯片管腳介紹及分配引腳描述:
VCC:電源
GND:電源地
P0口:P0口是一組8位漏極開路雙向I/O口,也既地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8個TTL邏輯門電路,對端口寫“1”可作為高阻抗輸入端用。
在訪問外部數(shù)據(jù)存儲器話程序存儲器時,這組口線分時轉(zhuǎn)換地址(底8位)和數(shù)據(jù)總線服用,在訪問期間激活內(nèi)部上拉電阻。
在Flash編程時,P0口接受指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻。
P1口:P1口是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口 寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可操作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉底時會輸出一個電流(IIL)。
Flash編程和程序校驗期間,P1接收底8位地址。
P2口:P2口是一個帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對斷口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉底時會輸出一個電流(IIL)。
在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行MOVE @DPTR)時,P2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器(如執(zhí)行MOVE @RI指令)時,P2口線上的內(nèi)容[也即特殊功能存儲器(SFR)區(qū)中R2寄存器的內(nèi)容],在整個訪問期間不改變。
在Flash編程或校驗時,P2亦接收高位地址和其他控制信號。
P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作為輸入端口。作輸入端時,被外部拉底的P3口將用上拉電阻輸出電流(IIL)。
P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如下表2.2所示:
表 3-5 P3口第二功能表
P3口還接受一些用于Flash閃速存儲器編程和程序校驗的控制信號。
RST:復(fù)位輸入。當(dāng)振蕩器工作時,RET引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位。
ALE/PROG:當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的底8位字節(jié)。即使不訪問外部存儲器,ALE仍以時鐘振蕩頻率的1/6輸出固定的正脈沖信號,因此它可對外部輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。
對Flash存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。
如有必要,可通過對特殊功能寄存器(SFR)區(qū)中的8EH的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVE和MOVX指令A(yù)LE才會被激活,此外,該引腳會被微弱拉高,單片機執(zhí)行外部程序時,應(yīng)設(shè)置ALE無效。
PSEN:程序存貯允許(PSEN)輸出是外部程序存儲器的讀選通信號,當(dāng)AT89C51由外部程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩次PSEN有效,既輸出兩個脈沖。在此期間,當(dāng)訪問外部數(shù)據(jù)存儲器,這兩次有效的PSEN信號不出現(xiàn)。
EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H—FFFFH),EA端必須保持底電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。
如EA端為高電平(接VCC端),CPU則執(zhí)行內(nèi)部程序存儲器中的指令。
Flash存儲器編程時,該腳加上+12V的編程允許電源VPP,當(dāng)然這必須是該器件是使用12V編程電壓VPP。
XTAL1:振蕩器反相放大器的及內(nèi)部時鐘發(fā)生器的輸入端。
XTAL2:振蕩器反相放大器的輸出端。
3.4 顯示驅(qū)動單元設(shè)計3.4.1 ZLG7289芯片介紹
ZLG7289是廣州周立功單片機發(fā)展有線公司自行設(shè)計的數(shù)碼管顯示驅(qū)動及鍵盤掃描管理芯片,可直接驅(qū)動8位共陰式數(shù)碼管(或64只獨立LED),同時還可以掃描管理多達64只按鍵。
ZLG7289內(nèi)部含有顯示譯碼器,可直接接受BCD碼或16進制碼,并同時具有2種譯碼方式。此外,還具有多種控制指令,如消隱、閃爍、左移、右移、段尋址等。ZLG7289采用SPI串行總線與微控制器接口,僅占用少數(shù)幾根I/O口線。利用片選信號,多片 ZLG7289還可以并接在一起使用,能夠方便地實現(xiàn)多于8位的顯示或多于64只按鍵的應(yīng)用。
3.4.2 ZLG7289的主要特征很寬的工作電壓范圍:+2.7-6V;
直接驅(qū)動8位共陰式數(shù)碼管(1英寸以下)或64只獨立的LED;
段電流可達15mA以上,字電流可達100mA;
利用功率電路可以方便地驅(qū)動1英寸以上的大型數(shù)碼管;
具有左移、右移、閃爍、消隱、段點亮等強大功能;
要顯示的數(shù)據(jù)提供有兩種不同的譯碼方式(也可以選擇不譯碼);
不接數(shù)碼管而僅使用鍵盤管理功能時,工作電流可將至3mA;
與微控制器之間采用SPI串行總線接口,操作方便,占用I/O資源少;
工作溫度范圍:-40~+85℃;
封裝:DIP-28。
3.4.3 ZLG7289引腳功能說明表3-6 ZLG7289引腳功能表
3.4.4 ZLG7289與單片機及數(shù)碼管的連接U1就是ZLG7289。為了使電源更加穩(wěn)定,在Vcc到GND之間接入47-470μF的電解電容。J1是ZLG7289與微處理器的接口。晶振Y1取4-16MHz,調(diào)節(jié)電容
C3和C4通常在10pF左右。復(fù)位信號是低電平有效,一般只需外接簡單的RC
圖3-7 只使用數(shù)碼管的應(yīng)用電路
復(fù)位電路,也可以通過直接拉低
引腳的方法進行復(fù)位。
數(shù)碼管必須是共陰式的,不能直接使用共陽式的。DPY1和DPY2是4位聯(lián)體式數(shù)碼管,共同組成完整的8位。數(shù)碼管在工作時要消耗較大的電流,R9-R16是限流電阻,典型值是270Ω。如果要曾大數(shù)碼管的亮度,可以適當(dāng)減小電阻值,最低200Ω[13]。
ZLG7289通常應(yīng)連接共陰式數(shù)碼管,應(yīng)用中無須用到的數(shù)碼管可以不接,省去數(shù)碼管不影響使用。ZLG7289與單片機的接口采用3線制I2C串行總線,由、CLK和DIO這3根信號組成。和CLK是輸入信號,由單片機提供。DIO信號是雙向的,必須接到單片機上具有雙向功能的I/O上。設(shè)計中使ZLG7289的6-9腳分別于AT89C51的P1.0-P1.3相連。其中6腳為片選輸入端CS,低電平有效,可用來向芯片發(fā)送數(shù)據(jù),7腳CLK為同步時鐘輸入端,當(dāng)向芯片發(fā)送數(shù)據(jù)時,此引腳上的電平上生表示數(shù)據(jù)有效;8腳為串行數(shù)據(jù)輸入/輸出端,當(dāng)芯片接受指令時,此引腳為輸入端。SPI信號線的具體意義參見表2.4。操作SPI總線的時序圖參見圖2-7、2-8。
表3-8 ZLG7289的SPI串行接口信號
圖3-9 存指令時序圖(單字節(jié)命令)
圖3-10 帶數(shù)據(jù)指令時序圖(命令字在前,輸入數(shù)據(jù)在后)
3.4.5 時序圖中的各項延遲時間 表中2-5各項參數(shù)的測試條件為:VCC=5.0V,F(xiàn)osc=16MHz
表 3-11 時序延時表
3.4.6 控制指令ZLG7289的控制指令分為單字節(jié)純指令和雙字節(jié)數(shù)據(jù)指令兩大類。在這里直介紹設(shè)計中所用的單字節(jié)復(fù)位(清除)指令和雙字節(jié)帶數(shù)據(jù)指令中的下載數(shù)據(jù)并按方式1進行譯碼指令[13]。
復(fù)位(清除)指令
這是一條軟復(fù)位指令,執(zhí)行后會將數(shù)碼管所有的顯示內(nèi)容清楚掉,原先設(shè)置的所有閃爍、消隱等屬性也一并清除,就像硬件復(fù)位一樣。
下載數(shù)據(jù)并按方式1進行譯碼
在指令格式中,高5位的11001是指令字節(jié)段;a2a1a0是數(shù)碼管顯示數(shù)據(jù)的位地址,位地址編號從左到右的順序依次位0、1、2、3、4、5、6、7;dp控制小數(shù)點是否顯示,dp=1時該位的小數(shù)點被點亮,dp=0時該位的小數(shù)點被熄滅;xxx是無關(guān)位;d3d2d1d0是要顯示的數(shù)據(jù)。顯示數(shù)據(jù)按照下表中的規(guī)則進行譯碼:
表3-12 下載數(shù)據(jù)命令譯碼方式1
3.5 SPI接口技術(shù)3.5.1 SPI總線簡介SPI,是英語Serial Peripheral Interface的縮寫,顧名思義就是串行外圍設(shè)備接口。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡單易用的特性,現(xiàn)在越來越多的芯片集成了這種通信協(xié)議[14]。
3.5.2 SPI總線的基本結(jié)構(gòu)SPI是一個環(huán)形總線結(jié)構(gòu),由SS(CS)、SCK、SDI、SIO構(gòu)成,其時序其實很簡單,主要是在SCK的控制下,兩個雙向移位寄存器進行數(shù)據(jù)交換。
上升沿發(fā)送、下降沿接收、高位先發(fā)送。
上升沿到來的時候,SDO上的電平將被發(fā)送到從設(shè)備的寄存器中。
下降沿到來的時候,SDI上的電平將被接收到主設(shè)備的寄存器中。
3.5.3 數(shù)據(jù)的傳輸假設(shè)主機和從機初始化就緒:并且主機的sbuff=0xaa (10101010),從機的sbuff=0x55 (01010101),下面將分步對SPI的8個時鐘周期的數(shù)據(jù)情況演示一遍(假設(shè)上升沿發(fā)送數(shù)據(jù))[15]。
---------------------------------------------------
脈沖 主機sbuff 從機sbuff SDI SDO
---------------------------------------------------
0 00-0 10101010 01010101 0 0
---------------------------------------------------
1 0--1 0101010x 10101011 0 1
1 1--0 01010100 10101011 0 1
---------------------------------------------------
2 0--1 1010100x 01010110 1 0
2 1--0 10101001 01010110 1 0
---------------------------------------------------
3 0--1 0101001x 10101101 0 1
3 1--0 01010010 10101101 0 1
---------------------------------------------------
4 0--1 1010010x 01011010 1 0
4 1--0 10100101 01011010 1 0
---------------------------------------------------
5 0--1 0100101x 10110101 0 1
5 1--0 01001010 10110101 0 1
---------------------------------------------------
6 0--1 1001010x 01101010 1 0
6 1--0 10010101 01101010 1 0
---------------------------------------------------
7 0--1 0010101x 11010101 0 1
7 1--0 00101010 11010101 0 1
---------------------------------------------------
8 0--1 0101010x 10101010 1 0
8 1--0 01010101 10101010 1 0
---------------------------------------------------
這樣就完成了兩個寄存器8位的交換,上面的0--1表示上升沿、1--0表示下降沿,sdi、 sdo相對于主機而言的。根據(jù)以上分析,一個完整的傳送周期是16位,即兩個字節(jié),因為,首先主機要發(fā)送命令過去,然后從機根據(jù)主機的名準(zhǔn)備數(shù)據(jù),主機在下一個8位時鐘周期才把數(shù)據(jù)讀回來。
其中CS是控制芯片是否被選中的,也就是說只有片選信號為預(yù)先規(guī)定的使能信號時(高電位或低電位),對此芯片的操作才有效[16]。這就允許在同一總線上連接多個SPI設(shè)備成為可能。接下來就負責(zé)通訊的3根線了。通訊是通過數(shù)據(jù)交換完成的,這里先要知道SPI是串行通訊協(xié)議,也就是說數(shù)據(jù)是一位一位的傳輸?shù)。這就是SCK時鐘線存在的原因,由SCK提供時鐘脈沖,SDI,SDO則基于此脈沖完成數(shù)據(jù)傳輸。數(shù)據(jù)輸出通過 SDO線,數(shù)據(jù)在時鐘上升沿或下降沿時改變,在緊接著的下降沿或上升沿被讀取。完成一位數(shù)據(jù)傳輸,輸入也使用同樣原理。這樣,在至少8次時鐘信號的改變(上沿和下沿為一次),就可以完成8位數(shù)據(jù)的傳輸。
3.6 電壓顯示電路設(shè)計中采用的是8段LED數(shù)碼管sm420364來顯示電壓值。LED具有耗電低、亮度高、視角大、線路簡單、耐震及壽命長等優(yōu)點,它由8個發(fā)光二極管組成,其中7個按‘8’字型排列,另一個發(fā)光二極管為圓點形狀,位于右下角,常用于顯示小數(shù)點。把8個發(fā)光二極管連在一起,公共端接高電平,叫共陽極接法,相反,公共端接低電平的叫共陰極接法,根據(jù)ZLG7289的要求我們采用共陰極接法。當(dāng)發(fā)光二極管導(dǎo)通時,相應(yīng)的一段筆畫或點就發(fā)亮,從而形成不同的發(fā)光字符。其8段分別命名為dp g f e d c b a。例如,要顯示“0”,則dp g f e d c b a分別為:1100 0000B;要顯示“A”,則dp g f e d c b a分別為:0001 0001B(共陽極)。若要顯示多個數(shù)字,只要讓若干個數(shù)碼管的位碼循環(huán)為低電平就可以了。
根據(jù)設(shè)計要求,顯示電路需要至少4位LED數(shù)碼管來顯示電壓值,則有4位LED循環(huán)顯示。設(shè)計中由ZLG7289的SA~DP驅(qū)動LED的段碼顯示,即顯示字符,由ZLG7289的DIG0~DIG3選擇LED位碼,即選擇點亮哪位LED來顯示。電路圖參考原理圖2.1。
3.7 小結(jié)在滿足設(shè)計要求的前提下,為保證電路造價和維修的方便,在設(shè)計中我盡可能的用電路制作中的常用元件。另外除了上述器件外,其他的元件如電阻,電容的選擇都是由一些典型電路經(jīng)測試調(diào)節(jié)確定的。所以電路顯得更于理解和分析,這一點給也將給最后的調(diào)試帶來很大的方便。
第4章 基于單片機數(shù)字電壓表的軟件設(shè)計4.1 軟件系統(tǒng)整體設(shè)計系統(tǒng)的軟件流程如下:
開始時首先初始化ZLG7289,使數(shù)碼管顯示為“0.000”,然后調(diào)用A/D轉(zhuǎn)換子程序啟動ADC0809。單片機等待查詢轉(zhuǎn)換結(jié)束信號,如果有信號則通過并行口讀取轉(zhuǎn)換數(shù)據(jù)并存儲,就這樣連著讀取五次數(shù)據(jù)后求平均值。再將所求得的結(jié)果進行運算Dout100/51,將運算后的結(jié)果除以10得到千分位,再把商除以10得到百分位,再除以10又分別得到十分位和個位,最后把個位,十分位,百分位和千分位通過串口發(fā)送給ZLG7289經(jīng)譯碼后送至數(shù)碼管顯示,此時LED數(shù)碼管顯示的就是ADC0809采集的電壓值。
4.1.1 C51簡介C語言是今年來在國內(nèi)外得到迅速推廣應(yīng)用的一種計算機語言。C語言功能豐富,表達力強,使用靈活方便,應(yīng)用面廣,目標(biāo)程序效率高,可移植性好,既具有高級語言的優(yōu)點,又有低級語言的許多特點。因此,C語言特別適合于編寫系統(tǒng)軟件。C語言誕生后,許多原來用匯編語言編寫的軟件,現(xiàn)在可以用C語言編寫了,而學(xué)習(xí)和使用C語言要比學(xué)習(xí)和使用匯編語言容易得多[17]。
51 的編程語言常用的有二種,一種是匯編語言,一種是C 語言。匯編語言的機器代碼生成效率很高但可讀性卻并不強,復(fù)雜一點的程序就更是難讀懂,而C 語言在大多數(shù)情況下其機器代碼生成效率和匯編語言相當(dāng),但可讀性和可移植性卻遠遠超過匯編語言,而且C 語言還可以嵌入?yún)R編來解決高時效性的代碼編寫問題。對于開發(fā)周期來說,中大型的軟件編寫用C 語言的開發(fā)周期通常要小于匯編語言很多[17]。
Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全——Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢[18]。
設(shè)計步驟:
- 建立一個新的項目;
- 選擇所用單片機;
- 在新建立的項目中加入程序;
- 保存運行;
- 編譯是否通過。
4.1.2 程序流程圖 系統(tǒng)軟件的總體框架如圖4-1所示:
圖4-1程序流程圖
系統(tǒng)上電即初始化,首先,單片機片選A/D轉(zhuǎn)換器,然后發(fā)出信號啟動A/D轉(zhuǎn)換。此時單片P3.2口開始工作,不斷掃描A/D轉(zhuǎn)換結(jié)束端口有無結(jié)束信號。若有,即啟動信號采集,對A/D轉(zhuǎn)換器的數(shù)據(jù)輸出口送來的數(shù)值進行存儲,又重新開始,并且準(zhǔn)備下一次的采集;若沒有,則繼續(xù)等待。每當(dāng)采集系統(tǒng)采集一次,a的值就自增1,直至采集滿5次時歸零,然后單片機一邊對數(shù)據(jù)處理,一邊進入下一次的掃描。數(shù)據(jù)處理完之后,通過SPI總線將數(shù)據(jù)傳給ZLG7289,ZLG7289把接收到的數(shù)據(jù)譯碼后送顯示器顯示出來。
4.1.3 數(shù)據(jù)采集模塊的設(shè)計 1.ADC0809內(nèi)部帶有輸出鎖存器,可以與AT89S51單片機直接相連。
2.初始化時,使ST和OE信號全為低電平。
3.送要轉(zhuǎn)換的哪一通道的地址到A,B,C端口上。
4.在ST端給出一個至少有100ns寬的正脈沖信號。
5.是否轉(zhuǎn)換完畢,根據(jù)EOC信號來判斷。
6.當(dāng)EOC變?yōu)楦唠娖綍r,這時給OE為高電平,轉(zhuǎn)換的數(shù)據(jù)就輸出給單片機了。
4.1.4 數(shù)據(jù)處理模塊的設(shè)計 為了得到更高精度和曾強系統(tǒng)的抗干擾能力,當(dāng)微處理器從ADC0809讀取數(shù)據(jù)后,把連續(xù)讀入的5次數(shù)據(jù)進行累加求平均值:
(4.1)
再由單片機對VO進行標(biāo)度變換,得到被測電壓數(shù)值:
(4.2)
但是單片機在進行數(shù)學(xué)運算時結(jié)果只讀取整數(shù)部分,且要顯示的是三位小數(shù),所以需要給VIN乘以1000:
(4.3)
用取余數(shù)的方法將電壓值按位輸出[5]:
千分位 取余數(shù)輸出
百分位 取余數(shù)輸出
十分位 取余數(shù)輸出
4.2 原程序見附錄A4.3 小結(jié)這一章中主要介紹了軟件部分的設(shè)計方法,另外要注意的是在程序設(shè)計上,首先要根據(jù)電路功能要求和硬件電路圖畫出程序流圖。然后再寫出程序,在程序的編譯過程中很難避免會出現(xiàn)錯誤,這就需要編譯器的提示和個人的分析,檢查出錯誤所在,并且修正直到編譯的通過為止。為了盡可能減少錯誤的出現(xiàn)和檢查的方便,在寫程序時,最好按照規(guī)范的程序?qū)懛ㄈ,并且最好加上詳細的注釋?/div>
第5章 基于單片機數(shù)字電壓表的抗干擾設(shè)計5.1硬件系統(tǒng)的可靠性與抗干擾設(shè)計硬件抑制干擾主要從形成干擾的三個方面采取措施[19][20]:
1.消除和抑制噪聲源
2.破壞干擾通道
3.消弱接受電路對抗噪聲干擾信號的敏感性
對此采用的抗干擾措施有以下幾種方法:
5.1.1 供電系統(tǒng)抗干擾措施 任何電源及輸入線路都存在內(nèi)阻,正是這些內(nèi)阻引進了電源的噪聲干擾。如果無內(nèi)阻存在,任何噪聲都會被電源短路吸收,在線路中不會建立任何干擾電壓。為保證電子線路正常工作,防止從電源引入干擾,采取以下措施:
1.采用交流穩(wěn)壓器供電
用交流穩(wěn)壓器供電可保證供電的穩(wěn)定性,防止電源系統(tǒng)的過壓與欠壓,有利于提高整個系統(tǒng)的可靠性[19]。
2.加裝濾波器
(1)低通濾波器:電源系統(tǒng)的干擾源大部分是高次諧波,因此采用低通濾波器濾去高次諧波,以改善電源波形。
(2)退耦濾波器:一個直流電源同時對幾個電路供電,為了避免通過電源內(nèi)阻造成幾個電路之間互相干擾,應(yīng)在每個電路的直流電源進線處加裝退耦濾波電容[19]。
5.1.2 接地 接地是抑制干擾的重要方法,如能將接地和屏蔽正確結(jié)合起來,就可以解決大部分干擾問題。在電子電路中,地線有系統(tǒng)地、機殼地(屏蔽地)、數(shù)字地(邏輯地)和模擬地等。如果一個電路有兩點和兩點以上接地,則由于兩點間的地電位差而會引起干擾,因此一般采用“單點接地” [20]。
1.單點接地
多級電路通過公共接地母線后在一點接地,如圖5.1(a)所示。此方法雖然避免了多點接地因地電位差所引起的干擾,但在公共地線上卻存在著A、B和C三個不同的對地電位差。如果各級電平相差不大,這種接地方式可以使用,反之則不能使用。因為高電平會產(chǎn)生較大的地電流,并且使這個干擾串入到底電平電路中去。這種接地方式僅限于級數(shù)不多、各級電平差異不大或抗干擾能力較強的數(shù)字電路[20]。
圖5-1(b)圖是另一種單點接地方式。此時,A、B和C三點對地電位只與本電路的地電流和地線阻抗有關(guān),各電路之間的電流不形成耦合,該種接地方式一般用于工作頻率在1MHz以下的電路。
a b
圖5-1 接地方式
2.數(shù)字、模擬電路的接地分開
一個系統(tǒng)既有高速數(shù)字電路,又有模擬電路,為避免數(shù)字電路對模擬電路
的工作造成干擾,兩者的接地不要相混,而分別與電源端地線相連[21]。
5.1.3 傳輸通道的抗干擾措施在電子電路信號的傳輸過程中會產(chǎn)生通道干擾。為了保證傳輸?shù)目煽啃裕?在本設(shè)計中采取盡可能小連線距離和盡可能大的PCB布線寬度,這樣使電磁波對信號的影響降到了最小。
5.2 軟件系統(tǒng)的可靠性與抗干擾設(shè)計按照可靠性理論,程序設(shè)計最主要任務(wù)是,確保應(yīng)用程序按照給定的順序有秩序地運行。有序運行的基礎(chǔ)是硬件的可靠性,可靠性高的硬件基礎(chǔ)可以確保不出現(xiàn)硬件故障;但是在使用時,大量的干擾源雖然不會造成單片機硬件系統(tǒng)的破壞,卻常常會破壞數(shù)字信號的時序,更改單片機寄存器內(nèi)容,導(dǎo)致程序運行的不正常。因此,在提高硬件的基礎(chǔ)上,必須在程序設(shè)計中采取措施,提高軟件的可靠性,減少軟件錯誤的發(fā)生保證系統(tǒng)的正常運行[22]。
軟件的抗干擾設(shè)計有關(guān)方面很多,在本設(shè)計中只對軟件的本質(zhì)可靠性加以考慮,即本質(zhì)可靠性程序設(shè)計:它是指程序可以不依靠附加的部分就可以完成規(guī)定的功能。為了做到程序設(shè)計的本質(zhì)可靠性,程序設(shè)計中從以下幾個方面做了考慮:
1.最大限度的減少程序錯誤和缺陷
程序在編寫和調(diào)試時對系統(tǒng)將來所處的環(huán)境不可能做到完全的模擬,因此,看似正確的程序,實際上還存在一定的缺陷。這些缺陷,有的是顯性的,可以通過進一步的調(diào)試與仿真加以改進,還有是隱性的,如因為信號的延時而造成程序的判斷錯誤。這就要求在編寫程序時,需作綜合、全面、動態(tài)的考慮。
2.足夠的時序裕度
數(shù)字系統(tǒng)的協(xié)調(diào)、有序運行離不開正確的時序。系統(tǒng)在單片機的控制下,實現(xiàn)分時操作,程序運行完全依靠時序調(diào)度、切換控制。
(1)復(fù)位時序
在系統(tǒng)中,通常需要復(fù)位的不僅僅是單片機,一些帶有工作寄存器的外圍器件也要復(fù)位(如本次設(shè)計中的ZLG7289),在軟件復(fù)位時,必須先復(fù)位外圍器件,再復(fù)位主器件。
(2)器件工作時序
器件工作時序是器件應(yīng)用程序設(shè)計的基礎(chǔ)。程序中必須保證時序工作的正確性,而且要有足夠的序裕度。例如:ZLG7289片選信號的建立時間最小為25μs,必須延時25μs后才能發(fā)揮后續(xù)指令,這是由器件的工作特性決定的。在考慮器件運行時序時,單片機的操作必須保證時序信號的銜接控制和時序信號的時序裕度。
(3)總線時序
在單片機應(yīng)用系統(tǒng),有并行總線與串行總線,串行通信中又有通信總線與擴展總線。這些總線在規(guī)范化操作時,其時序由數(shù)據(jù)通信協(xié)議保證,在非規(guī)范運行,例如在虛擬總線方式下,其虛擬總線運行的可靠性在于時序的準(zhǔn)確模擬。所以在數(shù)字電壓表的程序設(shè)計中必須嚴(yán)格按照ZLG7289的SPI總線時序進行設(shè)計[23]。
5.3 小結(jié) 抗干擾的方法很多,以上介紹的只是本設(shè)計中所采用的。這些方法也是電路設(shè)計中最常用和最好用的,但是對于軟件抗干擾就不是所有的電路所能做到的,它只能在含有微處理單元的電路中才可以去實現(xiàn)。并且可以通過軟件的方法去補償一些硬件不能達到的調(diào)節(jié),或者通過擬合曲線去處理一些非線形的數(shù)據(jù)。這也是電路中應(yīng)用微處理器的一大益處。
第6章 電路制作及調(diào)試6.1 PCB板的制作CAD是Computer Aided Design(計算機輔助制圖)的簡稱。CAD的特點是速度快,準(zhǔn)確性高,能極大地減輕工程技術(shù)人員的勞動強度。電子線路CAD的基本含義是使用計算機來完成電子線路的設(shè)計過程,包括電路原理圖的編輯、電路功能仿真、工作環(huán)境模擬、印制板設(shè)計(自動布線、手動布線)與檢測等。電子線路CAD軟件還能迅速形成各種各樣的報表文件,如元件清單報表,為元器件的采購及工程決算等提供了方便[23]。
目前,電子線路CAD軟件種類很多,如早期的Smartwork、TANGO、EESystem、PCAD、OrCAD、Protel等。其功能大同小異,其中Protel具有操作簡單、方便、易學(xué)等特點,是目前比較流行的電子線路CAD軟件之一[24][25]。
Protel99SE是Protel軟件系列較新的版本,其強大而先進的功能,使它自推出以來,一直是大多數(shù)電子設(shè)計者的手選軟件。因此,我選用Protel99SE來繪制PCB板。
圖6-2敷銅后的PCB圖
6.2 系統(tǒng)外觀
圖6-3 上電后系統(tǒng)圖
圖6-4 加被測電壓后系統(tǒng)圖
6.3電路調(diào)試6.3.1 調(diào)試步驟 1.按電路原理圖進行焊接,在焊接過程中首先要對PCB進行檢測,查看PCB是否制作合格。
2 .按電路原理圖焊接元件。
3 .上電測試:在系統(tǒng)上電開始測量前,要用萬用表的電壓檔對被測電壓進行估測,然后以此選擇適當(dāng)?shù)牧砍,防止過大電壓燒壞A/D轉(zhuǎn)換器。選擇好量程之后就可以對系統(tǒng)上電測量了。
6.3.2 可能出現(xiàn)的問題解答 1.上電后電路不工作,數(shù)碼管無反應(yīng)
檢查此類錯誤情況需要從兩個方面入手:硬件上,檢查電源供電是否正常、晶振是否起振、電路接線是否良好可靠;軟件上,檢查程序觸發(fā)的時序是否正確,片選是否選通、程序中延時是否正確。
2.數(shù)碼管出現(xiàn)閃爍現(xiàn)象
正常工作的ZLG7289驅(qū)動數(shù)碼管顯示應(yīng)處于一個很穩(wěn)定的狀態(tài),數(shù)碼管被點亮后不會出現(xiàn)閃爍和跳動的現(xiàn)象。出現(xiàn)閃爍的很大原因是在選定ZLG7289(即將片選信號/CS置為低電平)后很長時間沒有釋放,導(dǎo)致7289中斷掃描的時間太長,從而肉眼看到數(shù)碼管出現(xiàn)閃爍和不穩(wěn)定的現(xiàn)象;正確的使用方法是在CS置為低電平后減少不必要的延時,使ALG7289被中斷掃描的時間降到最低而不至于影響顯示[25]。
3.上電后顯示正常,就是顯示數(shù)值不準(zhǔn)確。
顯示正常表示硬件電路和軟件都正確,對于數(shù)值顯示不準(zhǔn)確需要調(diào)節(jié)ADC0809的輸入比較電壓。所以需要找一塊更高精度的電壓表進行校準(zhǔn)。
6.4 系統(tǒng)調(diào)試及結(jié)果分析設(shè)計完成之后,我們要對系統(tǒng)進行調(diào)試。調(diào)試過程可以利用對部分給定電壓的測量結(jié)果分析來完成。首先要校對零點:將A/D轉(zhuǎn)換器的模擬輸入端口接較準(zhǔn)電源,此時可以調(diào)整ADC0809參考電壓值,直至顯示電壓和標(biāo)準(zhǔn)電源相同[26]。校準(zhǔn)后,就可以進行調(diào)試了。表6.1所示為對系統(tǒng)進行測試結(jié)果:
表6-1 測試結(jié)果
6.4 小結(jié)PCB布線的好壞直接影響著電路工作的可靠性,所以在布線時需要對布線規(guī)則和所用元件PCB封裝做一些了解,要求做到線于線之間相交的次數(shù)最少,無直角連線。在調(diào)試上,如果電路出現(xiàn)問題,可根據(jù)問題分析可能問題所在模塊,然后在根據(jù)模塊設(shè)計時的功能要求去排錯修改。另外根據(jù)表6.1去評價設(shè)計是否滿足設(shè)計指標(biāo)要求。若顯示電壓與實際電壓的誤差在誤差范圍之內(nèi),則表示系統(tǒng)運行正常;若顯示電壓與實際電壓的誤差很大,則有可能是校零電阻沒有調(diào)整,可以進一步的校準(zhǔn)。
黑龍江職業(yè)學(xué)院畢業(yè)論文(設(shè)計)
結(jié) 論一、主要結(jié)論
本論文通過參閱大量相關(guān)文獻,了解現(xiàn)有數(shù)字電壓表的設(shè)計原理和發(fā)展方向,在總結(jié)了前人經(jīng)驗的基礎(chǔ)上,采用單片機為核心控制單元,實現(xiàn)了通過軟件來對數(shù)據(jù)進行處理。在設(shè)計中為了節(jié)省單片機的端口資源,采用了可以和單片機進行串行通信的顯示驅(qū)動芯片ZLG7289。另外,考慮到系統(tǒng)到抗干擾性,在電路設(shè)計中加入了去耦電容,零歐電阻等用來抗干擾的元件;在電路制作中,PCB嚴(yán)格按照布線規(guī)則進行布線,這一措施使系統(tǒng)的可靠性得以提高。在程序設(shè)計中最大限度的減少程序缺陷,使程序合理合序運行。最后,通過反復(fù)調(diào)試,各硬件電路的參數(shù)已經(jīng)確定,系統(tǒng)軟件程序也調(diào)試完成,系統(tǒng)各項工作指標(biāo)已滿足。
黑龍江職業(yè)學(xué)院畢業(yè)論文(設(shè)計)
通過本課題的研究,從原理圖的設(shè)計到PCB板子的繪制、從實際硬件電路的搭建、調(diào)試到軟件系統(tǒng)程序的編寫、調(diào)試,所有工作形成了一個完整的系統(tǒng)。整個工作過程培養(yǎng)了我獨立研制的能力,也培養(yǎng)了我工程學(xué)的思維能力,讓我受益匪淺,為我以后的工作奠定了基礎(chǔ)。當(dāng)然也還存在很多問題,望各位老師批評指正,提出您的寶貴意見。
二、進一步工作及展望
通過實驗,證明了本電壓表的設(shè)計方案的可行性,并且有著很好的開發(fā)前景,現(xiàn)就本設(shè)計以后完善及功能擴展總結(jié)為以下幾點:
1.調(diào)校問題。電路在制作時沒有考慮ADC0809參考電壓要求,所以對電源要求較高為穩(wěn)定6V。要解決這個問題,可以從兩個方面考慮:a.從硬件考慮,給ADC0809參考電壓輸入端加裝濾波、穩(wěn)壓、可調(diào)分壓電路,具體電路由一個濾波電容、穩(wěn)壓二極管,可變電阻組成。b.從軟件考慮,可以擬合一條曲線,經(jīng)單片機處理對不準(zhǔn)確的量化值進行修正。這也是本電路采用單片機后靈活性的體現(xiàn)。并且按照這樣做,還可以節(jié)省印刷PCB板的面積,降低了制作費用。
2.精度的提高。由于設(shè)計指標(biāo)要求的精度不是很高,所以用8位AD轉(zhuǎn)換和程序中求多次電壓平均值的方法就能充分滿足設(shè)計要求。但是對于本設(shè)計,如果要得到更高的測量精度,可以通過改進程序的方法實現(xiàn)。例如:按誤差理論中的計算方法處理數(shù)據(jù)。
3.?dāng)U展問題。設(shè)計指標(biāo)要求測量范圍是0V~+5V。但是實際中要測量的范圍多種多樣,要測量的度量也不相同,比如溫度、壓力、濕度等等,所以本電壓表在實際應(yīng)用中還需要根據(jù)具體應(yīng)用環(huán)境附加合適的電路完成要求功能。比如要測量高電壓時就要加分壓電路,要測溫度時就要加溫度傳感器(把溫度變?yōu)殡妷毫浚,測不穩(wěn)定電壓要加采樣保持電路等等。也就是說,本設(shè)計的電壓表相當(dāng)一個表頭,在需要數(shù)字化顯示的儀表中有著廣泛的應(yīng)用。
4.端口的利用。由于設(shè)計中采用了SPI串行總線,芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,這樣就有足夠的端口供以后使用,比如:設(shè)計中采用的A/D轉(zhuǎn)換是ADC0809,它能對8路信號進行AD轉(zhuǎn)換,為了利用這個特點,可以方便的在單片機上取三個端口用于ADC0809的地址輸入。
總之,由于設(shè)計中采用了單片機,而單片機的應(yīng)用如今已經(jīng)在工業(yè)、電子等方方面面展示出了它的優(yōu)越性,利用單片機設(shè)計電路逐漸成發(fā)展趨勢,它與外圍的簡單電路再加上優(yōu)化程序就可以構(gòu)建任意的產(chǎn)品,使得本設(shè)計成為現(xiàn)實。隨著單片機的日益發(fā)展,它必將在未來顯示出更大的活力,為電子設(shè)計增加更多精彩。
致 謝
在畢業(yè)設(shè)計完成時,作者不由的想起大學(xué)最后這一學(xué)期的學(xué)習(xí)生活。在這里,作者首先要感謝的是導(dǎo)師劉群華、韓峰老師這幾個月來給予的關(guān)心與指導(dǎo),尤其是他們一絲不茍的科研態(tài)度、高度的事業(yè)心和責(zé)任感時刻感染著作者;老師不僅教授給作者知識,更教給作者做人的道理、做學(xué)問的態(tài)度,這些都將使作者終生受益,恩師的教導(dǎo)將永不忘記,再一次忠心的感謝老師苦心培育之恩。同時也忠心感謝在做畢業(yè)設(shè)計的過程中給予作者幫助和關(guān)心的老師、同學(xué)和朋友們。這里向他們表示深深的謝意,感謝你們這些年來為作者所付出的艱辛和無私的奉獻。
在此,忠心的向在百忙之中審閱作者論文的各位老師表示最誠摯的感謝。
參考文獻
[1] 劉振忠.數(shù)字電壓表發(fā)展概況和原理.電訊工程.1998,1
[2] 胡學(xué)海.單片機原理及應(yīng)用系統(tǒng)設(shè)計.電子工業(yè)出版社,2005,2-7
[3] 沙占友.新型數(shù)字電壓表原理與應(yīng)用.機械工業(yè)出版社.2006,1-6
[4] 柳金龍.淺談數(shù)字電壓表的特點.中國計量.2004,8:43-44
[5] 黃亮.基于AT89C51單片機的數(shù)字電壓表的設(shè)計.實用電子制作.2006,10:25-27
[6] Grinev.V.G,Grineva.L.V. Amplitude digital voltmeter. Instruments and Experimental Techniques,1975,114-117
[7] 王守華,李智.基于PC的數(shù)字電壓表設(shè)計.今日電子.2006,8:81
[8] 何循來.高性能八位單片機AT89C51.半導(dǎo)體技術(shù).1997,8(4):61-63
[9] 宋鳳娟,李國忠等.基于89C51單片機的數(shù)字電壓表設(shè)計.2007,29(2): 89-93
[10] ADC0808/ADC0809 8-Bit up Compatible A/D Cnverters With 8-Channel Multiplexer. National Semiconductor.
[11] 江曉安等.數(shù)字電子技術(shù).西安電子科技大學(xué)出版社,1993,189-204
[12] 余永權(quán).ATMEL89系列單片機應(yīng)用技術(shù).北京航天航空大學(xué)出版社,2000
[13] ATMEL Corporation.Microcontroller Data Book.Oct 1995
[14] 苗紅霞.單片機實現(xiàn)數(shù)字電壓表的軟硬件設(shè)計.河海大學(xué)常州分校學(xué)報.
2002,16(3):74-79
[15] 蔡美琴 張為民等.MCS-51系列單片機系統(tǒng)及應(yīng)用.高等教育出版,2005
[16] 龔尚福,朱宇.微機原理與接口技術(shù).西安電子科技大學(xué)出2003.135-142
[17] 王建校,楊建國等.51系列電片機及C51程序設(shè)計.科學(xué)出版社,2002
[18] 胡大可.基于單片機8051的嵌入式開發(fā)指南.電子工業(yè)出版社,2001
[19] 楊栓科.模擬電子技術(shù)基礎(chǔ).高等教育出版社.2005
[20] 田良,王堯等.綜合電子設(shè)計與實踐.東南大學(xué)出版社,2002
[21] 閻智義,王曉梅等.提高數(shù)字電壓表穩(wěn)定性的方法.長春工業(yè)大學(xué)學(xué)報.
2003,24(1):50-53
[22] 劉光斌,劉東等.單片機系統(tǒng)實用抗干擾技術(shù).人民郵政出版社,2003.322-358
[23] 李東生等.Protel99SE電路設(shè)計技術(shù)入門與應(yīng)用.電子工業(yè)出版社,2004
[24] 余家春.Protel99SE電路設(shè)計實用教程.中國鐵道出版社,2002
[25] 陳曉平.Protel99SE-電子線路CAD應(yīng)用教程.東南大學(xué)出版社,2005
[26] 孟凡利.直流數(shù)字電壓表的誤差及分析.計量技術(shù).2004,9:25-26
附錄 基于單片機的數(shù)字電壓表設(shè)計C51原程序
- #include
- sbit ST=P3^6;
- sbit OE=P3^7;
- sbit EOC=P3^2;
- sbit ZLG7289_pinCS=P1^0;
- sbit ZLG7289_pinCLK=P1^1;
- sbit ZLG7289_pinDIO=P1^2;
- unsigned char ZLG7289_Delay_t=4;
- /*
- 宏定義:ZLG7289_ShortDelay()
- 功能:短延時
- 說明:延時ZLG7289_ShortDelay_t*2+8)個機器周期
- */
- void ZLG7289_ShortDelay()
- {
- unsigned char t=ZLG7289_Delay_t;
- while(--t!=0);
- }
- /*
- 宏定義:ZLG7289_LongDelay()
- 功能:長延時
- 說明:延時ZLG7289_LongDelay_t*12+8)個機器周期
- */
- void ZLG7289_LongDelay()
- {
- unsigned char t=ZLG7289_Delay_t*6;
- while(--t!=0);
- }
-
-
- 黑龍江職業(yè)學(xué)院畢業(yè)論文(設(shè)計)
- /*
- 函數(shù):ZLG7289_SPI_Write()
- 功能:向SPI總線寫入1字節(jié)的數(shù)據(jù)
- 參數(shù):
- dat:要寫入的數(shù)據(jù)
- */
- void ZLG7289_SPI_Write(char dat)
- {
- unsigned char t=8;
- do
- {
- ZLG7289_pinDIO=(bit)(dat&0x80);
- dat<<=1;
- ZLG7289_pinCLK=1;
- ZLG7289_ShortDelay();
- ZLG7289_pinCLK=0;
- ZLG7289_ShortDelay();
- }while(--t!=0);
- }
- /*函數(shù):ZLG7289_cmd()
- 功能:執(zhí)行ZLG7289純指令
- 參數(shù):
- cmd:命令字
- */
- void ZLG7289_cmd(char cmd)
- {
- char sav=IE;
- IE&=0xFA;
- ZLG7289_pinCS=0;
- ZLG7289_LongDelay();
- ZLG7289_SPI_Write(cmd);
- ZLG7289_pinCS=1;
- ZLG7289_LongDelay();
- IE=sav;
- }
- //復(fù)位(清除)指令
- void ZLG7289_Reset()
- {
- ZLG7289_cmd(0xA4);
- }
- /*
- 函數(shù):ZLG7289_cmd_dat()
- 功能:執(zhí)行ZLG7289帶數(shù)據(jù)指令
- 參數(shù):
- cmd:命令字
- dat:數(shù)據(jù)
- */
- void ZLG7289_cmd_dat(char cmd,char dat)
- {
- char sav=IE;
- IE&=0xFA;
- ZLG7289_pinCS=0;
- ZLG7289_LongDelay();
- ZLG7289_SPI_Write(cmd);
- ZLG7289_LongDelay();
- ZLG7289_SPI_Write(dat);
- ZLG7289_pinCS=1;
- ZLG7289_LongDelay();
- IE=sav;
- }
- /*
- 函數(shù):ZLG7289_Download()
- 功能:下載數(shù)據(jù)
- 參數(shù):
- mod=0:下載數(shù)據(jù)且按方式0譯碼
- mod=1:下載數(shù)據(jù)且按方式1譯碼
- mod=2:下載數(shù)據(jù)且按方式2譯碼
- x:數(shù)碼管編號(橫坐標(biāo)),取值0~7
- dp=0:小數(shù)點不亮
- dp=1:小數(shù)點亮
- dat:要顯示的數(shù)據(jù)
- 說明:
- 譯碼方式的具體含義查參考數(shù)據(jù)手冊
- */
- void ZLG7289_Download(unsigned char mod,char x, bit dp,char dat)
- {
- code char ModDat[3]={0x80,0xC8,0x90};
- char d1;
- char d2;
- if(mod>2)mod=2;
- d1=ModDat[mod];
- x&=0x07;
- d1|=x;
- d2=dat&0x7F;
- if(dp)d2|=0x80;
- ZLG7289_cmd_dat(d1,d2);
- }
- /*
- 函數(shù):ZLG7289_Init()
- 功能:ZLG7289初始化
- 參數(shù):SPI總線的延時值設(shè)置,取值1-40(超出范圍可能導(dǎo)致錯誤)
- 說明:
- t的取值可以參考以下公式:t>=5*f1/f2,其中f1表示89C51的
- 晶振頻率,f2表示ZLG7289的晶振頻率
- */
- void ZLG7289_Init(unsigned char t)
- {
- unsigned char x;
- //I/O口初始化
- ZLG7289_pinCS=1;
- ZLG7289_pinCLK=0;
- ZLG7289_pinDIO=1;
- //延時初始化
- ZLG7289_Delay_t=t;
- //點亮所有數(shù)碼管
- for(x=0;x<4;x++)
- {
- ZLG7289_Download(1,x,1,8);
- }
- }
- /***************************************************
- ***************主函數(shù)*******************************
- ****************************************************/
- void main()
- {
- /*********程序初始化***********/
- unsigned long int sum;
- unsigned char gatdata;
- char i,j,x,outdat;
- int result;
- ST=1;
- OE=1;
- ZLG7289_Reset();
- ZLG7289_Init(4);
-
- /*******初始化結(jié)束***************/
- while(1)
- {
- sum=0;
- gatdata=0;
- for(i=0;i<=5;i++)
- {
- ST=0;
- ZLG7289_ShortDelay();
- ST=1;
- while(1)
- if(EOC==0)
- {
- OE=0;
- gatdata=P0;
- OE=1;
- sum=sum+gatdata;
- break;
- }
- }
- result=(sum*1000)/255;
- for(j=0;j<=3;j++)
- {
- outdat=result%10;
- result=result/10;
- if(j==3) x=1;
- else x=0;
- ZLG7289_Download(1,j,x,outdat);
- }
- }
- }
-
復(fù)制代碼