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