(1)利用設計一個能產生正弦波、方波、三角波、梯形波、鋸齒波的波形發生器。(2)以單片機為核心,利用數模轉換芯片0832 完成數模轉換。
(3)以按鍵來選擇要產生的波形。(4)用示波器觀察波形。
采用單片機和 DAC0832 數模轉換器生成波形。通過編程的方法來控制輸入到數模轉換電路的數字量,從而控制輸出信號的波形和頻率。它的特點是價格低、設計簡單, 在低頻范圍內穩定性好、操作方便、體積小、耗電少。
用 LCD 液晶進行顯示。LCD 由于其顯示清晰,顯示內容豐富,顯示信息量大,使用方便,顯示快速而得到了廣泛的應用。
采用獨立式按鍵電路,每個按鍵單獨占有一根 I/O 接口線,每個 I/O 口的工作狀態互不影響,此類鍵盤采用端口直接掃描方式。缺點為當按鍵較多時占用單片機的 I/O 口數目較多,優點為電路設計簡單,且編程相對比較容易。
本系統包括主控模塊,顯示模塊,信號發生模塊,鍵盤模塊,運放模塊,綜上各方案所述,確定最終設計方案為:采用AT89C51 作為主控制系統,LCD 液晶顯示作為顯示部分,獨立式按鍵作為鍵盤模塊,數模轉換芯片 DAC0832 作為信號發生模塊,LM324 作為電流/電壓轉換放大模塊。
數模轉換電路是本設計的關鍵電路,它決定著將數字信號轉變為模擬信號,從而得到各種所需要的波形。
1. 數模轉換器的工作原理數模轉換器可將數字量信號轉換成與此數值成正比的模擬量信號。需要轉換的數字量由一個二進制數字表示,每位二進制數字都有一定的權,在轉換中,應將二進制數的每一位按照權的大小轉換成相應的模擬量輸出分量,然后將各個輸出分量疊加,總和就是與數字量成正比的模擬量數值。
電路設計如圖 5 所示,包括由 R-2R 組成的電阻網絡、模擬電子開關和集成運算放大器。
對于電阻網絡,無論從哪個 R-2R 節點看,等效電阻都是 R,因此,從參考電壓端輸入的電流為: IR=VREF/R
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. 數模轉換器的主要技術指標出滿刻度值與 2n 之比(n 為 D/A 轉換器的二進制位數)。二進制位數越多,分辨率越高, 即 D/A 轉換器對輸入量變化的敏感程度越高。使用時,應根據對 D/A 轉換器分辨率的需要來選定 D/A 轉換器的位數。
相對精度是指在滿刻度已經校準的前提下,在整個刻度范圍內,對應于任一數碼的模擬量輸出與它的理論值之差。通常用偏差幾個 LSB 來表示。
建立時間是描述 D/A 轉換器轉換快慢的一個參數,用于表明轉換時間或轉換速度。其值為從輸入數字量到輸出達到總值誤差±(1/2)LSB(最低有效位)時所需的時間。電流輸出的轉換時間較短,而電壓輸出的轉換器,由于要加上完成 I-V 轉換的運算放大器的延遲時間,因此轉換時間要長一些。快速 D/A 轉換器的轉換時間可控制在 1us 以下。
通常用非線性誤差的大小表示 D/A 轉換器的線性度,輸入輸出特性的偏差與滿刻度輸出之比的百分數表示非線性誤差。一定溫度下的最大非線性誤差一般為 0.01%~0.03%。
半導體公司生產的具有 2 個數據寄存器的 8 位分辨率的D/A 轉換芯片。此芯片與微處理器完全兼容,并且價格低廉,接口簡單,轉換控制容易, 在單片機應用系統中得到了廣泛的應用。
DAC0832 的內部結構框圖如圖 6 所示。它由 8 位輸入鎖存器、8 位 DAC 寄存器、8 位 D/A 轉換器及轉換控制電路構成,通過兩個輸入寄存器構成兩級數據輸入鎖存。
使用時,數據輸入可以采用兩級鎖存(雙鎖存)、單級鎖存(一級鎖存,一級直通方式)或直接輸入(兩級直通)形式。上圖中,2個與門電路組成寄存器輸出控制邏輯電路, 該邏輯電路的功能是進行數據鎖存控制。
Rfb:反饋電阻輸入端。內部接反饋電阻,外部通過該引腳接運放輸出端。為了取得電壓輸出,需要在輸出端接運算放大器,Rfb 即為運算放大器的反饋電阻端。
Vref:基準電壓,其值為-10V~+10V。AGND:模擬信號地。
DGND:數字信號地,為工作電源地和數字邏輯地,可在基準電源處進行單點共地。VCC:電源輸入端,其值為+5V~+15V。
4. DAC0832 芯片與單片機的接口處于直通工作方式,數字量一旦輸入,就直接進入 DAC 寄存器,進行 D/A 轉換,從輸出端得到轉換的模擬量。
![]() |
DAC0832 輸出信號經運放電路轉變為電壓后有兩種輸出方式。一種為單極性輸出方式。此方式中,DAC0832 通過使用一片LM324 運算放大器將從單片機輸入的數字量 Din 轉換為電壓輸出,其輸出電壓為 Uout=Din/28 *(-VREF)。當 VREF=5V 時,Uout的輸出范圍為-5V~0V。另一種為雙極性輸出方式。本設計中采用雙極性輸出方式,如圖 9 所示。其雙極性輸出原理為:因為 U1為-5V~0V,根據電流環路定理有
所以當 VREF=5V,而 U1 為-5V~ 0V 輸出時,Uout 的輸出為-5~+5V,即實現了雙極性輸出。
顯示模塊主要是用來顯示輸出信號的波形類型和頻率大小,本設計中以 LM016L 作為顯示器件。LM016L 智能型顯示模塊是一種低功耗、低價值、低損耗的顯示器件,它不但可以顯示各式各樣的字符、漢字和圖形,同時具有可編程能力,且與單片機接口方便。
1. 引腳功能說明LCD LM016L 采用標準的14腳接口,各引腳接口說明如下: 第1腳:VSS 為地電源。
第3腳:VEE 為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K 的電位器調整對比度。
第4腳:RS 為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。第5腳:R/W 為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當 RS 和 R/W 共同為低電平時可以寫入指令或者顯示地址,當 RS 為低電平 R/W 為高電平時可以
第6腳:E 端為使能端,當 E 端由高電平跳變成低電平時,液晶模塊執行命令。第7~14腳:D0~D7為8位雙向數據線。
2. 基本操作時序表016液晶模塊內部的字符發生存儲器(CGROM)已經存儲了160個不同的點陣字符圖形。
該子系統是5 個獨立鍵盤和一個2 輸入與門組成,其中與門輸出端連接單片機的P3.2 口以便形成外部中斷。5 個按鍵分別連接單片機的 P2.0~P2.4 口。2 輸入與門一引腳與K1 按鍵相連,另一引腳接高電平。當 K1 按下時,INT0 為低電平,可知外部中斷到了, 系統執行中斷程序。當 K2~K5 按鍵某一個按下時,對應的 P2.1~P2.4 口中某個為低電平, 系統可以感知此按鍵按下,從而執行相應的程序。每個按鍵的功能如表 2 所示。
功能 | 屬性 |
波形選擇 | 自動復位 |
頻率升高 | 自動復位 |
頻率降低 | 自動復位 |
步進值 | 自動復位 |
系統軟件主要是用來控制信號發生器系統按照設計的邏輯進行運行。在軟件設計上, 根據功能分成了多個模塊編程,主要包括:主程序模塊、四種不同的波形產生模塊、按鍵處理模塊、外部中斷模塊、液晶顯示模塊等。
本系統采用編程的方法,來輸出四種不同的波形即正弦波、矩形波、三角波、鋸齒波。各種波形的產生方法如下。
正弦波的產生比較特殊,它不能由單片機直接產生,只能由如圖 17 所示的階梯波來向正弦波逼近。很顯然,在一個周期內階梯波的階梯數目越多,單片機輸出的波形也就
先假定正弦波的振幅是 2.56 V,則波谷對應的數字量為最小值 00H,波峰對應的數字量為最大值 FFH。將正弦波的第一個周期的波形按角度均分為若干等份,并計算出各點對應的電壓值,電壓值計算方法:Vx=2.5·(1+sinθ),因為 00H~FFH 對應的數字量為0~255,所以根據算出的電壓就可直接寫出各點所對應的數字量。單片機將一個周期的數字量存入一定的存儲區域中,然后依次循環取出這些數字量,并送 D/A 電路轉換成階梯波,即近似的正弦波輸出。圖 18 為正弦波產生的流程圖。
如圖 19 所示,矩形波的實現比較簡單。首先定義一個無符號字符型變量 i=0,使自變量 i 不斷的自動加 1,若 i 的值小于squa_num,將 P0 口賦值為 0xFF;若 i 的值大于squa_num,則將 P0 口賦值為 0x00。當 i 自加到 256 后又自動變為 0,以此循環,即可得
到矩形波。當 squa_num=128 時,此時輸出的為方波。調節 squa_num 的大小,即可實現矩形波占空比的調節;調節延時時間的大小,即可實現矩形波頻率的改變。
三角波中的斜線用一個個小臺階來逼近,當臺階間隔很小時,波形基本上近似一直線。首先定義一個無符號字符型變量i=0,使自變量 i 不斷的自動加 1,若 i 的值小于 128, 將 P0 口賦值為 i;若 i 的值大于 128,則將 P0 口賦值為 256-i。當 i 自加到 256 后又自動變為 0,以此循環,從而 P0 口實現了周期性的數字量變換,在經過數模轉換后轉變成模擬信號,經運算放大電路后就得到了周期性的三角波。三角波產生流程圖如圖 20 所示。
鋸齒波的實現過程與三角波類似,也是定義一個變量 i=0,并使 P0=i,自變量 i 不斷的自動加 1,直到加到 255,然后 i 又可以自動歸為 0,再不斷的重復上過程。在此過程中,P0 口的值也隨著 i 一樣變化,經數模轉換 DAC0832 后,周期性逐一變化的數字量就轉換為鋸齒波輸出了。通過調節 P0 口每相鄰兩個值之間的延遲時間,就可以改變鋸齒波的頻率。圖 21 為鋸齒波發生流程圖。
中斷子程序是用來控制輸出波形的選擇及將輸出波形的類型在 LCD 液晶顯示屏上顯示出來。當波形選擇按鍵 K1 按下時,進入中斷程序中,此時波形選擇標識 WaveChoice 加 1,LCD 液晶顯示屏上顯示出相應的波形類型。中斷結束后,主程序中根據WaveChoice的值輸出相應的波形。圖 24 為 INT0 中斷流程圖。
打開 Keil 新建工程文件,然后添加源程序文件,保存時把文件后綴名改成“.c”,再直接導入新建的工程中。
把源程序全部錄入后,先粗略的檢查一遍,主要改正明顯的各種錯誤,這樣可以減少之后的修改工作量。接著 Options forTarget “Target 1” ,點擊 Output ,勾選 Create Hex 那個選項,生成可執行的文件。然后點擊 Project 菜單下的 Built Target 命令然后再進行編譯、連接,形成目標文件。編譯、連接用 Project 菜單下的 Built Target 命令(或快捷鍵 F7),也可以直接點擊工具欄中相對應的圖標。
在 Proteus 軟件中先從元件庫中加載要使用的那些元件,然后把元件放在圖紙上一個一個的接線,盡量不讓線交錯,便于查看、分析,有必要時,使用接線標號法。完成所有元器件的接線后,在單片機上右擊選 Edit Properties,在 Program file 那一行右側點擊, 然后選擇前面生成的以“.hex”為后綴名的文件,為單片機 AT89C51 添加可執行文件。然后點擊左下角的相關按鍵,開始進行仿真。
(1) 通過查閱大量資料使自己對信號發生器的研究現狀、原理、工作方式等的基本 概念及技術發展有了更好的理解。
(3) 本系統使用了單片機作為主控制器,直接由軟件產生不同波形信號的輸出, 因此在如何編寫程序方面下了很大的功夫,也收獲了很多知識。
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |