第11章 單片機,信號發(fā)生器設計_第1頁
第11章 單片機,信號發(fā)生器設計_第2頁
第11章 單片機,信號發(fā)生器設計_第3頁
第11章 單片機,信號發(fā)生器設計_第4頁
第11章 單片機,信號發(fā)生器設計_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、信號發(fā)生器是一種常用的信號源,廣泛應用于科學研究、生產(chǎn)實踐和教學實驗等領域。特別是在通信系統(tǒng)的科研實驗中,常常需要用到多種不同頻率和相位的信號,因此多功能信號發(fā)生器應用非常廣泛。本章采用單片機編程的方法設計信號發(fā)生器,可以產(chǎn)生方波、正弦波、三角波、和鋸齒波等信號。由于通過編程方法產(chǎn)生的是數(shù)字信號,所以信號的穩(wěn)定性和精確度很高,電路簡潔,并且可以通過改變程序來實現(xiàn)信號的頻率變換。 信號發(fā)生器能產(chǎn)生方波、正弦波、三角波和鋸齒波四種周期性波形; 信號輸出頻率為100Hz或500Hz; 輸出波形幅度為15V, 輸出信號波形無明顯失真; 信號的頻率通過液晶顯示器顯示;采用單片機編程產(chǎn)生所需數(shù)字信號,通過

2、數(shù)/模轉(zhuǎn)換器轉(zhuǎn)換成模擬信號來獲得所需要的波形。89C52單片機本身就是一個完整的微型計算機,具有組成微型計算機的各部分部件:中央處理器CPU、隨機存取存儲器RAM、只讀存儲器ROM、I/O接口電路、定時器/計數(shù)器以及串行通訊接口等,只要將89C52再配置鍵盤、顯示器、數(shù)模轉(zhuǎn)換、濾波放大等四部分,即可構成所需的波形發(fā)生器,其信號發(fā)生器構成原理框圖如圖11-1所示。圖11-1 信號發(fā)生器原理框圖89C52是整個波形發(fā)生器的核心部分,通過程序的編寫和執(zhí)行,產(chǎn)生各種波形信號,并從鍵盤接收數(shù)據(jù),進行各種信號的轉(zhuǎn)換和信號頻率、幅度的調(diào)節(jié)。當數(shù)字信號經(jīng)過數(shù)模轉(zhuǎn)換電路,轉(zhuǎn)換后得到的模擬信號就是所需的輸出波形。

3、單片機STC89C52顯示電路鍵盤電路D/A電路復位電路放大電路波形輸出下面從硬件電路著手對信號發(fā)生器進行設計,主要包括主控模塊、信號數(shù)據(jù)處理模塊和顯示電路的設計。1RF-X1開發(fā)板(STC89C52)最小系統(tǒng)RF-X1開發(fā)板(STC89C52)的最小系統(tǒng)包括時鐘振蕩電路和復位電路。(1)時鐘振蕩電路時鐘振蕩電路為單片機提供各種微操作的時間基準,STC89S52片內(nèi)設有一個由反向放大器所構成的震蕩電路,所以外部只要連接一個晶振和兩個電容即可。具體電路如圖11-2所示,電容C1、C2起穩(wěn)定震蕩頻率,快速起振的作用,電容值一般為533pF。本設計采用22pF的電容和12MHz的晶振。(2)復位電路

4、復位控制信號在STC89S52的第9管腳輸入,當在此引腳輸入高電平并保持2個機器周期時,單片機內(nèi)部就執(zhí)行復位操作。在本設計中,復位電路由按鍵復位和上電復位組成,STC89S52單片機為高電平復位,通常在復位引腳RST上連接一個電容到VCC,在連接一個電阻到GND,由此形成一個RC充放電回路保證單片機在上電時RST腳上有足夠時間的高電平進行復位,隨后回歸到低電平進入正常工作狀態(tài)。當單片機已運行時,也可以通過按下復位鍵使RST持續(xù)一段時間的高電平,實現(xiàn)復位操作。本設計采用10F電容和10K的電阻。2 鍵盤控制電路RF-X1開發(fā)板提供了一個3*4的矩陣鍵盤和6個獨立按鍵。但是6個獨立按鍵與P3口進行

