摘要
信號(hào)發(fā)生器是一種常用的信號(hào)源,廣泛地應(yīng)用于電子電路、自動(dòng)控制系統(tǒng)和教學(xué)實(shí)驗(yàn)等領(lǐng)域。 本設(shè)計(jì)采用AT89C51單片機(jī)作為控制核心,外圍采用數(shù)字/模擬轉(zhuǎn)換電路(DAC0832)、運(yùn)放電路(LM324)、按鍵和LCD液晶顯示電路。電路采用單片機(jī)和一片DAC0832數(shù)模轉(zhuǎn)換器組成數(shù)字式低頻信號(hào)發(fā)生器,可產(chǎn)生正弦波、矩形波、鋸齒波和三角波四種波形。系統(tǒng)通過(guò)單片機(jī)產(chǎn)生數(shù)字信號(hào),通過(guò)DAC0832轉(zhuǎn)換為模擬信號(hào),再通過(guò)放大器LM324就可以得到雙極性的各種波形,最終由示波器顯示出來(lái)。通過(guò)鍵盤(pán)來(lái)控制四種波形的類(lèi)型選擇、頻率變化,并通過(guò)液晶1602顯示其各自的波形類(lèi)型以及頻率數(shù)值。
本設(shè)計(jì)硬件電路簡(jiǎn)單,軟件功能完善,控制系統(tǒng)可靠,性?xún)r(jià)比較高,具有一定的實(shí)用價(jià)值和參考價(jià)值。
1 系統(tǒng)總體設(shè)計(jì) 1
1.1 系統(tǒng)基本模塊設(shè)計(jì)與論證 1
1.1.1 信號(hào)發(fā)生模塊 1
1.1.2 鍵盤(pán)模塊 1
1.1.3 電路設(shè)計(jì)最終方案 2
1.2 系統(tǒng)原理及總體結(jié)構(gòu)圖 2
1.2.1 系統(tǒng)總體結(jié)構(gòu)圖 2
1.2.2 系統(tǒng)工作原理 2
2 系統(tǒng)硬件設(shè)計(jì) 3
2.1 系統(tǒng)硬件仿真原理圖 3
2.2 系統(tǒng)主要單元電路設(shè)計(jì) 4
2.2.1 主控制器AT89C51 4
2.2.2 數(shù)/模轉(zhuǎn)換電路 7
2.2.3 電流/電壓轉(zhuǎn)換放大電路
2.2.4 鍵盤(pán)電路
3 系統(tǒng)軟件設(shè)計(jì)
3.1 系統(tǒng)主程序流程框圖
3.2 信號(hào)產(chǎn)生子程序
3.2.1 正弦波發(fā)生子程序
3.2.2 矩形波發(fā)生子程序 18
3.2.3 三角波發(fā)生子程序 18
3.2.4 鋸齒波發(fā)生子程序 20
3.3按鍵處理子程序 20
3.4 INT0中斷子程序 1
4 系統(tǒng)調(diào)試
4.1 系統(tǒng)調(diào)試過(guò)程
4.2 調(diào)試中的問(wèn)題及解決方法
4.3 系統(tǒng)仿真結(jié)果
5 結(jié)論 28
5.1 結(jié)論 28
參考文獻(xiàn)8
采用單片機(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)定性好、操作方便、體積小、耗電少。
該既可滿(mǎn)足畢業(yè)設(shè)計(jì)的基本要求又能充分發(fā)揮其優(yōu)勢(shì),電路簡(jiǎn)單,易控制,性?xún)r(jià)比較高,所以采用該方案。
1.1.2 鍵盤(pán)模塊采用矩陣式鍵盤(pán),鍵盤(pán)為4*4矩陣式行列掃描,優(yōu)點(diǎn)是當(dāng)按鍵較多時(shí)可降低占用單片機(jī)的I/O口數(shù)目。
1.1.3 電路設(shè)計(jì)最終方案本系統(tǒng)包括主控模塊,顯示模塊,信號(hào)發(fā)生模塊,鍵盤(pán)模塊,運(yùn)放模塊,綜上各方案所述,確定最終設(shè)計(jì)方案為:采用AT89C51作為主控制系統(tǒng),獨(dú)立式按鍵作為鍵盤(pán)模塊,數(shù)模轉(zhuǎn)換芯片DAC0832作為信號(hào)發(fā)生模塊,LM324作為電流/電壓轉(zhuǎn)換放大模塊。
1.2 系統(tǒng)原理及總體結(jié)構(gòu)圖1.2.1 系統(tǒng)總體結(jié)構(gòu)圖根據(jù)上述電路設(shè)計(jì)的最終方案,系統(tǒng)總體設(shè)計(jì)結(jié)構(gòu)如圖1所示。
數(shù)字信號(hào)可以通過(guò)數(shù)/模轉(zhuǎn)換器轉(zhuǎn)換成模擬信號(hào),因此可通過(guò)產(chǎn)生數(shù)字信號(hào)再轉(zhuǎn)換成模擬信號(hào)的方法來(lái)獲得所需要的波形。在本設(shè)計(jì)中,AT89C51是整個(gè)波形發(fā)生器的核心部分,外圍電路包括數(shù)字/模擬轉(zhuǎn)換電路、電流/電壓轉(zhuǎn)換放大電路、按鍵電路和晶振電路。外接12MHz晶振電路為單片機(jī)提供工作脈沖。P0口接數(shù)模轉(zhuǎn)換芯片DAC0832的DI0~DI7,為數(shù)模轉(zhuǎn)換芯片提供數(shù)字信號(hào);P2.0~P2.4外接獨(dú)立鍵盤(pán),以控制信號(hào)的類(lèi)型、頻率等。
通過(guò)對(duì)單片機(jī)編寫(xiě)程序,控制從P0口輸出的數(shù)字信號(hào)類(lèi)型,P0口的數(shù)字信號(hào)再輸入到數(shù)模轉(zhuǎn)換芯片DAC0832中,從而轉(zhuǎn)換為模擬信號(hào)輸出。DAC0832輸出的模擬信號(hào)為電流信號(hào),所以用電流/電壓運(yùn)算放大器LM324將電流信號(hào)再轉(zhuǎn)換成電壓信號(hào)輸出。用兩片LM324可以得到輸出波形的雙極性輸出,將輸出的波形與示波器相連即可觀察輸出波形的特征。獨(dú)立式鍵盤(pán)可以控制從P0口輸出的數(shù)字信號(hào),按下不同的鍵可以使此輸出信號(hào)改變,從而使輸出的波形實(shí)現(xiàn)正弦波、矩形波、鋸齒波和三角波之間的轉(zhuǎn)變,并能夠改變波形輸出頻率的大小。
2 系統(tǒng)硬件設(shè)計(jì)2.1系統(tǒng)硬件仿真原理圖硬件設(shè)計(jì)是系統(tǒng)設(shè)計(jì)的重點(diǎn)之一,選擇合適的元器件尤為重要。在本設(shè)計(jì)中,根據(jù)設(shè)計(jì)的總體方案,選擇AT89C51作為主控制器、DAC0832為數(shù)模轉(zhuǎn)換芯片、LM324為電流/電壓轉(zhuǎn)換元件、5個(gè)獨(dú)立式按鍵為按鍵模塊元件。本設(shè)計(jì)在Proteus軟件中繪制的硬件電路圖如圖2所示。
AT89C51是美國(guó)ATMEL公司生產(chǎn)的低電壓、高性能CMOS 8位單片機(jī),片內(nèi)含4KB的可反復(fù)擦除的只讀程序存儲(chǔ)器(PEROM)和128B隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn)兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和FLASH存儲(chǔ)單元,功能強(qiáng)大AT89C51單片機(jī)可為您提供許多高性?xún)r(jià)比的應(yīng)用場(chǎng)合。
主要性能參數(shù):
①與MCS-51產(chǎn)品指令系統(tǒng)完全兼容
②4K字節(jié)可重擦寫(xiě)FLASH閃速存儲(chǔ)器
③1000次擦寫(xiě)周期
④全靜態(tài)操作:0HZ-24MHZ
⑤三級(jí)加密程序存儲(chǔ)器
⑥1288字節(jié)內(nèi)部RAM
⑦32個(gè)可編程I/O口線(xiàn)
⑧2個(gè)16位定時(shí)/計(jì)數(shù)器
⑨6個(gè)中斷源
⑩可編程串行UART通道
圖3 AT89C51 引腳封裝圖
AT89C51引腳封裝如圖3所示,其芯片引腳介紹如下:
(1)主電源引腳
VCC:+5 V電源 VSS:地線(xiàn)。
(2)時(shí)鐘電路引腳
XTAL1和XTAL2:外接晶體引線(xiàn)端。當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),此二引線(xiàn)端用于外接石英晶體和微調(diào)電容;當(dāng)使用外部時(shí)鐘時(shí),用于接外部時(shí)鐘脈沖信號(hào)。
(3)控制信號(hào)引腳
RST/VPD:復(fù)位信號(hào)。當(dāng)輸入的復(fù)位信號(hào)延續(xù)兩個(gè)機(jī)器周期以上的高電平時(shí)即為有效,用以完成單片機(jī)的復(fù)位初始化操作;當(dāng)單片機(jī)掉電時(shí),此引腳上可接備用電源,由VPD向片內(nèi)RAM提供備用電源,以保持片內(nèi)RAM中的數(shù)據(jù)不丟失。
ALE/PROG:地址鎖存控制信號(hào)。在系統(tǒng)擴(kuò)展時(shí),ALE用于控制把P0口輸出的低8位地址鎖存起來(lái),以實(shí)現(xiàn)低位地址和數(shù)據(jù)的隔離。此外,由于ALE是以晶振1/6的固定頻率輸出的正脈沖,因此,可作為外部時(shí)鐘或外部定時(shí)脈沖使用。
PSEN:片外程序存儲(chǔ)器讀選通信號(hào)輸出端。
EA/VPP:訪(fǎng)問(wèn)程序存儲(chǔ)控制信號(hào)。當(dāng)EA信號(hào)為低電平時(shí),對(duì)ROM的讀操作限定在外部程序存儲(chǔ)器;當(dāng)EA信號(hào)為高電平時(shí),對(duì)ROM的讀操作是從內(nèi)部程序存儲(chǔ)器開(kāi)始,并可延至外部程序存儲(chǔ)器。
(4)I/O引腳
P0.0 ~ P0.7 :P0口8位雙向口線(xiàn);P1.0 ~ P1.7 :P1口8位雙向口線(xiàn);
P2.0 ~ P2.7 :P2口8位雙向口線(xiàn);P3.0 ~ P3.7 :P3口8位雙向口線(xiàn)。
P3口線(xiàn)的第二功能。P3的8條口線(xiàn)都定義有第二功能,詳見(jiàn)表1。
表1 P3口各引腳與第二功能表
引腳 | 第二功能 | 信號(hào)名稱(chēng) |
P3.0 | RXD | 串行數(shù)據(jù)接收 |
P3.1 | TXD | 串行數(shù)據(jù)發(fā)送 |
P3.2 | INT0 | 外部中斷0申請(qǐng) |
P3.3 | INT1 | 外部中斷1申請(qǐng) |
P3.4 | T0 | 定時(shí)/計(jì)數(shù)器0的外部輸入 |
P3.5 | T1 | 定時(shí)/計(jì)數(shù)器1的外部輸入 |
P3.6 | WR | 外部RAM寫(xiě)選通 |
P3.7 | RD | 外部RAM讀選通 |
以上把8051單片機(jī)的全部信號(hào)引腳分別以第一功能和第二功能的形式列出。對(duì)于各種型號(hào)的芯片,其引腳的第一功能信號(hào)是相同的,所不同的只在引腳的第二功能信號(hào)。對(duì)于9、30和31三個(gè)引腳,由于第一功能信號(hào)與第二功能信號(hào)是單片機(jī)在不同工作方式下的信號(hào),因此不會(huì)發(fā)生使用上的矛盾。但是P3口的情況卻有所不同,它的第二功能信號(hào)都是單片機(jī)的重要控制信號(hào)。因此,在實(shí)際使用時(shí),都是先按需要選用第二功能信號(hào),剩下的才以第一功能的身份作數(shù)據(jù)位的輸入/輸出使用。
如圖4所示,本設(shè)計(jì)中單片機(jī)資源的分配情況如下:
(1)單片機(jī)使用外部電路來(lái)提供時(shí)鐘脈沖。引腳XTAL1和XTAL2之間接12MHz的石英晶體,使單片機(jī)的一個(gè)機(jī)器周期為1us。
(2)P0口與DAC0832的DI0-DI7數(shù)據(jù)輸入口相連,因?yàn)镻0口內(nèi)部沒(méi)有上拉電阻,不能輸出高電平,所以要接上拉電阻RESPACK-8; P2口的P2^0-P2^4分別與5個(gè)獨(dú)立按鍵相連。
圖4 單片機(jī)控制模塊
2.2.2 數(shù)模轉(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ù)值。
上述的D/A轉(zhuǎn)換,常用如圖5所示的倒T形解碼網(wǎng)絡(luò)加以實(shí)現(xiàn)。
電路設(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
根據(jù)分流公式,各支路電流為:
I7=I/21I6 =I/22I5 =I/23I4 =I/24I3 =I/25I2 =I/26I1 =I/27I0 =I/28
于是,經(jīng)過(guò)運(yùn)算放大器輸出的模擬電壓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是進(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.?dāng)?shù)模轉(zhuǎn)換器的主要技術(shù)指標(biāo)
分辨率指輸入給D/A轉(zhuǎn)換器的單位數(shù)字量引起的模擬量輸出的變化,通常定義為輸出滿(mǎn)刻度值與2n之比(n為D/A轉(zhuǎn)換器的二進(jìn)制位數(shù))。顯然,二進(jìn)制位數(shù)越多,分辨率越高,即D/A轉(zhuǎn)換器對(duì)輸入量變化的敏感程度越高。例如,8位的D/A轉(zhuǎn)換器,若滿(mǎn)量程輸出為10V,根據(jù)分辨率定義,則分辨率為10V/2n,分辨率為10V/256=39.1mV,即輸入的二進(jìn)制最低位的變化可引起輸出的模擬電壓變化39.1mV,該值占滿(mǎn)量程的0.391%,常用1LSB表示。使用時(shí),應(yīng)根據(jù)對(duì)D/A轉(zhuǎn)換器分辨率的需要來(lái)選定D/A轉(zhuǎn)換器的位數(shù)。
相對(duì)精度是指在滿(mǎn)刻度已經(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以下。
通常用非線(xiàn)性誤差的大小表示D/A轉(zhuǎn)換器的線(xiàn)性度,輸入輸出特性的偏差與滿(mǎn)刻度輸出之比的百分?jǐn)?shù)表示非線(xiàn)性誤差。一定溫度下的最大非線(xiàn)性誤差一般為0.01%~0.03%。
3. DAC0832數(shù)模轉(zhuǎn)換芯片主要特性與結(jié)構(gòu)
DAC0832系列為美國(guó)國(guó)家半導(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)用。
1.DAC0832的主要特性
2.DAC0832的內(nèi)部結(jié)構(gòu)
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ù)輸入鎖存。
圖 6 DAC0832內(nèi)部邏輯框圖
使用時(shí),數(shù)據(jù)輸入可以采用兩級(jí)鎖存(雙鎖存)、單級(jí)鎖存(一級(jí)鎖存,一級(jí)直通方式)或直接輸入(兩級(jí)直通)形式。上圖中,2個(gè)與門(mén)電路組成寄存器輸出控制邏輯電路,該邏輯電路的功能是進(jìn)行數(shù)據(jù)鎖存控制。
3.DAC0832的引腳功能
DI0~DI7:8位數(shù)據(jù)輸入線(xiàn)。
:片選信號(hào)輸入,低電平有效。
ILE:數(shù)據(jù)鎖存允許控制信號(hào),高電平有效。
1:輸入寄存器寫(xiě)選通輸入信號(hào),低
平有效。 圖 7 DAC0832的引腳
2:DAC寄存器寫(xiě)選通輸入信號(hào),低電平有效。
:數(shù)據(jù)傳送控制信號(hào),低電平有效。上述兩個(gè)信號(hào)控制DAC寄存器是否為數(shù)據(jù)直通方式。當(dāng)2=0和=0時(shí),為DAC寄存器直通方式;當(dāng)2=1或=1時(shí),為DAC寄存器鎖存方式。
IOUT1、IOUT2:電流輸出,IOUT1+IOUT2=常數(shù)。
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ī)的接口
DAC0832根據(jù)控制信號(hào)的接法可分為三種工作方式:直通方式、單緩沖方式、雙緩沖方式。
此時(shí)輸入鎖存器和DAC寄存器相應(yīng)的控制信號(hào)引腳分別連在一起,使數(shù)據(jù)直接寫(xiě)入DAC寄存器,立即進(jìn)行D/A轉(zhuǎn)換(這種情況下,輸入鎖存器不起鎖存作用)。此方式適用于只有一路模擬量輸出,或有幾路模擬量輸出但是并不要求同步的系統(tǒng)。
2. 雙緩沖方式
對(duì)于多路D/A轉(zhuǎn)換輸出,如果要求同步進(jìn)行,可以采用雙緩沖同步方式。DAC0832工作于雙緩沖工作方式時(shí),數(shù)字量的輸入鎖存和D/A轉(zhuǎn)換是分兩步完成的。首先CPU的數(shù)據(jù)總線(xiàn)分時(shí)向各路D/A轉(zhuǎn)換器輸入要轉(zhuǎn)換的數(shù)字量,并將其鎖存在各自的輸入鎖存器中,然后CPU對(duì)所有的DAC發(fā)出控制信號(hào),使各個(gè)DAC輸入鎖存器中的數(shù)據(jù)打入DAC寄存器,實(shí)現(xiàn)同步轉(zhuǎn)換輸出。
3. 直通工作方式
當(dāng)DAC0832芯片的片選信號(hào)、寫(xiě)信號(hào)1、2及傳送控制信號(hào)的引腳全部接地,允許輸入鎖存信號(hào)ILE引腳+5V時(shí),DAC0832芯片就處于直通工作方式,數(shù)字量一旦輸入,就直接進(jìn)入DAC寄存器,進(jìn)行D/A轉(zhuǎn)換,從輸出端得到轉(zhuǎn)換的模擬量。
本設(shè)計(jì)中,為了降低數(shù)模轉(zhuǎn)換建立的時(shí)間,數(shù)模轉(zhuǎn)換芯片DAC0832采用直通的工作方式。
2.2.3 電流/電壓轉(zhuǎn)換放大電路由于從DAC0832轉(zhuǎn)換出來(lái)的模擬信號(hào)為電流信號(hào),為了方便觀測(cè)輸出信號(hào)的特征,特將DAC0832輸出的信號(hào)經(jīng)過(guò)電流/電壓轉(zhuǎn)換放大電路轉(zhuǎn)變?yōu)殡妷盒盘?hào)。本設(shè)計(jì)中使用的運(yùn)放為L(zhǎng)M324。LM324運(yùn)算放大器是價(jià)格便宜的帶差動(dòng)輸入功能的四運(yùn)算放大器。其引腳圖如圖8所示。
LM324的特點(diǎn):
1.短路保護(hù)輸出
2.真差動(dòng)輸入級(jí)
3.可單電源工作:3V-32V
4.低偏置電流:最大100nA(LM324A)
5.每封裝含四個(gè)運(yùn)算放大器。
6.具有內(nèi)部補(bǔ)償?shù)墓δ堋?/font>
7.共模范圍擴(kuò)展到負(fù)電源
8.行業(yè)標(biāo)準(zhǔn)的引腳排列
9.輸入端具有靜電保護(hù)功能 圖8 LM324引腳
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)閁1為-5V~0V,根據(jù)電流環(huán)路定理有
即:Uout=-VREF-2U1
所以當(dāng)VREF=5V,而U1為-5V~ 0V輸出時(shí),Uout的輸出為-5~+5V,即實(shí)現(xiàn)了雙極性輸出。
該子系統(tǒng)是5個(gè)獨(dú)立鍵盤(pán)和一個(gè)2輸入與門(mén)組成,其中與門(mén)輸出端連接單片機(jī)的P3.2口以便形成外部中斷。5個(gè)按鍵分別連接單片機(jī)的P2.0~P2.4口。2輸入與門(mén)一引腳與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所示。
表2 按鍵功能表
按鍵 | 功能 | 屬性 |
K1 | 波形選擇 | 自動(dòng)復(fù)位 |
K2 | 頻率升高 | 自動(dòng)復(fù)位 |
K3 | 頻率降低 | 自動(dòng)復(fù)位 |
K4 | 占空比升高 | 自動(dòng)復(fù)位 |
K5 | 占空比降低 | 自動(dòng)復(fù)位 |
按鍵電路的電路圖如圖15所示。
系統(tǒng)軟件主要是用來(lái)控制信號(hào)發(fā)生器系統(tǒng)按照設(shè)計(jì)的邏輯進(jìn)行運(yùn)行。在軟件設(shè)計(jì)上,根據(jù)功能分成了多個(gè)模塊編程,主要包括:主程序模塊、四種不同的波形產(chǎn)生模塊、按鍵處理模塊、外部中斷模塊等。
3.1 系統(tǒng)主程序流程框圖系統(tǒng)主程序流程圖如圖16所示,源程序見(jiàn)附件。
圖16 系統(tǒng)主程序流程圖
3.2 信號(hào)產(chǎn)生子程序本系統(tǒng)采用編程的方法,來(lái)輸出四種不同的波形即正弦波、矩形波、三角波、鋸齒波。各種波形的產(chǎn)生方法如下。
3.2.1 正弦波發(fā)生子程序正弦波的產(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)?0H~FFH對(duì)應(yīng)的數(shù)字量為0~255,所以根據(jù)算出的電壓就可直接寫(xiě)出各點(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)?,以此循環(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)矩形波頻率的改變。
三角波中的斜線(xiàn)用一個(gè)個(gè)小臺(tái)階來(lái)逼近,當(dāng)臺(tái)階間隔很小時(shí),波形基本上近似一直線(xiàn)。首先定義一個(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)?,以此循環(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ò)程與三角波類(lèi)似,也是定義一個(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ā)生流程圖。
在本設(shè)計(jì)中,主要是通過(guò)按鍵來(lái)調(diào)節(jié)輸出波形的類(lèi)型、頻率的大小及矩形波的占空比,采用程序控制掃描方式,時(shí)刻監(jiān)視著有無(wú)按鍵按下。為了能夠更準(zhǔn)確的判斷按鍵的情況,一旦有按鍵按下時(shí),先延時(shí)去除按鍵的抖動(dòng),再判斷是哪個(gè)按鍵按下,從而單片機(jī)對(duì)應(yīng)的執(zhí)行相應(yīng)的程序。圖22為按鍵處理流程圖。
中斷子程序是用來(lái)控制輸出波形的選擇。當(dāng)波形選擇按鍵K1按下時(shí),進(jìn)入中斷程序中,此時(shí)波形選擇標(biāo)識(shí)WaveChoice加1,中斷結(jié)束后,主程序中根據(jù)WaveChoice的值輸出相應(yīng)的波形。圖24為INT0中斷流程圖。
圖24 INT0中斷流程圖
4 系統(tǒng)調(diào)試1.編譯、連接項(xiàng)目,形成目標(biāo)文件
打開(kāi)Keil新建工程文件,然后添加源程序文件,保存時(shí)把文件后綴名改成“.c”,再直接導(dǎo)入新建的工程中。
把源程序全部錄入后,先粗略的檢查一遍,主要改正明顯的各種錯(cuò)誤,這樣可以減少之后的修改工作量。接著Options for Target “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)。
編譯、連接時(shí),如果程序存在語(yǔ)法有錯(cuò),則不會(huì)通過(guò)編譯,并在下面的信息窗口給出相應(yīng)的出錯(cuò)提示信息,其中錯(cuò)誤是一定得改正的,警告可以忽略。雙擊下面顯示錯(cuò)誤信息的那一行,可以直接定位錯(cuò)誤所在的行,用戶(hù)可以方便的對(duì)程序進(jìn)行修改。修改后再編譯、連接,繼續(xù)進(jìn)行調(diào)試,這個(gè)過(guò)程可能會(huì)重復(fù)多次。如果沒(méi)有任何語(yǔ)法上的錯(cuò)誤,則編譯、連接成功,并且信息窗口給出提示信息。
2.運(yùn)行調(diào)試
在Proteus軟件中先從元件庫(kù)中加載要使用的那些元件,然后把元件放在圖紙上一個(gè)一個(gè)的接線(xiàn),盡量不讓線(xiàn)交錯(cuò),便于查看、分析,有必要時(shí),使用接線(xiàn)標(biāo)號(hào)法。完成所有元器件的接線(xiàn)后,在單片機(jī)上右擊選Edit Properties,在Program file 那一行右側(cè)點(diǎn)擊,然后選擇前面生成的以“.hex”為后綴名的文件,為單片機(jī)AT89C51添加可執(zhí)行文件。然后點(diǎn)擊左下角的相關(guān)按鍵,開(kāi)始進(jìn)行仿真。
4.2 調(diào)試中的問(wèn)題及解決方法在設(shè)計(jì)方案確定后,為了更好的調(diào)試,可以先分別對(duì)不同模塊進(jìn)行調(diào)試,最后在進(jìn)行整體調(diào)試。在整個(gè)調(diào)試的過(guò)程中,遇到了不少的問(wèn)題,經(jīng)自己查閱資料,并向老師、同學(xué)請(qǐng)教后,這些問(wèn)題基本已解決。調(diào)試中遇到的問(wèn)題及解決方法如下:
(1) 在調(diào)試波形產(chǎn)生過(guò)程中,波形選擇按鍵按下時(shí),沒(méi)有波形輸出或只輸出一種波形。
解決方法:若無(wú)波形輸出,則要先檢查硬件原理圖是否連接好,再檢查程序是否出現(xiàn)問(wèn)題。若僅有一種波形輸出,則要檢查程序中是否出現(xiàn)了死循環(huán),還應(yīng)檢查按鍵控制程序是否符合邏輯要求。
(2) 當(dāng)個(gè)個(gè)模塊的功能都可以實(shí)現(xiàn)時(shí),就可以進(jìn)行總體的調(diào)試。在總體的調(diào)試中,發(fā)現(xiàn)波形選擇按鍵按下時(shí),液晶顯示波形類(lèi)型變化和輸出波形的變化并不能同時(shí)實(shí)現(xiàn)。
解決方法:當(dāng)波形選擇按鍵按下時(shí),液晶上的顯示只要做一次就可以,而信號(hào)波形的輸出則是連續(xù)著的。所以使用外部中斷INT0,當(dāng)有按鍵按下時(shí),先響應(yīng)中斷程序,然后再回到主程序中,輸出對(duì)應(yīng)的波形。
(4) 系統(tǒng)使用的是控制延時(shí)的方法來(lái)改變輸出信號(hào)的頻率,故頻率值的大小不好計(jì)算。
解決方法:設(shè)定不同的延時(shí)時(shí)間,從示波器顯示的輸出波形來(lái)計(jì)算其對(duì)應(yīng)的頻率,并記錄下來(lái)。再根據(jù)每條指令大約的執(zhí)行時(shí)間,來(lái)粗略的估計(jì)出輸出信號(hào)的頻率與延時(shí)時(shí)間的函數(shù)關(guān)系。當(dāng)然,這種方法所測(cè)得的頻率與實(shí)際頻率的誤差還是很大的,此問(wèn)題并沒(méi)得到完美的解決。
4.3 系統(tǒng)仿真結(jié)果經(jīng)以上調(diào)試,確認(rèn)程序沒(méi)有問(wèn)題時(shí),加載到Proteus軟件中進(jìn)行仿真,所得仿真結(jié)果如下。
(1)剛開(kāi)始運(yùn)行程序,沒(méi)有按鍵操作時(shí),仿真結(jié)果如圖25所示。
(3)波形為正弦波,K2鍵按下時(shí),輸出波形的頻率增大仿真如圖30 所示。
(4)當(dāng)波形為矩形波且K4鍵按下后,矩形波的占空比增加。其仿真結(jié)果如圖31所示。
(1)通過(guò)查閱大量資料使自己對(duì)信號(hào)發(fā)生器的研究現(xiàn)狀、原理、工作方式等的基本概念及技術(shù)發(fā)展有了更好的理解。
(2)針對(duì)設(shè)計(jì)的任務(wù)和要求,確定信號(hào)發(fā)生器的設(shè)計(jì)方案,并逐步來(lái)實(shí)現(xiàn)。
(3)本系統(tǒng)使用了單片機(jī)作為主控制器,直接由軟件產(chǎn)生不同波形信號(hào)的輸出,因此在如何編寫(xiě)程序方面下了很大的功夫,也收獲了很多知識(shí)。
(4)在Keil中編寫(xiě)仿真程序,在Proteus中繪制硬件仿真圖,并實(shí)現(xiàn)聯(lián)調(diào)仿真。從仿真的結(jié)果來(lái)看,基本完成了設(shè)計(jì)的要求。
經(jīng)過(guò)此次設(shè)計(jì)學(xué)會(huì)了很多關(guān)于電子方面的軟件:如Proteus、Keil51等。了解到了一個(gè)模型從項(xiàng)目選擇、方案選擇和論證電路設(shè)計(jì)、元器件選擇等到軟硬件的設(shè)計(jì)及實(shí)現(xiàn),再到最終的整機(jī)測(cè)試和調(diào)試整個(gè)工作過(guò)程,為以后工作打下了堅(jiān)實(shí)的基礎(chǔ)。其次,經(jīng)過(guò)這次畢業(yè)設(shè)計(jì),使我深刻地認(rèn)識(shí)到學(xué)好專(zhuān)業(yè)知識(shí)的重要性,也理解了理論聯(lián)系實(shí)際的含義,提升了我對(duì)電子設(shè)計(jì)和制作的興趣。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |