1 系統整體設計思路及方案1.1 設計要求⑴以AT89C51單片機為核心器件,組成一個簡單的直流數字電壓表。
⑵能夠測量0-5V之間的直流電壓值。
⑶電壓顯示用4位一體的LED數碼管顯示,盡量使用較少的元器件。
1.2 設計思路⑴根據設計要求,選擇AT89C51單片機為核心控制器件。
⑵A/D轉換采用ADC0808實現,與單片機接口為P0口和P3口的高四位引腳。
⑶電壓顯示采用4位一體的LED數碼管。
⑷LED數碼的段碼輸入,由并行端口P1產生:位碼輸入,用并行端口P2高四位產生。
1.3 設計方案硬件電路設計由5個部分組成;A/D轉換電路,AT89C51單片機系統,LED顯示系統、時鐘電路、測量電壓輸入電路。
2 硬件電路元件分析與設計2.1 單片機系統
1.002.jpg (1.12 KB, 下載次數: 100)
下載附件
2017-4-4 16:42 上傳
1.003.jpg (18.04 KB, 下載次數: 105)
下載附件
2017-4-4 16:42 上傳
AT89C51功能性能:與MCS-51成品指令系統完全兼容;4KB可編程閃速存儲器;全靜態工作:0-24MHz;128*8B內部RAM;4個位可編程I/O口線;2個16位定時/計數器;5個中斷源;2個串行通道;片內振蕩器和掉電模式。如下圖 2‑1所示。
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口:這組引腳的第一功能和其余三個端口的第一功能相同,第二功能為控制功能,每個引腳并不完全相同。
Vcc為+5V電源線,Vss接地。ALE:地址鎖存允許線,配合P0口的第二功能使用,在訪問外部存儲器時,89C51的CPU在P0.0-P0.7引腳線去傳送隨后而來的片外存儲器讀/寫數據。在不訪問片外存儲器時,89C51自動在ALE線上輸出頻率為1/6振蕩器頻率的脈沖序列。該脈沖序列可以作為外部時鐘源或定時脈沖使用。EA:片外存儲器訪問選擇線,可以控制89C51使用片內ROM或使用片外ROM,若EA=0,則允許使用片內ROM,若EA=1,則只使用片外ROM。PSEN:片外ROM的選通線,在訪問片外ROM時,89C51自動在/PSEN線上產生一個負脈沖,作為片外ROM芯片的讀選通信號。RST:復位線,可以使89C51處于復位(即初始化)工作狀態。通常89C51復位有自動上電復位和人工按鍵復位兩種。XTAL1和XTAL2:片內振蕩電路輸入線,這兩個端子用來外接石英晶體和微調電容,即用來連接89C51片內OSC(振蕩器)的定時反饋回路。
2.2 ADC0808芯片
1.004.jpg (14.82 KB, 下載次數: 84)
下載附件
2017-4-4 16:42 上傳
ADC0808芯片有28條引腳,采用雙列直插式封裝,如下錯誤!未找到引用源。所示。
1.005.jpg (1.17 KB, 下載次數: 78)
下載附件
2017-4-4 16:42 上傳
下面說明各個引腳功能: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轉換已結束,數字量已鎖入三態輸出鎖存器。OUT1-OUT8:數字量輸出端,OUT8為高位。OE:OE為輸出允許端,高電平能使D1-D8引腳上輸出轉換后的數字量。VREF+、VREF-:參考電壓輸入量,給電阻階梯網絡供給標準電壓。CLOCK:時鐘輸入端2.2.2ADC0808工作流程ADC0808的工作流程為:(1)輸入3位地址,并使ALE=1,將地址存入地址鎖存器中,經地址譯碼器從8路模擬通道中選通1路模擬量送給比較器。(2)送START一高脈沖,START的上升沿使逐次寄存器復位,下降沿啟動A/D轉換,并使EOC信號為低電平。(3)當轉換結束時,轉換的結果送入到輸出三態鎖存器中,并使EOC信號回到高電平,通知CPU已轉換結束。(4)當CPU執行一讀數據指令時,使OE為高電平,則從輸出端OUT1-OUT8讀出數據。
2.3 LED顯示系統設計2.3.1 LED顯示器的選擇在應用系統中,設計要求不同,使用的LED顯示器的位數也不同,因此就生產了位數,尺寸,型號不同的LED顯示器供選擇,在本設計中,選擇4位一體的數碼型LED顯示器,即7SEG-MPX4-CC-BLUE。本系統中前一位顯示電壓的整數位,即個位,后兩位顯示電壓的小數位。7SEG-MPX4-CC-BLUE是一個共陰極接法的4位LED數碼顯示管,其中a,b,c,e,f,g為4位LED各段的公共輸出端,1、2、3、4分別是每一位的位數選端,dp是小數點引出端。本電路中P1口控制段選信號,P2.4-P2.7控制位選信號。如圖 2‑3所示。
2.3.2 LED譯碼方式譯碼方式是指由顯示字符轉換得到對應的字段碼的方式,對于LED數碼管顯示器,通常的譯碼方式有硬件譯碼和軟件譯碼方式兩種。硬件譯碼是指利用專門的硬件電路來實現顯示字符碼的轉換。軟件譯碼就是編寫軟件譯碼程序,通過譯碼程序來得到要顯示的字符的字段碼,譯碼程序通常為查表程序。本設計系統中為了簡化硬件線路設計,LED譯碼采用軟件編程來實現。由于本設計采用的是共陰極LED,其對應的字符和字段碼如下表格 1所示。
1.006.jpg (1.28 KB, 下載次數: 101)
下載附件
2017-4-4 16:42 上傳
1.007.jpg (12.35 KB, 下載次數: 134)
下載附件
2017-4-4 16:42 上傳
表格 1
2.4 雙D正沿觸發器
1.008.jpg (9.71 KB, 下載次數: 78)
下載附件
2017-4-4 16:42 上傳
1.009.jpg (1.2 KB, 下載次數: 93)
下載附件
2017-4-4 16:42 上傳
74LS74這個集成塊是一個雙D觸發器,其功能比較的多,可用作寄存器,移位寄存器,振蕩器,單穩態,分頻計數器等功能。74LS74是個雙D觸發器,把其中的一個D觸發器的Q非輸出端接到D輸入端,時鐘信號輸入端CLOCK接時鐘輸入信號,這樣每來一次CLOCK脈沖,D觸發器的狀態就會翻轉一次,每兩次CLOCK脈沖就會使D觸發器輸出一個完整的正方波,這就實現了2分頻。把同一片74LS74上的兩路D觸發器串聯起來,其中一個D觸發器的輸出作為另一個D觸發器的時鐘信號,還可以實現4分頻。如下圖圖 2‑4所示。
2.5 總體電路設計
1.010.jpg (18.71 KB, 下載次數: 93)
下載附件
2017-4-4 16:42 上傳
1.011.jpg (14.57 KB, 下載次數: 105)
下載附件
2017-4-4 16:42 上傳
經過以上的設計過程,可設計出基于單片機的簡易數字直流電壓表硬件電路;原理圖,仿真圖以及硬件電路圖如圖 2‑5所示。
1.012.jpg (34.11 KB, 下載次數: 113)
下載附件
2017-4-4 16:42 上傳
圖 2‑5
此電路的工作原理是:+5V模擬電壓信號通過變阻器VR1分壓后由ADC08008的IN0通道進入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低電平),經過模/數轉換后,產生相應的數字量經過其輸出通道D0-D7傳送給AT89C51芯片的P0口,AT89C51負責把接收到的數字量經過數據處理,產生正確的7段數碼管的顯示段碼傳送給四位LED,同時它還通過其四位I/O口P2.4、P2.5、P2.6、P2.7產生位選信號控制數碼管的亮滅。此外,AT89C51還控制ADC0808的工作。其中,單片機AT89C51通過定時器中斷從P3.3輸出方波,接到ADC0808的CLOCK,P3.2發正脈沖啟動A/D轉換,P3.0檢測A/D轉換是否完成,轉換完成后,P3.1置高從P1口讀取轉換結果送給LED顯示出來。簡易數字直流電壓表的硬件電路已經設計完成,就可以選取相應的芯片和元器件,利用Proteus軟件繪制出硬件的原理,并仔細地檢查修改,直至形成完善的硬件原理圖。但要真正實現電路對電壓的測量和顯示的功能,還需要有相應的軟件配合,才能達到設計要求。
2.6 程序設計總方案根據模塊的劃分原則,將該程序劃分初始化模塊,A/D轉換子程序和顯示子程序。初始化中主要對AT89C51,ADC0808的管腳和數碼管的位選級所用的內存單元進行初始化設置。準備工作做好后啟動ADC0808對INO腳輸入進的0-5V電壓模擬進行數據采集并轉化成相對應的0-255十進制數字量。在數據處理子程序中,編寫算法將0-255十進制數字量轉化成0-5V的數據,輸出到顯示子程序進行顯示。三個程序模塊構成了整個系統軟件的主程序,
2.7 系統子程序設計2.7.1 初始化程序所謂初始化,是對將要用到的MCS_51系列單片機內部部件或擴展芯片進行初始工作狀態設定,初始化子程序的主要工作是設置定時器的工作模式,初值預置,開中斷和打開定時器等。流程圖如圖 3‑3所示。
2.7.2 A/D轉換子程序啟動ADC0808對模擬量輸入信號進行轉換,通過判斷EOC(P3.2引腳)來確定轉換是否完成若EOC為0,則繼續等待;若EOC為1,則把OE置位,將轉換完成的數據存儲在dispbuf。流程圖如圖 3‑1所示。
2.7.3 顯示子程序顯示子程序采用動態掃描法實現四位數碼管的數值顯示,在定時器中斷里實現。測量所得A/D轉換數據放在dispbuf數組中,測量數據在顯示時需轉換成10進制BCD碼。電路中P1口控制段選信號,P2.4-P2.7控制位選信號。流程圖如圖 3‑2所示。
3 仿真調試3.1 軟件調試
1.013.jpg (10.31 KB, 下載次數: 131)
下載附件
2017-4-4 16:42 上傳
1.014.jpg (1.17 KB, 下載次數: 110)
下載附件
2017-4-4 16:42 上傳
1.015.jpg (12.08 KB, 下載次數: 136)
下載附件
2017-4-4 16:42 上傳
1.016.jpg (1.22 KB, 下載次數: 116)
下載附件
2017-4-4 16:42 上傳
1.017.jpg (13.1 KB, 下載次數: 99)
下載附件
2017-4-4 16:42 上傳
1.018.jpg (1.16 KB, 下載次數: 84)
下載附件
2017-4-4 16:42 上傳
軟件調試的主要任務是排查錯誤,錯誤主要包括邏輯和功能錯誤,這些錯誤有些是顯性的,而有些是隱形的,可以通過仿真開發系統發現逐步改正。Proteus軟件可以對基于微控制器的設計連同所有的周圍電子器件一起仿真,用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態外設模型來對設計進行交互仿真。Proteus支持的微處理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成單片機系統原理圖電路繪制、PCB設計,更為顯著點的特點是可以與Visions4工具軟件結合進行編程仿真調試。本系統的調試主要以軟件為主,其中,系統電路圖的繪制和仿真我采用的是Proteus軟件,硬件電路繪制用的是Altium Designer15,而程序方面,采用的是C語言,用Keil軟件將程序寫入單片機。
3.2 顯示結果及誤差分析3.2.1
1.019.jpg (24.08 KB, 下載次數: 81)
下載附件
2017-4-4 16:42 上傳
顯示結果
3.2.2 誤差分析通過以上仿真測量結果可得到簡易數字電壓表與“標準”數字電壓表對比測試表,
由于單片機AT89C51為8位處理器,當輸入電壓為5.00V時,ADC0808輸出數據值為255(FFH),因此單片機最高的數值分辨率為0.0196V(5/255)。這就決定了電壓表的最高分辨率只能到0.0196V,從上表可看到,測試電壓一般以0.00-0.01V的幅度變化。這可能是由于程序中轉化顯示數據的時候有些偏差。并且由于實際值與測量值的顯示精度有所不同,所以產生了誤差。
4 總結經過一段時間的努力,電子課程設計——基于單片機的LED數字電壓表基本完成。但設計中的不足之處仍然存在。這次設計是我第一次設計電路,并用Proteus實現了仿真。在這過程中,我對電路設計,單片機的使用等都有了新的認識。通過這次設計學會了Altiumdesigner,Proteus和Keil軟件的使用方法,掌握了從系統的需要、方案的設計、功能模塊的劃分、原理圖的設計和電路圖的仿真的設計流程,積累了不少經驗。基于單片機的數字電壓表使用性強、結構簡單、成本低、外接元件少。在實際應用工作應能好,測量電壓準確,精度高。系統功能、指標達到了課題的預期要求、系統在硬件設計上充分考慮了可擴展性,經過一定的改造,可以增加功能。本文設計主要實現了簡易數字電壓表測量一路電壓的功能,詳細說明了從原理圖的設計、電路圖的仿真再到軟件的調試。總之這次電路的設計和仿真,基本上達到了設計的功能要求。在以后的實踐中,我將繼續努力學習電路設計方面的理論知識,并理論聯系實際,爭取在電路設計方面能有所提升