5、連接,與TLC5615(數(shù)模轉(zhuǎn)換)的連接相沖突,所以這里采用矩陣鍵盤。矩陣鍵盤的行信號分別接P1.0P1.3,列信號分別接P1.4P1.6,識別按鍵的方法是:先讓P1.0輸出低電平,檢測P1.4P1.6,如果在某個時刻為低電平,則可確定第一行的哪個按鍵被按下,接著讓P1.1輸出低電平(其他都為高電平),檢測列的電平,為低則被按下,依次就可以確定按鍵號了。鍵盤控制電路如圖11-3所示。本設計采用了矩陣鍵盤中的6個按鍵,在系統(tǒng)工作時,STC89C52不斷的掃描鍵盤,看是否有鍵按下,如有,則根據(jù)相應按鍵作出反應。其中按鍵“S7”代表正弦波輸出,按鍵“S11”代表鋸齒波輸出,按鍵“S15”代表三角波輸

6、出, 按鍵“S8”代表方波輸出,按鍵“S12”為頻率選擇鍵,可選擇輸出100Hz和500Hz的信號,按鍵“S16”為波形幅度調(diào)節(jié)鍵,幅度范圍為15V。S70S111S152S83S124S165S96S137S178S109S1410S1811P10P11P12P13P14P15P161數(shù)模轉(zhuǎn)換電路(1)TLC5615數(shù)模轉(zhuǎn)換電路由于單片機產(chǎn)生的是數(shù)字信號,要想得到所需的波形,就要把數(shù)字信號轉(zhuǎn)換成模擬信號。為了得到較高的設計精度,RF-X1開發(fā)板采用了一個10位的DAC芯片TLC5615。TLC5615具有接口連接簡單、轉(zhuǎn)換速率快、微功耗等特點,并且輸出的最大電壓可以達到基準輸入電壓的2倍。8

7、腳直插式TLC5615各引腳功能如下:DIN:串行二進制數(shù)輸入端; AGND:模擬地;SCLK:串行時鐘輸入端; REFIN:基準電壓輸入端;CS非:芯片選擇,低電平有效; OUT:DAC模擬電壓輸出端;DOUT:用于級聯(lián)的串行數(shù)據(jù)輸出; VCC:工作電壓輸入端,+5V;將STC89C52的P3口與TLC5615相連,構成DAC電路如圖11-4所示。用P3.5觸發(fā)片選CS非使DAC進如工作狀態(tài),P3.6模擬串行時鐘與SCLK連接,待轉(zhuǎn)換的二進制數(shù)從P3.7輸出到TLC5615的數(shù)據(jù)輸入端DIN,進行數(shù)模轉(zhuǎn)換。(2)TLC5615的工作原理為了使TLC5615能夠正常穩(wěn)定的工作,編程時必須掌握它

8、的工作時序和工作方式。1) TLC5615的工作時序TLC5615的工作時序如圖11-5所示。從圖中可以看出,只有當片選CS非為低電平時,串行輸入數(shù)據(jù)才能被移入16位移位寄存器。當CS非為低電平時,在每一個SCLK時鐘的上升沿將DIN的一位數(shù)據(jù)移入16位移位寄存器。注意,二進制最高有效位被導前移入。然后,在CS非的上升沿將16位移位寄存器的10位有效數(shù)據(jù)鎖存于10位DAC寄存器,供DAC電路進行轉(zhuǎn)換;當片選CS非為高電平時,串行輸入數(shù)據(jù)不能被移入16位移位寄存器。此外,CS非的上升和下降都必須發(fā)生在SCLK的低電平期間。圖11-5 TLC5615時序圖2) TLC5615的工作方式TLC561

9、5的內(nèi)部功能框圖如圖11-6所示,主要由16位移位寄存器、10位DAC寄存器、10位DAC電路、電壓跟隨器、2電路和控制電路等部分組成,它有兩種工作方式。第一種是串行工作方式,從圖中可以看出,16位移位寄存器分為高4位虛擬位、低2位填充位和10位有效位。在TLC5615工作時,只需要向16位移位寄存器按先后順序輸入10位有效位和2位填充位即可,2位填充位數(shù)據(jù)任意,即12位數(shù)據(jù)序列。第二種是級聯(lián)方式,即16位數(shù)據(jù)序列,可以將本片TLC5615的DOUT接到下一片TLC5615的DIN,需要向16位移位寄存器按先后順序輸入高4位虛擬位、10位有效位和低2位填充位,由于增加了高4位虛擬位,所以需要1

