(1)利用所學單片機的理論知識進行軟硬件整體設計,鍛煉理論聯系實際、提高我們的綜合應用能力。
(2)我們這次的設計是以單片機為基礎,設計并開發統輸出多種波形(正弦波、三角波、鋸齒波、方波、梯形波)且頻率,幅度可變的函數發生器。
(3)掌握各個接口芯片(如 0832 等)的功質特性及接口方法,并能運用其實現一個簡單的微機應用系統功能器件。
(4) 在平時的學習中,我們所學的知識大都是課本上的,在機房的練習大家也都是分散的對各個章節的內容進行練習,因此,缺乏一種系統的設計鍛練。在所學結束以后,這樣的設計十分有助于知識系統的總結到一起。
(5) 通過這幾個波形進行組合形成了一個函數發生器,使得我對系統的整個框架的設計有了一個很好的鍛煉,這不僅有助于大家找到自己感興趣的項目,更可以鍛練大家微機知識的應用。
1.2 設計內容(1)利用設計一個能產生正弦波、方波、三角波、梯形波、鋸齒波的波形發生器。(2)以單片機為核心,利用數模轉換芯片0832 完成數模轉換。 (3)以按鍵來選擇要產生的波形。(4)用示波器觀察波形。
第 2 章 系統總體設計
2.1 系統基本模塊設計與論證
2.1.1 信號發生模塊采用單片機和 DAC0832 數模轉換器生成波形。通過編程的方法來控制輸入到數模轉換電路的數字量,從而控制輸出信號的波形和頻率。它的特點是價格低、設計簡單, 在低頻范圍內穩定性好、操作方便、體積小、耗電少。
2.1.2 輸出顯示模塊用 LCD 液晶進行顯示。LCD 由于其顯示清晰,顯示內容豐富,顯示信息量大,使用方便,顯示快速而得到了廣泛的應用。
2.1.3 鍵盤模塊采用獨立式按鍵電路,每個按鍵單獨占有一根 I/O 接口線,每個 I/O 口的工作狀態互不影響,此類鍵盤采用端口直接掃描方式。缺點為當按鍵較多時占用單片機的 I/O 口數目較多,優點為電路設計簡單,且編程相對比較容易。
2.1.4 電路設計最終方案本系統包括主控模塊,顯示模塊,信號發生模塊,鍵盤模塊,運放模塊,綜上各方案所述,確定最終設計方案為:采用AT89C51 作為主控制系統,LCD 液晶顯示作為顯示部分,獨立式按鍵作為鍵盤模塊,數模轉換芯片 DAC0832 作為信號發生模塊,LM324 作為電流/電壓轉換放大模塊。
2.2 系統原理及總體結構圖
2.2.1 系統總體結構圖根據上述電路設計的最終方案,系統總體設計結構如圖 1 所示。
圖 1 系統總體結構圖
3.1.1 數模轉換電路數模轉換電路是本設計的關鍵電路,它決定著將數字信號轉變為模擬信號,從而得到各種所需要的波形。 1. 數模轉換器的工作原理數模轉換器可將數字量信號轉換成與此數值成正比的模擬量信號。需要轉換的數字量由一個二進制數字表示,每位二進制數字都有一定的權,在轉換中,應將二進制數的每一位按照權的大小轉換成相應的模擬量輸出分量,然后將各個輸出分量疊加,總和就是與數字量成正比的模擬量數值。 上述的 D/A 轉換,常用如圖 5 所示的倒 T 形解碼網絡加以實現。 
圖5 倒T形電阻網絡D/A轉換器 電路設計如圖 5 所示,包括由 R-2R 組成的電阻網絡、模擬電子開關和集成運算放大器。 對于電阻網絡,無論從哪個 R-2R 節點看,等效電阻都是 R,因此,從參考電壓端輸入的電流為: IR=VREF/R 根據分流公式,各支路電流為: I7=I/21I6 =I/22I5 =I/23I4 =I/24I3 =I/25I2 =I/26I1 =I/27I0 =I/28 于是,經過運算放大器輸出的模擬電壓 VO 為: VO = - RF∑Ii= -Rfb VREF/R×28(D7×27 +D6×26 +D5×25+ D4×24+D3×23+D2×22+D1×21+D0×20) 其中 VREF 是進行 D/A 轉換的系統提供的參考電壓,Rfb 為集成運算放大器的反饋電阻,D7 ~ D0 取值為 0 或 1,0 表示切換開關與地相連,1 表示與參考電壓相連。通過上述電路,即完成了二進制數字信號到模擬電壓信號的轉換。 2. 數模轉換器的主要技術指標(1) 分辨率 分辨率指輸入給 D/A 轉換器的單位數字量引起的模擬量輸出的變化,通常定義為輸
出滿刻度值與 2n 之比(n 為 D/A 轉換器的二進制位數)。二進制位數越多,分辨率越高, 即 D/A 轉換器對輸入量變化的敏感程度越高。使用時,應根據對 D/A 轉換器分辨率的需要來選定 D/A 轉換器的位數。 (2) 相對精度 相對精度是指在滿刻度已經校準的前提下,在整個刻度范圍內,對應于任一數碼的模擬量輸出與它的理論值之差。通常用偏差幾個 LSB 來表示。 (3) 建立時間 建立時間是描述 D/A 轉換器轉換快慢的一個參數,用于表明轉換時間或轉換速度。其值為從輸入數字量到輸出達到總值誤差±(1/2)LSB(最低有效位)時所需的時間。電流輸出的轉換時間較短,而電壓輸出的轉換器,由于要加上完成 I-V 轉換的運算放大器的延遲時間,因此轉換時間要長一些。快速 D/A 轉換器的轉換時間可控制在 1us 以下。 (4) 線性度 通常用非線性誤差的大小表示 D/A 轉換器的線性度,輸入輸出特性的偏差與滿刻度輸出之比的百分數表示非線性誤差。一定溫度下的最大非線性誤差一般為 0.01%~0.03%。 3. DAC0832 數模轉換芯片主要特性與結構 半導體公司生產的具有 2 個數據寄存器的 8 位分辨率的D/A 轉換芯片。此芯片與微處理器完全兼容,并且價格低廉,接口簡單,轉換控制容易, 在單片機應用系統中得到了廣泛的應用。 1. DAC0832 的主要特性 l 分辨率為 8 位; l 轉換時間為 1us; l 可單緩沖、雙緩沖或者直接數字轉換; l 只需在滿量程下調整其線性度; l 邏輯電平輸入與 TTL 兼容; l 單一電源供電(+5V~+15V); l 基準電壓的范圍為±10V。 2. DAC0832 的內部結構 DAC0832 的內部結構框圖如圖 6 所示。它由 8 位輸入鎖存器、8 位 DAC 寄存器、8 位 D/A 轉換器及轉換控制電路構成,通過兩個輸入寄存器構成兩級數據輸入鎖存。
圖 6 DAC0832 內部邏輯框圖 使用時,數據輸入可以采用兩級鎖存(雙鎖存)、單級鎖存(一級鎖存,一級直通方式)或直接輸入(兩級直通)形式。上圖中,2個與門電路組成寄存器輸出控制邏輯電路, 該邏輯電路的功能是進行數據鎖存控制。 3. DAC0832 的引腳功能 DI0~DI7:8 位數據輸入線。 — — CS:片選信號輸入,低電平有效。 ILE:數據鎖存允許控制信號,高電平有效。 — — WR1:輸入寄存器寫選通輸入信號,低 平有效。
圖 7 DAC0832 的引腳 — — WR2:DAC 寄存器寫選通輸入信號,低電平有效。 :數據傳送控制信號,低電平有效。上述兩個信號控制 DAC 寄存器是否為數據直 — — — — — — — — — — — — 通方式。當 WR2=0 和XFER=0 時,為 DAC 寄存器直通方式;當 WR2=1 或XFER=1 時,
為 DAC 寄存器鎖存方式。 IOUT1、IOUT2:電流輸出,IOUT1+IOUT2=常數。 Rfb:反饋電阻輸入端。內部接反饋電阻,外部通過該引腳接運放輸出端。為了取得電壓輸出,需要在輸出端接運算放大器,Rfb 即為運算放大器的反饋電阻端。 Vref:基準電壓,其值為-10V~+10V。AGND:模擬信號地。 DGND:數字信號地,為工作電源地和數字邏輯地,可在基準電源處進行單點共地。VCC:電源輸入端,其值為+5V~+15V。 4. DAC0832 芯片與單片機的接口— — — — — — 采用直通工作方式,當 DAC0832 芯片的片選信號CS、寫信號 WR1、WR2 及傳送 — — — — 控制信號XFER的引腳全部接地,允許輸入鎖存信號 ILE 引腳+5V 時,DAC0832 芯片就 處于直通工作方式,數字量一旦輸入,就直接進入 DAC 寄存器,進行 D/A 轉換,從輸出端得到轉換的模擬量。
3.1.2 電流/電壓轉換放大電路
由于從 DAC0832 轉換出來的模擬信號為電流信號,為了方便觀測輸出信號的特征, 特將 DAC0832 輸出的信號經過電流/電壓轉換放大電路轉變為電壓信號。本設計中使用的運放為 LM324。LM324 運算放大器是價格便宜的帶差動輸入功能的四運算放大器。其引腳圖如圖 8 所示。
圖 8 LM324 引腳 LM324 的特點: 1.短路保護輸出 2.真差動輸入級 3.可單電源工作:3V-32V 4.低偏置電流:最大 100nA(LM324A)
5.每封裝含四個運算放大器。 6.具有內部補償的功能。 7.共模范圍擴展到負電源 8.行業標準的引腳排列 9.輸入端具有靜電保護功能 DAC0832 輸出信號經運放電路轉變為電壓后有兩種輸出方式。一種為單極性輸出方式。此方式中,DAC0832 通過使用一片LM324 運算放大器將從單片機輸入的數字量 Din 轉換為電壓輸出,其輸出電壓為 Uout=Din/28 *(-VREF)。當 VREF=5V 時,Uout的輸出范圍為-5V~0V。另一種為雙極性輸出方式。本設計中采用雙極性輸出方式,如圖 9 所示。其雙極性輸出原理為:因為 U1為-5V~0V,根據電流環路定理有 R 2R 2R
即:Uout=-VREF-2U1
所以當 VREF=5V,而 U1 為-5V~ 0V 輸出時,Uout 的輸出為-5~+5V,即實現了雙極性輸出。
圖 9 DAC0832 和兩片 LM324 實現雙極性輸出
3.1.3 液晶顯示電路顯示模塊主要是用來顯示輸出信號的波形類型和頻率大小,本設計中以 LM016L 作為顯示器件。LM016L 智能型顯示模塊是一種低功耗、低價值、低損耗的顯示器件,它不但可以顯示各式各樣的字符、漢字和圖形,同時具有可編程能力,且與單片機接口方便。 1. 引腳功能說明
LCD LM016L 采用標準的14腳接口,各引腳接口說明如下: 第1腳:VSS 為地電源。 第2腳:VDD 接5V 正電源。 第3腳:VEE 為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K 的電位器調整對比度。 第4腳:RS 為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。第5腳:R/W 為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當 RS 和 R/W 共同為低電平時可以寫入指令或者顯示地址,當 RS 為低電平 R/W 為高電平時可以 讀忙信號,當 RS 為高電平 R/W 為低電平時可以寫入數據。 第6腳:E 端為使能端,當 E 端由高電平跳變成低電平時,液晶模塊執行命令。第7~14腳:D0~D7為8位雙向數據線。 2. 基本操作時序表讀寫操作時序如圖10和圖11所示。 

圖 10 讀操作時序圖 11 寫操作時序 3. LCD LM016L 的 RAM 地址映射及標準字庫表液晶顯示模塊是一個慢顯示器件,所以在執行每條指令之前一定要確認模塊的忙標
志為低電平,表示不忙,否則此指令失效。圖12是016的內部顯示地址。

圖 12 1602LCD 內部顯示地址 016液晶模塊內部的字符發生存儲器(CGROM)已經存儲了160個不同的點陣字符圖形。 
圖 13 字符代碼與圖形對應圖 4. 液晶 LM016L 顯示電路圖本設計中,液晶顯示電路與單片機的連接如圖 14 所示。
圖 14 液晶顯示電路
3.1.4 鍵盤電路該子系統是5 個獨立鍵盤和一個2 輸入與門組成,其中與門輸出端連接單片機的P3.2 口以便形成外部中斷。5 個按鍵分別連接單片機的 P2.0~P2.4 口。2 輸入與門一引腳與K1 按鍵相連,另一引腳接高電平。當 K1 按下時,INT0 為低電平,可知外部中斷到了, 系統執行中斷程序。當 K2~K5 按鍵某一個按下時,對應的 P2.1~P2.4 口中某個為低電平, 系統可以感知此按鍵按下,從而執行相應的程序。每個按鍵的功能如表 2 所示。 表 2 按鍵功能表
按鍵電路的電路圖如圖 15 所示。 圖 15 按鍵電路圖
第 4 章 系統軟件設計
系統軟件主要是用來控制信號發生器系統按照設計的邏輯進行運行。在軟件設計上, 根據功能分成了多個模塊編程,主要包括:主程序模塊、四種不同的波形產生模塊、按鍵處理模塊、外部中斷模塊、液晶顯示模塊等。
4.1 系統主程序流程框圖系統主程序流程圖如圖 16 所示,源程序見附件。 
圖 16 系統主程序流程圖
4.2 信號產生子程序本系統采用編程的方法,來輸出四種不同的波形即正弦波、矩形波、三角波、鋸齒波。各種波形的產生方法如下。
4.2.1 正弦波發生子程序正弦波的產生比較特殊,它不能由單片機直接產生,只能由如圖 17 所示的階梯波來向正弦波逼近。很顯然,在一個周期內階梯波的階梯數目越多,單片機輸出的波形也就
越接近正弦波。 
圖 17 正弦波信號的產生 先假定正弦波的振幅是 2.56 V,則波谷對應的數字量為最小值 00H,波峰對應的數字量為最大值 FFH。將正弦波的第一個周期的波形按角度均分為若干等份,并計算出各點對應的電壓值,電壓值計算方法:Vx=2.5·(1+sinθ),因為 00H~FFH 對應的數字量為0~255,所以根據算出的電壓就可直接寫出各點所對應的數字量。單片機將一個周期的數字量存入一定的存儲區域中,然后依次循環取出這些數字量,并送 D/A 電路轉換成階梯波,即近似的正弦波輸出。圖 18 為正弦波產生的流程圖。 
圖 18 正弦波產生的流程圖
4.2.2 矩形波發生子程序如圖 19 所示,矩形波的實現比較簡單。首先定義一個無符號字符型變量 i=0,使自變量 i 不斷的自動加 1,若 i 的值小于squa_num,將 P0 口賦值為 0xFF;若 i 的值大于squa_num,則將 P0 口賦值為 0x00。當 i 自加到 256 后又自動變為 0,以此循環,即可得
到矩形波。當 squa_num=128 時,此時輸出的為方波。調節 squa_num 的大小,即可實現矩形波占空比的調節;調節延時時間的大小,即可實現矩形波頻率的改變。

