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

下載本文檔

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

文檔簡(jiǎn)介

1、課 程 設(shè) 計(jì)信號(hào)發(fā)生器學(xué)生姓名: 安小鵬 學(xué) 號(hào): 131001201 學(xué) 院: 理學(xué)院 專(zhuān) 業(yè): 應(yīng)用物理 指導(dǎo)教師: 任世偉 劉天山 2016 年 06 月 28 日信號(hào)發(fā)生器摘要:本文以STC89C51單片機(jī)為核心設(shè)計(jì)了一個(gè)低頻函數(shù)信號(hào)發(fā)生器。信號(hào)發(fā)生器采用數(shù)字波形合成技術(shù),通過(guò)硬件電路和軟件程序相結(jié)合,可輸出自定義波形,如正弦波、方波、三角波、鋸齒波、波形的頻率和幅度在一定范圍內(nèi)可任意改變。波形和頻率的改變通過(guò)軟件控制,幅度的改變通過(guò)硬件實(shí)現(xiàn)。介紹了波形的生成原理、硬件電路和軟件部分的設(shè)計(jì)原理。關(guān)鍵詞:?jiǎn)纹瑱C(jī),信號(hào)發(fā)生器,D/A轉(zhuǎn)換一、設(shè)計(jì)要求利用單片機(jī)的控制及編程能力,采用查詢(xún)法設(shè)

2、計(jì)一個(gè)函數(shù)發(fā)生器,要求能夠產(chǎn)生方波、正弦波,分析采樣點(diǎn)數(shù)量與頻率之間的關(guān)系。二、設(shè)計(jì)原理向單片機(jī)輸入所需要的程序并通過(guò)擴(kuò)展D/A轉(zhuǎn)換接口就可以方便地產(chǎn)生正弦信號(hào)。正弦波的產(chǎn)生比較特殊,它不是由單片機(jī)直接產(chǎn)生波形的,它只能產(chǎn)生連續(xù)的階梯波來(lái)向正弦波不斷地逼近。很顯然,在一個(gè)周期內(nèi)階梯波的階梯數(shù)目越多,單片機(jī)輸出的波形也就越接近正弦波。如圖所所示 一般而言,計(jì)算機(jī)要形成正弦波信號(hào)的最簡(jiǎn)便辦法就是使用D/A轉(zhuǎn)換器,因計(jì)算機(jī)可以隔一定時(shí)間向D/A轉(zhuǎn)換器輸出一個(gè)數(shù)字量,而輸出的該數(shù)字量為相應(yīng)時(shí)刻的函數(shù)值,則在D/A轉(zhuǎn)換器輸出端就可以得到一個(gè)相應(yīng)的函數(shù)信號(hào)。D/A轉(zhuǎn)換器形成的函數(shù)信號(hào)實(shí)際上是一個(gè)階梯狀波。

3、所以用D/A轉(zhuǎn)化器形成的正弦波信號(hào)除了正弦基頻分量(所需要的信號(hào))外,還包含了各種高次諧波與余弦基頻分量。因而形成的正弦波信號(hào)只能是一逼近的正弦波信號(hào)。為了正弦信號(hào)的數(shù)字量逼近,可以有多種方案。而逼近一個(gè)正弦函數(shù)的精確程度是和正弦波信號(hào)的細(xì)分度N和D/A轉(zhuǎn)換器的分辨率直接有關(guān)。細(xì)分度N越大產(chǎn)生的正弦信號(hào)就越精確,但是這要求計(jì)算機(jī)速度也相應(yīng)的高;D/A轉(zhuǎn)化器的分辨率越高產(chǎn)生的正弦信號(hào)也就越精確,但是D/A轉(zhuǎn)化器的分辨率受其價(jià)格和計(jì)算速度以及字長(zhǎng)的制約,不宜過(guò)高,應(yīng)取一個(gè)合理的分辨率。故對(duì)正弦信號(hào)逼近方案的討論,是在確定的細(xì)分度N和D/A轉(zhuǎn)化器的分辨率基礎(chǔ)上比較的。把其結(jié)果轉(zhuǎn)換為十六進(jìn)制,并把計(jì)算