10、6個時鐘脈沖。但是,無論TLC5615工作在那一種方式,輸出電壓:其中, VREFIN是參考電壓,N為輸入的二進制數(shù)。圖11-6 TLC5615的內(nèi)部功能框圖2濾波放大電路設計經(jīng)TLC5615數(shù)模轉(zhuǎn)換后,可得到比較準確的15V的模擬電壓輸出,可以達到設計要求。若想得到更加寬泛的信號電壓輸出范圍,可以通過運算放大器進行放大。常用的運放種類很多,如OP07、LM324、LM258等。本設計采用了具有低失調(diào)、高開環(huán)增益特性的OP07,其各引腳功能如下:Offset Null 1:偏置平衡(調(diào)零端); Offset Null 2偏置平衡(調(diào)零端);Inverting Input:反向輸入端; VCC+

11、:電源;Non-inverting Input:同向輸入端; Output:信號輸出端;VCC -:接地端; N.C.:空腳;由數(shù)模轉(zhuǎn)換電路輸出的模擬電壓信號通過R56進入OP07反向端,構成了反向放大電路如圖11-7所示。圖11-7 OP07運算放大電路顯示電路用來顯示波形信號的頻率,使波形信號更加直觀。在此選用可顯示兩行字符的LCD1602就可以滿足設計要求,RF-X1開發(fā)板為LCD1602提供了接口(見開發(fā)板插口J24),與單片機P1口相連接,但與矩陣鍵盤接口相沖突,所以在此將LCD1602的數(shù)據(jù)口改接到單片機的P0口。其電路連接圖如圖11-8所示,LCD1602引腳說明如表11-1所示

12、。此外,由于52單片機P0口內(nèi)部是開漏的,不管驅(qū)動能力多大,都相當于它是沒有電源的,而LCD顯示屏是需要電源驅(qū)動才能點亮的。因此,在這里需要外接上拉電阻來提供驅(qū)動電源。表11-1 LCD1602引腳說明編號編號符號符號引腳說明引腳說明編號編號符號符號引腳說明引腳說明0VSS電源地8D2Data I/O1VDD電源正極9D3Data I/O2VL液晶顯示偏壓信號10D4Data I/O3RS數(shù)據(jù)/命令選擇端(H/L)11D5Data I/O4R/W讀寫選擇端(H/L)12D6Data I/O5E使能信號13D7Data I/O6D0Data I/O14BLA背光源正極背光源正極7D1Data I

13、/O15BLK背光源負極背光源負極圖11-8 LCD1602液晶顯示電路1主程序流程圖本設計中子程序的調(diào)用是通過按鍵的選擇來實現(xiàn)的,在取得相應按鍵的鍵值后,根據(jù)鍵值來確定各種波形的輸出,以及信號幅度和頻率調(diào)節(jié),并將相應的數(shù)據(jù)送入D/A轉(zhuǎn)換器轉(zhuǎn)換成模擬信號,等到所需信號波形。主程序流程圖如圖11-9所示,在程序開始運行之后,首先是對TLC5615進行初始化,之后判斷是否有按鍵按下,根據(jù)鍵值輸出相應波形,然后判斷是否進行幅度和頻率調(diào)節(jié),確定波形頻率后,顯示其頻率。(1)正弦波正弦波是幅度和相位隨時間呈周期性變化的一種波形。利用正弦波數(shù)據(jù)生成器可以方便的產(chǎn)生離散的正弦波形采樣點,描繪出正弦波信號。如

14、圖11-10所示,輸出點數(shù)為256,輸出精度為10,即用256個離散的采樣點來描繪正弦波形。在編程時,只要循環(huán)輸出這256個離散值就可以得到所需正弦波形,正弦波的頻率可以通過延時時間來調(diào)節(jié)。圖11-10 正弦波數(shù)據(jù)生成器 uint code sin1256= 0 x1FF,0 x20C,0 x218,0 x225,0 x231,0 x23E,0 x24A,0 x256,0 x263,0 x26F,0 x27B,0 x287,0 x293,0 x29F,0 x2AB,0 x2B7,0 x2C3,0 x2CE,0 x2DA,0 x2E5,0 x2F0,0 x2FB,0 x306,0 x311,0

15、x31B,0 x326,0 x330,0 x33A,0 x343,0 x34D,0 x357,0 x360,0 x369,0 x371,0 x37A,0 x382,0 x38A,0 x392,0 x39A,0 x3A1,0 x3A8,0 x3AF,0 x3B6,0 x3BC,0 x3C2,0 x3C8,0 x3CD,0 x3D3,0 x3D8,0 x3DC,0 x3E1,0 x3E5,0 x3E8,0 x3EC,0 x3EF,0 x3F2,0 x3F5,0 x3F7,0 x3F9,0 x3FB,0 x3FC,0 x3FD,0 x3FE,0 x3FE,0 x3FE,0 x3FE,0 x3FE,0