圖 19 矩形波產生流程圖
4.2.3 三角波發生子程序 三角波中的斜線用一個個小臺階來逼近,當臺階間隔很小時,波形基本上近似一直線。首先定義一個無符號字符型變量i=0,使自變量 i 不斷的自動加 1,若 i 的值小于 128, 將 P0 口賦值為 i;若 i 的值大于 128,則將 P0 口賦值為 256-i。當 i 自加到 256 后又自動變為 0,以此循環,從而 P0 口實現了周期性的數字量變換,在經過數模轉換后轉變成模擬信號,經運算放大電路后就得到了周期性的三角波。三角波產生流程圖如圖 20 所示。
圖 20 三角波發生流程圖
4.2.4 鋸齒波發生子程序鋸齒波的實現過程與三角波類似,也是定義一個變量 i=0,并使 P0=i,自變量 i 不斷的自動加 1,直到加到 255,然后 i 又可以自動歸為 0,再不斷的重復上過程。在此過程中,P0 口的值也隨著 i 一樣變化,經數模轉換 DAC0832 后,周期性逐一變化的數字量就轉換為鋸齒波輸出了。通過調節 P0 口每相鄰兩個值之間的延遲時間,就可以改變鋸齒波的頻率。圖 21 為鋸齒波發生流程圖。 
圖 21 鋸齒波發生流程圖
4.3 按鍵處理子程序
在本設計中,主要是通過按鍵來調節輸出波形的類型、頻率的大小及矩形波的占空比,采用程序控制掃描方式,時刻監視著有無按鍵按下。為了能夠更準確的判斷按鍵的情況,一旦有按鍵按下時,先延時去除按鍵的抖動,再判斷是哪個按鍵按下,從而單片機對應的執行相應的程序。圖 22 為按鍵處理流程圖。
圖 22 按鍵處理流程圖
4.4 液晶顯示子程序
LCD LM016L 的顯示函數很簡單,只要嚴格按照其時序圖操作,并結合其相關指令集,寫好 LCD 的初始化程序,清屏程序,寫指令程序,寫數據程序,讀數據程序等一系列驅動程序,即可完成 LCD 的所有顯示需要。在本設計中,由于需要顯示的內容比較多, 且有些需要重復顯示,有些只要顯示一次,故只畫出液晶顯示的基本流程,如圖 23 所示。 圖 23 液晶顯示流程圖
4.5 INT0 中斷子程序中斷子程序是用來控制輸出波形的選擇及將輸出波形的類型在 LCD 液晶顯示屏上顯示出來。當波形選擇按鍵 K1 按下時,進入中斷程序中,此時波形選擇標識 WaveChoice 加 1,LCD 液晶顯示屏上顯示出相應的波形類型。中斷結束后,主程序中根據WaveChoice的值輸出相應的波形。圖 24 為 INT0 中斷流程圖。
圖 24 INT0 中斷流程圖
第 5 章 系統調試
5.1 系統調試過程1. 編譯、連接項目,形成目標文件 打開 Keil 新建工程文件,然后添加源程序文件,保存時把文件后綴名改成“.c”,再直接導入新建的工程中。 把源程序全部錄入后,先粗略的檢查一遍,主要改正明顯的各種錯誤,這樣可以減少之后的修改工作量。接著 Options forTarget “Target 1” ,點擊 Output ,勾選 Create Hex 那個選項,生成可執行的文件。然后點擊 Project 菜單下的 Built Target 命令然后再進行編譯、連接,形成目標文件。編譯、連接用 Project 菜單下的 Built Target 命令(或快捷鍵 F7),也可以直接點擊工具欄中相對應的圖標。 2. 運行調試 在 Proteus 軟件中先從元件庫中加載要使用的那些元件,然后把元件放在圖紙上一個一個的接線,盡量不讓線交錯,便于查看、分析,有必要時,使用接線標號法。完成所有元器件的接線后,在單片機上右擊選 Edit Properties,在 Program file 那一行右側點擊, 然后選擇前面生成的以“.hex”為后綴名的文件,為單片機 AT89C51 添加可執行文件。然后點擊左下角的相關按鍵,開始進行仿真。 3.源程序(部分重要代碼)
5.2 系統仿真結果經以上調試,確認程序沒有問題時,加載到 Proteus 軟件中進行仿真,所得仿真結果
如下。 (1)剛開始運行程序,沒有按鍵操作時,仿真結果如圖 25 所示。
圖 25 仿真初始化結果 (2)當按下進行波形四種波形選擇時,每種波形的仿真結果如下。
頻率增大后 圖 26 正弦波
頻率增大后
圖 27 方波
頻率增加后 圖 28 三角波
經過為期兩周的單片機綜合應用實踐的學習深有體會,主要有以下幾個方面: (1) 通過查閱大量資料使自己對信號發生器的研究現狀、原理、工作方式等的基本 概念及技術發展有了更好的理解。 (2) 針對設計的任務和要求,確定信號發生器的設計方案,并逐步來實現。 (3) 本系統使用了單片機作為主控制器,直接由軟件產生不同波形信號的輸出, 因此在如何編寫程序方面下了很大的功夫,也收獲了很多知識。
附錄A 電路原理圖
本人初學,僅供參考,存在錯誤和不足之處,請大家回帖多多指教,不勝感激.切勿照搬
以上圖文的Word格式文檔下載(word文檔內容和本網頁上的一模一樣,方便大家保存):
word文檔:
word文檔.docx
(1.81 MB, 下載次數: 10)
2023-5-18 20:20 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
程序:http://www.zg4o1577.cn/bbs/dpj-229095-1.html
仿真:無
|