4、的十六進(jìn)制以表格的形式存放于EPROM內(nèi)存中,然后以查表的方式來(lái)形成正弦信號(hào)。采用查表的方式單片機(jī)正弦波發(fā)生器的工作原理如下:對(duì)正弦信號(hào)進(jìn)行采樣,將正弦波的第一個(gè)周期的波形均分為若干等份,設(shè)正弦波一個(gè)周期采樣點(diǎn)數(shù)共N個(gè)。則有: 上式中n取0,1,2,N-1,考慮到正弦函數(shù)值的范圍是從-1 0 +1,將它們轉(zhuǎn)化為定點(diǎn)無(wú)符號(hào)數(shù)值存放,例如存放的位數(shù)(即M)是8,那么對(duì)公式:進(jìn)行數(shù)值遷移,則有: 這樣正弦函數(shù)值范圍-1->0-> +1,因?yàn)?0HFFH對(duì)應(yīng)的數(shù)字量為0255,存放的8位(即M)二進(jìn)制數(shù)據(jù)則相應(yīng)為0->128-> 255(十進(jìn)制表示)。依次對(duì)公式采樣可得X(n)

5、,n=0,1,2,N-1共N 個(gè)數(shù)據(jù),組成了一張正弦數(shù)據(jù)表,單片機(jī)將這一個(gè)周期的數(shù)據(jù)表存入EPROM中。EPROM的地址線(xiàn)和地址發(fā)生器的輸出端相連。地址發(fā)生器在時(shí)鐘作用下依次產(chǎn)生選通地址,就會(huì)依次選中EPROM的0單元、1單元、2單元N-1單元地址,再由D/A轉(zhuǎn)化器輸出相應(yīng)幅值的模擬信號(hào),當(dāng)?shù)刂钒l(fā)生器輸出滿(mǎn)N個(gè)地址時(shí),一個(gè)完整的正弦波就產(chǎn)生了。假設(shè)從數(shù)據(jù)表中每取一個(gè)數(shù)據(jù),并將它從D/A轉(zhuǎn)化器輸出至少需要時(shí)間為,那么輸出一個(gè)完整的正弦波所需要的時(shí)間為,則有= N。查表程序周而復(fù)始進(jìn)行下去,便可產(chǎn)生連續(xù)的正弦波信號(hào)。固定周期是由若干機(jī)器周期組成,機(jī)器周期一般又是單片機(jī)時(shí)鐘周期的若干倍,則有:一旦時(shí)