16、 x3FD,0 x3FC,0 x3FB,0 x3F9,0 x3F7,0 x3F5,0 x3F2,0 x3EF,0 x3EC,0 x3E8,0 x3E5,0 x3E1,0 x3DC,0 x3D8,0 x3D3,0 x3CD,0 x3C8,0 x3C2,0 x3BC,0 x3B6,0 x3AF,0 x3A8,0 x3A1,0 x39A,0 x392,0 x38A,0 x382,0 x37A,0 x371,0 x369,0 x360,0 x357,0 x34D,0 x343,0 x33A,0 x330,0 x326,0 x31B,0 x311,0 x306,0 x2FB,0 x2F0,0 x2E5,

17、0 x2DA,0 x2CE,0 x2C3,0 x2B7,0 x2AB,0 x29F,0 x293,0 x287,0 x27B,0 x26F,0 x263,0 x256,0 x24A,0 x23E,0 x231,0 x225,0 x218,0 x20C,0 x1FF,0 x1F2,0 x1E6,0 x1D9,0 x1CD,0 x1C0,0 x1B4,0 x1A8,0 x19B,0 x18F,0 x183,0 x177,0 x16B,0 x15F,0 x153,0 x147,0 x13B,0 x130,0 x124,0 x119,0 x10E,0 x103,0 x0F8,0 x0ED,0 x0E3

18、,0 x0D8,0 x0CE,0 x0C4,0 x0BB,0 x0B1,0 x0A7,0 x09E,0 x095,0 x08D,0 x084,0 x07C,0 x074,0 x06C,0 x064,0 x05D,0 x056,0 x04F,0 x048,0 x042,0 x03C,0 x036,0 x031,0 x02B,0 x026,0 x022,0 x01D,0 x019,0 x016,0 x012,0 x00F,0 x00C,0 x009,0 x007,0 x005,0 x003,0 x002,0 x001,0 x000,0 x000,0 x000,0 x000,0 x000,0 x00

19、1,0 x002,0 x003,0 x005,0 x007,0 x009,0 x00C,0 x00F,0 x012,0 x016,0 x019,0 x01D,0 x022,0 x026,0 x02B,0 x031,0 x036,0 x03C,0 x042,0 x048,0 x04F,0 x056,0 x05D,0 x064,0 x06C,0 x074,0 x07C,0 x084,0 x08D,0 x095,0 x09E,0 x0A8,0 x0B1,0 x0BB,0 x0C4,0 x0CE,0 x0D8,0 x0E3,0 x0ED,0 x0F8,0 x103,0 x10E,0 x119,0 x1

20、24,0 x130,0 x13B,0 x147,0 x153,0 x15F,0 x16B,0 x177,0 x183,0 x18F,0 x19B,0 x1A8,0 x1B4,0 x1C0,0 x1CD,0 x1D9,0 x1E6,0 x1F2;/*正弦波子程序*/void sin() uint i; for(i=0;i256;i+) output(sin1i); delay2(250);/*/(2)方波方波是實驗中最常見的一種信號波形,它只有“高”和“低”兩個值,所以在編程時,只要循環(huán)輸出高低電平即可。/*方波子程序*/void fangbo() uchar i; for(i=0;i0;i-)

