(1)課題任務 基本要求:可測電壓為直流,典雅幅度范圍0-5V,測量值用3位LED顯示,誤差小于0.01伏,測量值可以通過喇叭自動播報。 提高要求:可測電壓可以是交流信號,電壓幅度可以擴大到20V。 (2)方案比較與選擇 (1)根據設計要求,選擇AT89C51單片機為核心控制器件。 (2)A/D轉換采用ADC0809實現,與單片機的接口為P1口和P2口的高四位引腳。 (3)電壓顯示采用4位的LED數碼管。 (4)LED數碼的段選輸入,由并行端口P0產生;位選輸入,用并行端口P2低四位產生。 硬件電路設計由6個部分組成; A/D轉換電路,AT89C51單片機系統,LED顯示系統、時鐘電路、復位電路以及測量電壓輸入電路。硬件電路設計系統框圖如圖1所示。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif 圖1 數字電壓表系統框圖
(3)電路設計 3.1 A/D轉換 現實世界的物理量很多都是模擬量,能把模擬量轉化成數字量的器件稱為模/數轉換器(A/D轉換器),A/D轉換器是單片機數據采集系統的關鍵接口電路,按照各種A/D芯片的轉化原理可分為計數比較型,逐次逼近型,雙重積分型等等。雙積分式A/D轉換器具有抗干擾能力強、轉換精度高、價格便宜等優點。與雙積分相比,逐次逼近式A/D轉換的轉換速度更快,而且精度更高,比如ADC0808、ADC0809等,它們通常具有8路模擬選通開關及地址譯碼、鎖存電路等,它們可以與單片機系統連接,將數字量送到單片機進行分析和顯示。一個n位的逐次逼近型A/D轉換器只需要比較n次,轉換時間只取決于位數和時鐘周期,逐次逼近型A/D轉換器轉換速度快,因而在實際中廣泛使用。 3.1.1 ADC0809的外部引腳特征 ADC0809芯片有28條引腳,采用雙列直插式封裝,其引腳圖如圖2所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.gif 圖2 ADC0809引腳圖 下面說明各個引腳功能: IN0-IN7(8條):8路模擬量輸入線,用于輸入和控制被轉換的模擬電壓。 地址輸入控制(4條): ALE:地址鎖存允許輸入線,高電平有效,當ALE為高電平時,為地址輸入線,用于選擇IN0-IN7上那一條模擬電壓送給比較器進行A/D轉換。 ADDA,ADDB,ADDC:3位地址輸入線,用于選擇8路模擬輸入中的一路。 START:START為“啟動脈沖”輸入法,該線上正脈沖由CPU送來,寬度應大于100ns,上升沿清零SAR,下降沿啟動ADC工作。 EOC: EOC為轉換結束輸出線,該線上高電平表示A/D轉換已結束,數字量已鎖入三態輸出鎖存器。 D1-D8:數字量輸出端,D1為高位。 OE:OE為輸出允許端,高電平能使D1-D8引腳上輸出轉換后的數字量。 REF+、REF-:參考電壓輸入量,給電阻階梯網絡供給標準電壓。 Vcc、GND: Vcc為主電源輸入端,GND為接地端,一般REF+與Vcc連接在一起,REF-與GND連接在一起. CLK:時鐘輸入端。 3.1.2 ADC0809的內部結構及工作流程 ADC0809由8路模擬通道選擇開關,地址鎖存與譯碼器,比較器,8位開關樹型A/D轉換器,逐次逼近型寄存器,定時和控制電路和三態輸出鎖存器等組成,其內部結構如圖3所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image005.gif 圖3 ADC0809的內部結構 其中: (1)8路模擬通道選擇開關實現從8路輸入模擬量中選擇一路送給后面的比較器進行比較。 (2)地址鎖存與譯碼器用于當ALE信號有效時,鎖存從ADDA、ADDB、ADDC 3根地址線上送來的3位地址,譯碼后產生通道選擇信號,從8路模擬通道中選擇當前模擬通道。 (3)比較器,8位開關樹型A/D轉換器,逐次逼近型寄存器,定時和控制電路組成8位A/D轉換器,當START信號有效時,就開始對當前通道的模擬信號進行轉換,轉換完成后,把轉換得到的數字量送到8位三態鎖存器,同時通過引腳送出轉換結束信號。 (4)三態輸出鎖存器保存當前模擬通道轉換得到的數字量,當OE信號有效時,把轉換的結果送出。 ADC0809的工作流程為: (1)輸入3位地址,并使ALE=1,將地址存入地址鎖存器中,經地址譯碼器從8路模擬通道中選通1路模擬量送給比較器。 (2)送START一高脈沖,START的上升沿使逐次寄存器復位,下降沿啟動A/D轉換,并使EOC信號為低電平。 (3)當轉換結束時,轉換的結果送入到輸出三態鎖存器中,并使EOC信號回到高電平,通知CPU已轉換結束。 (4)當CPU執行一讀數據指令時,使OE為高電平,則從輸出端D0-D7讀出數據。 3.2 單片機系統 3.2.1 AT89C51性能 AT89C51是美國ATMEL公司生產的低電壓,高性能CMOS8位單片機,片內含有4KB的可反復擦寫的只讀程序存儲器和128字節的隨機存儲器。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容,由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,它為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。 AT89C51功能性能:與MCS-51成品指令系統完全兼容;4KB可編程閃速存儲器;壽命:1000次寫/擦循環;數據保留時間:10年;全靜態工作:0-24MHz;三級程序存儲器鎖定;128*8B內部RAM;32個可編程I/O口線;2個16位定時/計數器;5個中斷源;可編程串行UART通道;片內震蕩器和掉電模式。 3.2.2 AT89C51各引腳功能 T89C51提供以下標準功能:4KB的Flash閃速存儲器,128B內部RAM,32個I/O口線,兩個16位定時/計數器,一個5向量兩級中斷結構,一個全雙工串行通信口,片內震蕩器及時鐘電路,同時,AT89C51可降至0Hz靜態邏輯操作,并支持兩種軟件可選的節電工作模式。空閑方式停止CPU的工作,但允許RAM,定時/計數器,串行通信口及中斷系統繼續工作,掉電方式保存RAM中的內容,但震蕩器停止工作并禁止其他所有工作直到下一個硬件復位。AT89C51采用PDIP封裝形式,引腳配置如圖4所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image007.gif 圖4 AT89C51的引腳圖 AT89C51芯片的各引腳功能為: P0口:這組引腳共有8條,P0.0為最低位。這8個引腳有兩種不同的功能,分別適用于不同的情況,第一種情況是89C51不帶外存儲器,P0口可以為通用I/O口使用,P0.0-P0.7用于傳送CPU的輸入/輸出數據,這時輸出數據可以得到鎖存,不需要外接專用鎖存器,輸入數據可以得到緩沖,增加了數據輸入的可靠性;第二種情況是89C51帶片外存儲器,P0.0-P0.7在CPU訪問片外存儲器時先傳送片外存儲器的低8位地址,然后傳送CPU對片外存儲器的讀/寫數據。P0口為開漏輸出,在作為通用I/O使用時,需要在外部用電阻上拉。 P1口:這8個引腳和P0口的8個引腳類似,P1.7為最高位,P1.0為最低位,當P1口作為通用I/O口使用時,P1.0-P1.7的功能和P0口的第一功能相同,也用于傳送用戶的輸入和輸出數據。 P2口:這組引腳的第一功能與上述兩組引腳的第一功能相同即它可以作為通用I/O口使用,它的第一功能和P0口引腳的第二功能相配合,用于輸出片外存儲器的高8位地址,共同選中片外存儲器單元,但并不是像P0口那樣傳送存儲器的讀/寫數據。 P3口:這組引腳的第一功能和其余三個端口的第一功能相同,第二功能為控制功能,每個引腳并不完全相同,如下表1所示: 表1 P3口各位的第二功能 Vcc為+5V電源線,Vss接地。 ALE:地址鎖存允許線,配合P0口的第二功能使用,在訪問外部存儲器時,89C51的CPU在P0.0-P0.7引腳線去傳送隨后而來的片外存儲器讀/寫數據。在不訪問片外存儲器時,89C51自動在ALE線上輸出頻率為1/6震蕩器頻率的脈沖序列。該脈沖序列可以作為外部時鐘源或定時脈沖使用。 /EA:片外存儲器訪問選擇線,可以控制89C51使用片內ROM或使用片外ROM, 若/EA=1,則允許使用片內ROM,若/EA=0,則只使用片外ROM。 /PSEN:片外ROM的選通線,在訪問片外ROM時,89C51自動在/PSEN線上產生一個負脈沖,作為片外ROM芯片的讀選通信號。 RST:復位線,可以使89C51處于復位(即初始化)工作狀態。通常89C51復位有自動上電復位和人工按鍵復位兩種。 XTAL1和XTAL2:片內震蕩電路輸入線,這兩個端子用來外接石英晶體和微調電容,即用來連接89C51片內OSC(震蕩器)的定時反饋回路。 3.3 復位電路和時鐘電路 3.3.1復位電路設計 單片機在啟動運行時都需要復位,使CPU和系統中的其他部件都處于一個確定的初始狀態,并從這個狀態開始工作。MCS-51單片機有一個復位引腳RST,采用施密特觸發輸入。當震蕩器起振后,只要該引腳上出現2個機器周期以上的高電平即可確保時器件復位[1]。復位完成后,如果RST端繼續保持高電平,MCS-51就一直處于復位狀態,只要RST恢復低電平后,單片機才能進入其他工作狀態。單片機的復位方式有上電自動復位和手動復位兩種,圖5是51系列單片機統常用的上電復位和手動復位組合電路,只要Vcc上升時間不超過1ms,它們都能很好的工作。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.gif 圖5 復位電路 3.3.2時鐘電路設計 單片機中CPU每執行一條指令,都必須在統一的時鐘脈沖的控制下嚴格按時間節拍進行,而這個時鐘脈沖是單片機控制中的時序電路發出的。CPU執行一條指令的各個微操作所對應時間順序稱為單片機的時序。MCS-51單片機芯片內部有一個高增益反相放大器,用于構成震蕩器,XTAL1為該放大器的輸入端,XTAL2為該放大器輸出端,但形成時鐘電路還需附加其他電路[1]。 本設計系統采用內部時鐘方式,利用單片機內部的高增益反相放大器,外部電路簡,只需要一個晶振和 2個電容即可,如圖6所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image011.gif 圖6 時鐘電路 電路中的器件選擇可以通過計算和實驗確定,也可以參考一些典型電路的參數,電路中,電容器C1和C2對震蕩頻率有微調作用,通常的取值范圍是30±10pF,在這個系統中選擇了33pF;石英晶振選擇范圍最高可選24MHz,它決定了單片機電路產生的時鐘信號震蕩頻率,在本系統中選擇的是12MHz,因而時鐘信號的震蕩頻率為12MHz。 3.4 LED顯示系統設計 3.4.1 LED基本結構 LED是發光二極管顯示器的縮寫。LED由于結構簡單、價格便宜、與單片機接口方便等優點而得到廣泛應用。LED顯示器是由若干個發光二極管組成顯示字段的顯示器件[6]。在單片機中使用最多的是七段數碼顯示器。LED七段數碼顯示器由8個發光二極管組成顯示字段,其中7個長條形的發光二極管排列成“日”字形,另一個圓點形的發光二極管在顯示器的右下角作為顯示小數點用,其通過不同的組合可用來顯示各種數字。LED引腳排列如下圖7所示: file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image013.gif 圖7 LED引腳排列 在應用系統中,設計要求不同,使用的LED顯示器的位數也不同,因此就生產了位數,尺寸,型號不同的LED顯示器供選擇,在本設計中,選擇4位一體的數碼型LED顯示器,簡稱“4-LED”。本系統中前一位顯示電壓的整數位,即個位,后兩位顯示電壓的小數位。 4-LED顯示器引腳如圖9所示,是一個共陰極接法的4位LED數碼顯示管,其中a,b,c,e,f,g為4位LED各段的公共輸出端,1、2、3、4分別是每一位的位數選端,dp是小數點引出端,4位LED數碼顯示管的內部結構是由4個單獨的LED組成,每個LED的段輸出引腳在內部都并聯后,引出到器件的外部。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image015.gif 圖8 4位LED引腳 對于這種結構的LED顯示器,它的體積和結構都符合設計要求,由于4位LED陰極的各段已經在內部連接在一起,所以必須使用動態掃描方式(將所有數碼管的段選線并聯在一起,用一個I/O接口控制)顯示。 3.4.2LED與單片機的連接 由于單片機的并行口不能直接驅動LED顯示器,所以,在一般情況下,必須采用專用的驅動電路芯片,使之產生足夠大的電流,顯示器才能正常工作[7]。如果驅動電路能力差,即負載能力不夠時,顯示器亮度就低,而且驅動電路長期在超負荷下運行容易損壞,因此,LED顯示器的驅動電路設計是一個非常重要的問題。 為了簡化數字式直流電壓表的電路設計,在LED驅動電路的設計上,可以利用單片機P0口上外接的上拉電阻來實現,即將LED的A-G段顯示引腳和DP小數點顯示引腳并聯到P0口與上拉電阻之間,這樣,就可以加大P0口作為輸出口德驅動能力,使得LED能按照正常的亮度顯示出數字,如圖9所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image017.gif 圖9 LED與單片機接口間的設計 3.5 總體電路設計 經過以上的設計過程,可設計出基于單片機的數字電壓表系統硬件電路圖,如圖10所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image019.gif圖10 數字電壓表電路圖 此電路的工作原理是:+5V模擬電壓信號通過變阻器VR1分壓后由ADC08008的IN0通道進入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低電平),經過模/數轉換后,產生相應的數字量經過其輸出通道D0-D7傳送給AT89C51芯片的P1口,AT89C51負責把接收到的數字量經過數據處理,產生正確的7段數碼管的顯示段碼傳送給四位LED,同時它還通過其四位I/O口P2.0、P2.1、P2.2、P2.3產生位選信號控制數碼管的亮滅。此外,AT89C51還控制ADC0809的工作。其中,單片機AT89C51通過定時器中斷從P2.4輸出方波,接到ADC0809的CLOCK,P2.6發正脈沖啟動A/D轉換,P2.5檢測A/D轉換是否完成,轉換完成后,P2.7置高從P1口讀取轉換結果送給LED顯示出來[3]。 簡易數字直流電壓表的硬件電路已經設計完成,就可以選取相應的芯片和元器件,利用Proteus軟件繪制出硬件的原理,并仔細地檢查修改,直至形成完善的硬件原理圖。但要真正實現電路對電壓的測量和顯示的功能,還需要有相應的軟件配合,才能達到設計要求。 (4)程序設計 根據模塊的劃分原則,將該程序劃分初始化模塊,A/D轉換子程序和顯示子程序,這三個程序模塊構成了整個系統軟件的主程序,如圖12所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image020.gif 圖12 數字式直流電壓表主程序框圖 4.1 系統子程序設計 4.2.1初始化程序 所謂初始化,是對將要用到的MCS_51系列單片機內部部件或擴展芯片進行初始工作狀態設定,初始化子程序的主要工作是設置定時器的工作模式,初值預置,開中斷和打開定時器等。 4.2.2 A/D轉換子程序 A/D轉換子程序用來控制對輸入的模塊電壓信號的采集測量,并將對應的數值存入相應的內存單元,其轉換流程圖如圖13所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image021.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image022.gif 圖13 A/D轉換流程圖
4.2.3顯示子程序 顯示子程序采用動態掃描實現四位數碼管的數值顯示,在采用動態掃描顯示方式時,要使得LED顯示的比較均勻,又有足夠的亮度,需要設置適當的掃描頻率,當掃描頻率在70HZ左右時,能夠產生比較好的顯示效果,一般可以采用間隔10ms對LED進行動態掃描一次,每一位LED的顯示時間為1ms[10]。 在本設計中,為了簡化硬件設計,主要采用軟件定時的方式,即用定時器0溢出中斷功能實現11μs定時,通過軟件延時程序來實現5ms的延時。
(5)測試方案 5.1軟件調試 軟件調試的主要任務是排查錯誤,錯誤主要包括邏輯和功能錯誤,這些錯誤有些是顯性的,而有些是隱形的,可以通過仿真開發系統發現逐步改正。Proteus軟件可以對基于微控制器的設計連同所有的周圍電子器件一起仿真,用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態外設模型來對設計進行交互仿真。Proteus支持的微處理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成單片機系統原理圖電路繪制、PCB設計,更為顯著點的特點是可以與u Visions3 IDE工具軟件結合進行編程仿真調試。 本系統的調試主要以軟件為主,其中,系統電路圖的繪制和仿真我采用的是Proteus軟件,而程序方面,采用的是匯編語言,用Keil軟件將程序寫入單片機。 5.2結果顯示 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image024.gif 圖11 電壓為0V時 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image026.gif 圖12 電壓為3.5V時
(6)系統調試
(7)數據測試與處理
(8)總結 由上所述,數字電壓表基本完成。但設計中的不足之處仍然存在。在這過程中,我對電路設計,單片機的使用等都有了新的認識。通過這次設計學會了Proteus和Keil軟件的使用方法,掌握了從系統的需要、方案的設計、功能模塊的劃分、原理圖的設計和電路圖的仿真的設計流程,積累了不少經驗。 基于單片機的數字電壓表使用性強、結構簡單、成本低、外接元件少。在實際應用工作應能好,測量電壓準確,精度高。系統功能、指標達到了課題的預期要求、系統在硬件設計上充分考慮了可擴展性,經過一定的改造,可以增加功能。本文設計主要實現了簡易數字電壓表測量一路電壓的功能,詳細說明了從原理圖的設計、電路圖的仿真再到軟件的調試。 通過本次設計,我對單片機這門課有了進一步的了解。無論是在硬件連接方面還是在軟件編程方面。本次設計采用了AT89C51單片機芯片,與以往的單片機相比增加了許多新的功能,使其功能更為完善,應用領域也更為廣泛。設計中還用到了模/數轉換芯片ADC0809,以前在學單片機課程時只是對其理論知識有了初步的理解。通過這次設計,對它的工作原理有了更深的理解。在調試過程中遇到很多問題,硬件上的理論知識學得不夠扎實,對電路的仿真方面也不夠熟練。 總之這次電路的設計和仿真,基本上達到了設計的功能要求。在以后的實踐中,我將繼續努力學習電路設計方面的理論知識,并理論聯系實際,爭取在電路設計方面能有所提升。
(9)參考文獻 [1]、李朝青,單片機原理及接口技術,北京航空航天超大型出版社。 [2]、王賢勇,趙傳申,單片機原理與接口技術應用教程,清華大學出版社
(10)附錄:A、設計電路圖(原理圖、PCB圖) file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image019.gif B、程序(要求有文字注釋) 程序代碼
LED_0 EQU30H LED_1 EQU31H LED_2 EQU 32H ADC EQU 35H CLOCK BIT P2.4 ST BIT P2.5 EOC BIT P2.6 OE BIT P2.7 ORG 00H AJMP START ORG 0BH LJMP INT_T0 START: MOV LED_0, #00H MOV P2, #0FFH MOV LED_1, #00H MOV LED_2, #00H MOV DPTR, #TABLE MOV TMOD, #02H MOV TH0, #245H MOV TL0, #00H MOV IE, #82H SETB TR0 WAIT: CLRST SETB STH CLR ST JNB EOC, $ SETB OE MOV ADC, P1 CLR OE MOV A, ADC MOV B, #51 DIV AB MOV LED_2, A MOV A, B MOV B, #5 DIV AB MOV LED_1, A MOV LED_0, B LCALL DISP SJMP WAIT INT_T0:CPL, CLOCK RETI DISP: MOVA, LED_0 MOVCA, @A+DPTR CLRP2.3 MOV P0, A LCALL DELAY SETB P2.3 MOV A, LED_1 MOVC A,@A+DPTR CLR P2.2 MOV P0, A LCALL DELAY SETB P2.2 MOV A, LED_2 MOVC A, @A+DPTRL CLR P2.1 ORL A, #80H MOV P0, A LCALL DELAY SETB P2.1 RET DELAY: MOVR6, #10 D1: MOV R7, #250 DJNZ R7, $ DJNZ R6, D1 RET TABLE: DB 3FH, 06H, 5BH, 4FH, 66H DB 6DH, 7DH, 07H, 7FH, 6FH END
|