6、鐘確定,也就固定了。一個(gè)固定周期內(nèi)的計(jì)數(shù)脈沖數(shù)就可以通過(guò)下式計(jì)算出來(lái):三、程序設(shè)計(jì):3.1、設(shè)計(jì)流程圖:輸出鋸齒波檢測(cè)有按鍵按下輸出三角波檢測(cè)有按鍵按下打開(kāi)總中斷配置定時(shí)器(T0)默認(rèn)輸出正弦波檢測(cè)有按鍵按下3.2程序源代碼:(見(jiàn)附錄1)3.3產(chǎn)生波形圖:(見(jiàn)附錄2)四、正弦波誤差分析4.1計(jì)數(shù)脈沖數(shù)M對(duì)正弦波的影響固定周期是由若干機(jī)器周期組成,機(jī)器周期一般又是單片機(jī)時(shí)鐘周期的若干倍,產(chǎn)生的正弦波周期為: 在一個(gè)周期內(nèi)相對(duì)誤差為:若用16MHz時(shí)鐘的單片機(jī)產(chǎn)生的正弦波,設(shè)其定時(shí)器輸入脈沖周期是時(shí)鐘脈沖的2倍時(shí),則計(jì)算如下: (若要產(chǎn)生2300HZ的正弦波,其周期應(yīng)為(取N=128則:(因?yàn)?,?/p>

7、以M=27,則最大相對(duì)誤差為:由此可見(jiàn),要減小誤差,只能通過(guò)減小 ,就可以是誤差接近真實(shí)值。4.2采樣點(diǎn)N對(duì)正弦波的影響正弦波發(fā)生器是用N個(gè)順序的以正弦變化的數(shù)值來(lái)驅(qū)動(dòng)D/A芯片來(lái)產(chǎn)生正弦波的。按前面假設(shè)的來(lái)說(shuō),當(dāng)每輸出一點(diǎn)X(n),需要的最少時(shí)間為,那么輸出一個(gè)完整的正弦波(即一個(gè)周期)需要的時(shí)間為,則=N。此時(shí)正弦波的最高頻率為: 設(shè)編制的子程序。約為1s,如N取300則Hz即如果要求輸出正弦波的頻率f大于3333Hz,只能使N小于300。所以可以得出這樣的結(jié)論:N越大,正弦波的精確度越高,但正弦波最高頻率限也越小。正弦波的波形精度R這一概念,R的定義式為: 將公式代入公式,可得 微機(jī)化正

8、弦波是取出正弦波數(shù)據(jù)表中的數(shù)值,由D/A轉(zhuǎn)化器輸出產(chǎn)生階躍狀的模擬量正弦波。正弦波表格中的數(shù)據(jù)值直接影響著階躍狀正弦波的形狀。波形精度R是對(duì)正弦波表格中的數(shù)據(jù)優(yōu)劣的一種描述。對(duì)模擬正弦波的描述波形精度等價(jià)于失真度。根據(jù)理想采樣的原則,數(shù)據(jù)X(n)點(diǎn)與點(diǎn)之間的采樣時(shí)間的間隔是恒定的,即前面的,即X(n)序列在時(shí)間上是均勻地分布在正弦波上的N個(gè)點(diǎn)的采樣值。因?yàn)镹是有限的,所以這些點(diǎn)不能組成光滑的正弦波波形,而是有落差R的波形,且R=X(n)X(n1),它的大小反映了曲線(xiàn)的不光滑程度。正弦波的斜率變化最大應(yīng)在n=0處,所以。下面分別用公式定量計(jì)算N=300,N=200的波形精度和:顯然 < ,

9、可以知道N=300相比N=200而言其階躍狀正弦波更趨向于光滑的理論值。五、總結(jié)與體會(huì) 參考文獻(xiàn):1、 胡漢才 單片機(jī)原理及其接口技術(shù)(第2版) 北京:清華大學(xué)出版社20082、 閻石 數(shù)字電子技術(shù)基礎(chǔ)(第三版)北京:高等教育出版社19893、 郭天祥 新概念51單片機(jī)C語(yǔ)言教程 入門(mén)、提高、開(kāi)發(fā)全;北京電子工業(yè)出版社4、 童詩(shī)白模擬電路技術(shù)基礎(chǔ)M北京:高等教育出版社附錄1:設(shè)計(jì)源程序:(c語(yǔ)言)1. #include <reg52.h>2.3. unsigned char code SinWave = /正弦波波表4. 127, 152, 176, 198, 217, 233,

10、245, 252,5. 255, 252, 245, 233, 217, 198, 176, 152,6. 127, 102, 78, 56, 37, 21, 9, 2,7. 0, 2, 9, 21, 37, 56, 78, 1028. ;9. unsigned char code TriWave = /三角波波表10. 0, 16, 32, 48, 64, 80, 96, 112,11. 128, 144, 160, 176, 192, 208, 224, 240,12. 255, 240, 224, 208, 192, 176, 160, 144,13. 128, 112, 96, 80,

11、 64, 48, 32, 1614. ;15. unsigned char code SawWave = /鋸齒波表16. 0, 8, 16, 24, 32, 40, 48, 56,17. 64, 72, 80, 88, 96, 104, 112, 120,18. 128, 136, 144, 152, 160, 168, 176, 184,19. 192, 200, 208, 216, 224, 232, 240, 24820. ;21. unsigned char code *pWave; /波表指針22. unsigned char T0RH = 0; /T0 重載值的高字節(jié)23. un

12、signed char T0RL = 0; /T0 重載值的低字節(jié)24. unsigned char T1RH = 1; /T1 重載值的高字節(jié)25. unsigned char T1RL = 1; /T1 重載值的低字節(jié)26.27. void ConfigTimer0(unsigned int ms);28. void SetWaveFreq(unsigned char freq);29. extern void KeyScan();30. extern void KeyDriver();31. extern void I2CStart();32. extern void I2CStop()

13、;33. extern bit I2CWrite(unsigned char dat);34.35. void main()36. EA = 1; /開(kāi)總中斷37. ConfigTimer0(1); /配置 T0 定時(shí) 1ms38. pWave = SinWave; /默認(rèn)正弦波39. SetWaveFreq(10); /默認(rèn)頻率 10Hz40. 41. while (1)42. KeyDriver(); /調(diào)用按鍵驅(qū)動(dòng)43. 44. 45. /* 按鍵動(dòng)作函數(shù),根據(jù)鍵碼執(zhí)行相應(yīng)的操作,keycode-按鍵鍵碼 */46. void KeyAction(unsigned char keycod

14、e)47. static unsigned char i = 0;48. if (keycode = 0x26) /向上鍵,切換波形49. /在 3 種波形間循環(huán)切換50. if (i = 0)51. i = 1;52. pWave = TriWave;53. else if (i = 1)54. i = 2;55. pWave = SawWave;56. else57. i = 0;58. pWave = SinWave;59. 60. 61. 62.63. /* 設(shè)置 DAC 輸出值,val-設(shè)定值 */64. void SetDACOut(unsigned char val)65. I2

15、CStart();66. if (!I2CWrite(0x48<<1) /尋址 PCF8591,如未應(yīng)答,則停止操作并返回67. I2CStop();68. return;69. 70. I2CWrite(0x40); /寫(xiě)入控制字節(jié)71. I2CWrite(val); /寫(xiě)入 DA 值72. I2CStop();73. 74. /* 設(shè)置輸出波形的頻率,freq-設(shè)定頻率 */75. void SetWaveFreq(unsigned char freq)76. unsigned long tmp;77. tmp = (11059200/12) / (freq*32); /定時(shí)器

16、計(jì)數(shù)頻率,是波形頻率的 32 倍78. tmp = 65536 - tmp; /計(jì)算定時(shí)器重載值79. tmp = tmp + 33; /修正中斷響應(yīng)延時(shí)造成的誤差80. T1RH = (unsigned char)(tmp>>8); /定時(shí)器重載值拆分為高低字節(jié)81. T1RL = (unsigned char)tmp;82. TMOD &= 0x0F; /清零 T1 的控制位83. TMOD |= 0x10; /配置 T1 為模式 184. TH1 = T1RH; /加載 T1 重載值85. TL1 = T1RL;86. ET1 = 1; /使能 T1 中斷87. PT

17、1 = 1; /設(shè)置為高優(yōu)先級(jí)88. TR1 = 1; /啟動(dòng) T189. 90. /* 配置并啟動(dòng) T0,ms-T0 定時(shí)時(shí)間 */91. void ConfigTimer0(unsigned int ms)92. unsigned long tmp; /臨時(shí)變量93. tmp = 11059200 / 12; /定時(shí)器計(jì)數(shù)頻率94. tmp = (tmp * ms) / 1000; /計(jì)算所需的計(jì)數(shù)值95. tmp = 65536 - tmp; /計(jì)算定時(shí)器重載值96. tmp = tmp + 28;/補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差97. T0RH = (unsigned char)(tmp&

18、gt;>8); /定時(shí)器重載值拆分為高低字節(jié)98. T0RL = (unsigned char)tmp;99. TMOD &= 0xF0; /清零 T0 的控制位100. TMOD |= 0x01; /配置 T0 為模式 1101. TH0 = T0RH; /加載 T0 重載值102. TL0 = T0RL;103. ET0 = 1; /使能 T0 中斷104. TR0 = 1; /啟動(dòng) T0105. 106. /* T0 中斷服務(wù)函數(shù),執(zhí)行按鍵掃描 */107. void InterruptTimer0() interrupt 1108. TH0 = T0RH; /重新加載重載值109. TL0

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論