21、 output(0 x0000);/ TLC5615轉(zhuǎn)換后為0V(3)鋸齒波鋸齒波是常見的波形之一,其波形與時間成正比上升,到達一定值,快速下降到零,再重復上升,下降,形成鋸齒形。/*鋸齒波子程序*/void saw() uint i; for(i=0;i0 x8000;i+1) _nop_(); _nop_(); output(i); /鋸齒波i的值從00 x8000變化 delay2(250);/*/(4)三角波三角波波形首先與時間成正比上升,到大一定值,然后在與時間成正比下降,如此循環(huán)。其程序與鋸齒波相似。/*三角波子程序*/void trigle() uint i; for(i=0;i

22、0;i-1) _nop_(); _nop_(); output(i);/i的值從0 x8000到0 delay2(250);/*/3TLC5615輸出子程序TLC5615是一個串行的10位數(shù)模轉(zhuǎn)換器,首先上電初始化,將片選CS非置高電平,串行時鐘信號置低電平。當片選CS非為低電平時,芯片進入正常工作狀態(tài),在每一個SCLK時鐘的上升沿將DIN的一位數(shù)據(jù)移入16位移位寄存器,供DAC進行轉(zhuǎn)換輸出。/*TLC5615輸出子程序*/void output(uint a)unsigned char i;cs=1; /初始化clock=0;cs=0; /低電平有效,低電平芯片處于工作狀態(tài)di=1;for(

23、i=12;i0;) /送數(shù)i-;if(a&0 x8000) /取12位數(shù)據(jù)的最高位,如果為1輸出高電平,否則輸出低電平di=1;elsedi=0;clock=1; /時鐘為高電平_nop_();_nop_();clock=0; /時鐘為低電平_nop_();_nop_();a=a1; /左移一位,準備下一個數(shù)據(jù) /*/4按鍵掃描子程序本設計采用了RF-X1開發(fā)板上提供的矩陣鍵盤中的6個。先將第一行P1.0置低電平,檢測列信號P1.4P1.6,當某一列為低電平時,則第一行該列按鍵被按下;然后令P1.1輸出低電平(其他都為高電平),檢測第二行按鍵的狀態(tài),依次確定前兩行6個按鍵的鍵值。/*按

24、鍵掃描子程*/uchar keyscan() P1=0 x7e;/給P1口最低位(即P1.0)置0 delay(1);temp=P1;/讀P1口temp=temp&0 x70;/屏蔽第四位,保留高三位while(temp!=0 x70)/判斷是否有鍵按下delay(5);/延時去抖temp=P1;/讀P1口 temp=temp&0 x70;/屏蔽第四位,保留高三位 while(temp!=0 x70)/判斷是否有鍵按下temp=P1;switch(temp) case 0 x6D:num=4;/按鍵S8按下,鍵值為3break;case 0 x5D:num=5;/按鍵S12按下

25、,鍵值為4break;case 0 x3D:num=6;/按鍵S16按下,鍵值為5break; while(temp!=0 x70)/等待按鍵釋放temp=P1; temp=temp&0 x70;return num;/*/5頻率選擇子程序當頻率選擇按鍵S12被按下時,鍵值num=4。當flag1=0時,輸出頻率為100Hz的信號波形;flag1=1時,輸出頻率為500Hz的信號波形。以正弦波形為例,頻率選擇子程序如下。/*頻率選擇子程序*/void tiaopin() uchar flag1,i; if(num=4) if(flag1=1) flag1+; else flag1=0;

26、 switch(flag1) case 0:for(i=0;i256;i+0 x8000/256) _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

27、 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); output(sin1i);/輸出頻率為100HZ的正弦波 delay(250);break; case 1: for(i=0;i256;i+0 x8000/256) _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); output(sin1i);/輸出頻率為500HZ的正弦波 delay(250);bre

28、ak; /*/6幅度選擇子程序當幅度選擇按鍵S16被按下時,鍵值num=5,每按一次flag加1,對應輸出波形幅值加1V,flag4,按滿4次,flag清零。信號輸出幅值范圍為15V。以正弦波形為例,幅度選擇子程序如下。/*幅度選擇子程序*/void tiaofu(uchar aa) uchar flag,i;/按鍵次數(shù)標志位 aa=num; if(aa=5) /S16鍵按下 if(flag=4) flag+; else flag=0;/S16滿四次清0 switch(flag) case 0: for(i=0;i256;i+) output(sini/5);/輸出1V正弦波 delay(25

29、0);break; case 1: for(i=0;i256;i+) output(sini*2/5);/輸出2V正弦波 delay(250);break; case 2: for(i=0;i256;i+) output(sini*3/5);/輸出3V正弦波 delay(250);break; case 3: for(i=0;i256;i+) output(sini*4/5);/輸出4V正弦波 delay(250);break; case 4: for(i=0;i256;i+) output(sini);/輸出5V正弦波 delay(250);break; /*/7顯示程序在液晶模塊上顯示字符,需要3個最基本的控制操作:寫指令代碼、寫顯示數(shù)據(jù)和讀顯示數(shù)據(jù)。液晶初始化和顯示程序如下:/*顯示程序*/1602液晶初始化:void init()lcden=0;write_com(0 x38);/* 假設為5*7 的點陣*/write_com(0 x0c);/* 開顯示,0 x0e顯示光標,光標不閃爍,當為0 x0f時光標就閃爍,0 x

溫馨提示

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

評論

0/150

提交評論