信號(hào)發(fā)生器設(shè)計(jì)_第1頁(yè)
信號(hào)發(fā)生器設(shè)計(jì)_第2頁(yè)
信號(hào)發(fā)生器設(shè)計(jì)_第3頁(yè)
信號(hào)發(fā)生器設(shè)計(jì)_第4頁(yè)
信號(hào)發(fā)生器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

波形發(fā)生器是一種常用的信號(hào)源,廣泛地應(yīng)用于電子電路、自動(dòng)控制系統(tǒng)和教學(xué)實(shí)驗(yàn)等領(lǐng)域。本次課程設(shè)計(jì)使用的 AT89S51 單片機(jī)構(gòu)成的發(fā)生器可產(chǎn)生鋸齒波、三角波、正弦波等多種波形,波形的周期可以用程序改變,并可根據(jù)需要選擇單極性輸出或雙極性輸出,具有線路簡(jiǎn)單、結(jié)構(gòu)緊湊等優(yōu)點(diǎn)。在本設(shè)計(jì)的基礎(chǔ)上,加上按鈕控制和 LED 顯示器,則可通過(guò)按鈕設(shè)定所需要的波形頻率,并在 LED 上顯示頻率、幅值電壓,波形可用示波器顯示。 二、系統(tǒng)設(shè)計(jì) 波形發(fā)生器原理方框圖如下所示。波形的產(chǎn)生是通過(guò) AT89S51 執(zhí)行某一波形發(fā)生程序,向D/A 轉(zhuǎn)換器的輸入端按一定的規(guī)律發(fā)生數(shù)據(jù),從而在 D/A 轉(zhuǎn)換電路的輸出端得到相應(yīng)的電壓波形。在 AT89S51 的 P2 口接 5 個(gè)按扭 ,通過(guò)軟件編程來(lái)選擇各種波形、幅值電壓和頻率,另有 3 個(gè) P2 口管腳接 TEC6122 芯片,以驅(qū)動(dòng)數(shù)碼管顯示電壓幅值和頻率,每種波形對(duì)應(yīng)一個(gè)按鈕。此方案的有點(diǎn)是電路原理比較簡(jiǎn)單,實(shí)現(xiàn)起來(lái)比較容易。缺點(diǎn)是,采樣頻率由單片機(jī)內(nèi)部產(chǎn)生故使整個(gè)系統(tǒng)的頻率降低。 1、波形發(fā)生器技術(shù)指標(biāo) 1)波形:方波、正弦波、鋸齒波; 2)幅值電壓: 1V、 2V、 3V、 4V、 5V; 3)頻率: 10HZ、 20HZ、 50HZ、 100HZ、 200HZ、 500HZ、 1KHZ; 2、操作設(shè)計(jì) 1)上電后,系統(tǒng)初始化,數(shù)碼顯示 6 個(gè) ,等待輸入設(shè)置命令。 2)按鈕分別控制 “幅值 ”、 “頻率 ”、 “方波 ”、 “正弦波 ”、 “鋸齒波 ”。 3) “幅值 “鍵初始值是 1V,隨后再次按下依次增長(zhǎng) 1V,到達(dá) 5V 后在按就回到 1V。 4) “頻率 “鍵初始值是 10HZ,隨后在按下依次為 20HZ、 50HZ、 100HZ、 200HZ、 500HZ、1000HZ 循環(huán)。 三、硬件設(shè)計(jì) 本系統(tǒng)由單片機(jī)、顯示接口電路,波形轉(zhuǎn)換( D/A)電路和電源等四部分構(gòu)成。電路圖 2 附在后 1、單片機(jī)電路 功能:形成掃描碼,鍵值識(shí)別、鍵處理、參數(shù)設(shè)置;形成顯示段碼;產(chǎn)生定時(shí)中斷;形成波形的數(shù)字編碼,并輸出到 D/A 接口電路和顯示驅(qū)動(dòng)電路。 AT89S51 外接 12M 晶振作為時(shí)鐘頻率。并采用電源復(fù)位設(shè)計(jì)。復(fù)位電路采用上電復(fù)位,它的工作原理是,通電時(shí),電容兩端相當(dāng)于短路,于是 RST 引腳上為高電平,然后電源通過(guò)對(duì)電容充電。 RST 端電壓慢慢下降,降到一定程序,即為低電平,單片機(jī)開(kāi)始工作。 AT89S51 的 P2 口作為功能按鈕和 TEC6122 的接口。 P1 口做為 D/A 轉(zhuǎn)換芯片 0832 的接口。用定時(shí) /計(jì)數(shù)器作為中斷源。不同的頻率值對(duì)應(yīng)不同的定時(shí)初值,允許定時(shí)器溢出中斷。定時(shí)器中斷的特殊功能寄存器設(shè)置如下: 定時(shí)控制寄存器 TCON 20H; 工作方式選擇寄存器 TMOD=01H; 中斷允許控制寄存器 IE=82H。 2、顯示電路 功能:驅(qū)動(dòng) 6 位數(shù)碼管顯示,掃描按鈕。 由集成驅(qū)動(dòng)芯片 TEC6122、 6 位共陰極數(shù)碼管和 5 個(gè)按鈕組成。當(dāng)某一按鈕按下時(shí),掃描程序掃描到之后,通過(guò) P2 口將數(shù)字信號(hào)發(fā)送到 TEC6122 芯片。 TEC6122 是一款數(shù)字集成 芯片。它的外接電壓也是 +5V,并且由于數(shù)碼管的載壓較小,為了保護(hù)數(shù)碼管,必須在兩者間接電阻,大約是 560 歐。 掃描利用軟件程序?qū)崿F(xiàn),當(dāng)某一按鍵按下時(shí),掃描程序立即檢測(cè)到,隨后調(diào)用子程序,執(zhí)行相應(yīng)的功能。 3、 D/A 電路 功能:將波形樣值的編碼轉(zhuǎn)換成模擬值,完成雙極性的波形輸出。 由一片 0832 和兩塊 LM358 運(yùn)放組成。 DAC0832 是一個(gè)具有兩個(gè)輸入數(shù)據(jù)寄存器的 8 位DAC。目前生產(chǎn)的 DAC 芯片分為兩類,一類芯片內(nèi)部設(shè)置有數(shù)據(jù)寄存器,不需要外加電路就可以直接與微型計(jì)算機(jī)接口。另一類芯片內(nèi)部沒(méi)有 數(shù)據(jù)寄存器,輸出信號(hào)隨數(shù)據(jù)輸入線的狀態(tài)變化而變化,因此不能直接與微型計(jì)算機(jī)接口,必須通過(guò)并行接口與微型計(jì)算機(jī)接口。DAC0832 是具有 20 條引線的雙列直插式 CMOS 器件,它內(nèi)部具有兩級(jí)數(shù)據(jù)寄存器,完成8 位電流 D/A 轉(zhuǎn)換,故不需要外加電路。 0832 是電流輸出型,示波器上顯示波形,通常需要電壓信號(hào),電流信號(hào)到電壓信號(hào)的轉(zhuǎn)換可以由運(yùn)算放大器 LM358 實(shí)現(xiàn),用兩片 LM358可以實(shí)現(xiàn)雙極性輸出。 單片機(jī)向 0832 發(fā)送數(shù)字編碼,產(chǎn)生不同的輸出。先利用采樣定理對(duì)各波形進(jìn)行抽樣,然后把各采樣值進(jìn)行編碼,的到的數(shù)字量存入 各個(gè)波形表,執(zhí)行程序時(shí)通過(guò)查表方法依次取出,經(jīng)過(guò) D/A 轉(zhuǎn)換后輸出就可以得到波形。假如 N 個(gè)點(diǎn)構(gòu)成波形的一個(gè)周期,則 0832 輸出 N個(gè)樣值點(diǎn)后,樣值點(diǎn)形成運(yùn)動(dòng)軌跡,即一個(gè)周期。重復(fù)輸出 N 個(gè)點(diǎn),成為第二個(gè)周期。利用單片機(jī)的晶振控制輸出周期的速度,也就是控制了輸出的波形的頻率。這樣就控制了輸出的波形及其幅值和頻率。 四、 軟件設(shè)計(jì) 主程序和子程序都存放在 AT89S51 單片機(jī)中。 主程序的功能是:開(kāi)機(jī)以后負(fù)責(zé)查鍵,即做鍵盤掃描及顯示工作,然后根據(jù)用戶所按的鍵轉(zhuǎn)到相應(yīng)的子程序進(jìn)行處理,主程序框圖如圖 1 所示。 子程序的功能有:幅值輸入處理、頻率輸入處理、正弦波輸出、鋸齒波輸出、方波輸出、顯示等。 下面是程序 include #define uchar unsigned char #define uint unsigned int sbit LCP=P22; sbit SCP=P21; sbit SI=P20; sbit S1=P23; sbit S2=P24; sbit S3=P25; sbit S4=P26; sbit S5=P27; sbit DA0832=P33; sbit DA0832_ON=P32; uchar fun=0,b=0,c=0,d=0,tl,th; uchar code tab10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; uchar code tosin256=0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5 ,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5 ,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd ,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda ,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51 ,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 ; void display(unsigned char command) unsigned char i; LCP=0; for(i=8;i0;i-) SCP=0; if(command & 0x80)=0) SI=0; else SI=1; command=1; SCP=1; LCP=1; void key1(void) fun+; if(fun=4) fun=0x00; void key2(void) tl+; if(tl=0x1f) th+; void key3(void) tl-; if(tl=0x00) th-; void key4(void) double t; int f; TR0=0; t=(65535-th*256-tl)*0.4; f=(int)(1000/t); S3=tabf%10; f=f/10; S2=tabf%10; f=f/10; if(f=0) S1=0; else S1=tabf; TR0=1; void key5(void) tl-; if(tl=0x00) th+; void judge(void) uchar line,row,de1,de2,keym; P1=0x0f; keym=P1; if(keym=0x0f)return; for(de1=0;de1200;de1+) for(de2=0;de2125;de2+); P1=0x0f; keym=P1; if(keym=0x0f)return; P1=0x0f; line=P1; P1=0xf0; row=P1; line=line+row; /*存放特征鍵值 */ if(line=0xde)key1(); if(line=0x7e)key2(); if(line=0xbd)key3(); if(line=0x7d)key4(); void time0_int(void) interrupt 1 /中斷服務(wù)程序 TR0=0; if(fun=1) DA0832=tosinb; /正弦波 b+; else if(fun=2) /鋸齒波 if(c128) DA0832=c; else DA0832=255-c; c+; else if(fun=3) / 方波 d+; if(d=128) DA0832=0x00; else DA0832=0xff; TH0=th; TL0=tl; TR0=1; void main(void) TMOD=0X01; TR0=1; th=0xff; tl=0xd0; TH0=th; TL0=tl; ET0=1; EA=1; while(1) display(); judge(); 五、心得體會(huì) 開(kāi)始的時(shí)候由于沒(méi)有經(jīng)驗(yàn),不知如何下手,所以就去圖書(shū)管找了一些書(shū)看,盡管有許多的設(shè)計(jì)方案,可是總感覺(jué)自己還是有許多的東西弄不太清楚,于是就 請(qǐng)教同學(xué)。他常做一些設(shè)計(jì),有一些經(jīng)驗(yàn)。經(jīng)過(guò)他的解釋分析各方案之后,決定用查表的方法來(lái)做。這樣可以降低一些硬件設(shè)計(jì)的難度,初次設(shè)計(jì)應(yīng)切合自己的水平。用 8031 需要擴(kuò)展 ROM,這樣還要進(jìn)行存儲(chǔ)器擴(kuò)展。而且現(xiàn)在 8031 實(shí)際中已經(jīng)基本上不再使用,實(shí)際用的 AT89S51 芯片有 ROM,這樣把經(jīng)過(guò)采樣得到的數(shù)值制成表,利用查表來(lái)做就簡(jiǎn)單了。我認(rèn)為程序應(yīng)該不大,片內(nèi) ROM應(yīng)該夠用的。用 LED 顯示頻率和幅值,現(xiàn)有集成的接口驅(qū)動(dòng)芯片,波形可通過(guò)示波器進(jìn)行顯示,單片機(jī)接上 D/A 轉(zhuǎn)換芯片即可,這樣硬件很快就搭好了。 我以為這些 做好了,構(gòu)思也有了,寫(xiě)程序應(yīng)該是相對(duì)容易的。誰(shuí)知道,寫(xiě)起程序來(lái),才想到功能鍵要有掃描程序才行呀,我真的感到很難。那時(shí)真的有點(diǎn)想放棄?于是就去請(qǐng)教了老師,老師幫忙分析了一下,自己又查閱

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論