版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> DSP硬件電路設計基礎 課程設計</p><p> 設計名稱 正弦信號發(fā)生器的設計 </p><p> 專業(yè)班級 </p><p> 學 號 </p><p> 姓 名
2、 </p><p> 指導教師 </p><p><b> 課程設計任務書</b></p><p> 注:1.課程設計完成后,學生提交的歸檔文件應按照:封面—任務書—說明書—圖紙的順序進行裝訂上交(大張圖紙不必裝訂)</p><p> 2.可根據(jù)實際內容需要續(xù)
3、表,但應保持原格式不變。</p><p> 日期:2014-12-10 </p><p><b> 設計題目 </b></p><p> 正弦波信號發(fā)生器
4、</p><p><b> 設計目的 </b></p><p> 學會使用CCS(Code Composer Studio)集成開發(fā)環(huán)境軟件,在此集成開發(fā)環(huán)境下完成工程項目創(chuàng)建,程序編寫,編譯,鏈接,調試以及數(shù)據(jù)的分析。同時完成一個正弦波信號發(fā)生器的程序的編寫,并在集成開發(fā)環(huán)境下進行模擬運行,觀察結果。
5、 </p><p><b> 設計內容 </b></p><p> 編寫一個產(chǎn)生正弦波信號的程序,在CCS軟件下進行模擬運行,觀察輸出結果。
6、 </p><p><b> 設計原理 </b></p><p> 正弦波信號發(fā)生器已被廣泛地應用于通信、儀器儀表和工業(yè)控制等領域的信號處理系統(tǒng)中。通常有兩種方法可以產(chǎn)生正弦波,分別為查表法和泰勒級數(shù)展開法。查表法是通過查表的方式來實現(xiàn)正弦波,主要用于對精度要求不很高的場合。泰勒級數(shù)展開法是
7、根據(jù)泰勒展開式進行計算來實現(xiàn)正弦信號,它能精確地計算出一個角度的正弦和余弦值,且只需要較小的存儲空間。本次課程設計只要使用泰勒級數(shù)展開法來實現(xiàn)正弦波信號。 </p><p> 1. 產(chǎn)生正弦波的算法 </p&g
8、t;<p> 在高等數(shù)學中,正弦函數(shù)和余弦函數(shù)可以展開成泰勒級數(shù),其表達式為 </p><p> 若要計算一個角度x的正弦和余弦值,可取泰勒級數(shù)的前5項進行近似計算。
9、 </p><p> 由上述兩個式子可以推導出遞推公式,即
10、 </p><p> sin(nx)=2cos(x)sin[(n-1)x]-sin[(n-2)x] </p&
11、gt;<p> cos(nx)=2cos(x)sin[(n-1)x]-cos[(n-2)x] </p><p> 由遞推公式可以看出,在計算正弦和余弦值時,不僅需要已知cos(x),而且還需要sin[(n-1)x]、si
12、n[(n-2)x]和cos[(n-2)x]。 </p><p> 2. 正弦波的實現(xiàn) </p><p> ?、庞嬎阋粋€角度的正弦值 </p><p> 利用泰
13、勒級數(shù)的展開式,可計算一個角度x的正弦值,并采用子程序的調用方式。在調用前先在數(shù)據(jù)存儲器d_xs單元中存放x的弧度值,計算結果存放在d_sinx單元中。 </p><p> ⑵計算一個角度的余弦值 </p>&
14、lt;p> 利用余弦函數(shù)展開的泰勒級數(shù)的前五項計算一個角度的余弦值,可采用子程序的調用方式來實現(xiàn)。調用前先將x弧度值放在數(shù)據(jù)存儲器d_xc單元中,計算結果存放在d_cosx單元中。 </p><p><b> ⑶正弦波
15、的實現(xiàn) </b></p><p> 利用計算一個角度的正弦值和余弦值程序可實現(xiàn)正弦波。其實現(xiàn)步驟如下: 第一步:利用sin_start和cos_start子程序,計算??45°~0°(間隔為?0.5°)的正弦和余弦值; </p><p> 第二步:利用sin(2x)=2sin(x)cos(x)公式,計算??90
16、176;~0°的正弦值(間隔為1°); 第三步:通過復制,獲得359°~0°的正弦值; </p><p> 第四步:將359°~0°的正弦值重復從PA口輸出,便可得到正弦波。
17、 </p><p> 在實際應用中,正弦波是通過D/A口輸出的。選擇每個正弦周期中的樣點數(shù)、改變每個樣點之間的延遲,就能夠產(chǎn)生不同頻率的波形,也可以利用軟件改變波形的幅度以及起始相位。 </p><
18、p><b> 總體方案設計 </b></p><p> 1. 總體實現(xiàn)方案 </p><p> 我們知道一個角度為x的正弦和余弦函數(shù),都可以展開為泰勒級數(shù),且其前五項可以看為:
19、 </p><p> 本程序的編程思想是這樣的,正弦波的波形可以看為由無數(shù)點組成,這些點 與x軸的每一個角度值相對應,那么我們可以利用DSP處理器處理大量重復計算的優(yōu)勢來計算,x軸每一點對應的y軸的值(在x軸取360個點來進行逼近),由于程序的編制采用小數(shù)形式,其弧度大于1的正弦值得不到,這就對正弦波的產(chǎn)生造成了障礙??捎捎谡也ǖ奶厥獾膶ΨQ形式給程序的編制找到了出口。 Sin(∏/4
20、)的弧度為0.7854<1,</p><p> 即0~∏/4之間的任意正弦、余弦值可以利用匯編程 序得到N又可以利用公式:sin(2a)=2sin(a)cos(a)? ?得到0~∏/2?之間的正弦值。而 0~∏/2?之間的正弦曲線與∏/2~∏之間的正弦曲線通過x=∏/2這條軸左右對稱,那么就可以得到∏/2~∏的正弦值,而0~∏的正弦曲線的相反數(shù)通過x=∏這條軸與∏~2∏左右對稱。這樣∏~2∏的正弦值也得到
21、了。一個周期內完整的正弦波就得到了。正弦波產(chǎn)生的流程圖如下: </p><p> 2. 具體實現(xiàn)步驟 </p><p> 本課程設計需要使用C54X匯編語言產(chǎn)生正弦波,并通過 CCS的圖形顯示工具觀察波形。設
22、計分以下幾步完成: 啟動 CCS,操作如下: </p><p> 1.建立新的工程文件:點擊Project→New,保存文件名為sinx.pjt。 </p><p> 2.建立匯編源程序:點擊File→New→Source File菜單命令,打開一個空白文檔,將匯編源程序逐條輸入后,單擊Flie→Save菜單命令,文件類型保存為(*.asm),單擊“保存”按鈕,以上匯編程序被存盤。
23、</p><p> 3.建立連接命令文件:點擊File→New→Source File菜單命令,打開一個空白文檔,將鏈接命令文件逐條輸入后,單擊Flie→Save菜單命令,文件類型保存為(*.cmd),單擊“保存”按鈕,以上鏈接命令文件被存盤。 </p><p> 4.選擇 Project 菜單中的Add File to Project 選項,將匯編源程序sin.asm和鏈接定位sin
24、.cmd文件依次添加到工程文件中。 </p><p> 5.選擇 Project 菜單中的 Options 選項,并選擇 build options 項來修改或添加編譯、連接中使用的參數(shù)。選擇Linker 窗口,在“Output Filename”欄中寫入輸出 OUT 文件的名字,如 sin.out,還可以設置生成的 map文件名。 </p><p> 6.完成匯編,編譯和鏈接,正確產(chǎn)
25、生.out文件:點擊Project菜單中的Rebuild all,請注意在監(jiān)視窗口顯示的匯編,編譯和鏈接的相關信息。如果沒有錯誤,將產(chǎn)生sin.out文件;如果有錯,在監(jiān)視窗口以紅色字體顯示出錯誤行,用鼠標雙擊該行,光標跳將至源程序相應的出錯行。修改錯誤后,重新匯編鏈接。</p><p> 7.在 Project 選項中打開sin.pjt 文件,使用 Build 選項完成編譯、連接。 </p>
26、<p> 8.使用 File 菜單中的 Load Program 將 OUT 文件裝入。然后選擇 Debug→Run,程序執(zhí)行過程中可以使用 Debug →Halt 暫停程序的執(zhí)行。 </p><p> 9.選擇 View -> Graph -> Time/Frequency菜單打開一個圖形顯示窗口。將 “Start Address”項改為地址sin_x,將“Acquisition Bu
27、ffer Size”項設置為360,將“Display Data Size”項設置為360,將“DSP Data Type”改為“16-bit signed integer” 。 </p><p><b> 主要參數(shù)
28、</b></p><p> 1.sin(theta)=x(1-x^2/2*3(1-x^2/4*5(1-x^2/6*7(1-x^2/8*9))))</p><p> 2. cos(theta)=1-x^2/2*3(1-x^2/4*5(1-x^2/6*7(1-x^2/8*9))) 3. sin(2*theta)=2*sin(theta)*cos(t
29、heta) </p><p><b> 源程序 </b></p><p> 1. 產(chǎn)生正弦波程序清單sin.asm
30、 </p><p><b> .mmregs</b></p><p> .def start</p><p> .def d_xs,d_sinx,d_xc,d_cosx,sinx,cosx</p>
31、<p> sin_x: .usect "sin_x",360</p><p> STACK: .usect "STACK",10H</p><p> k_theta .set 286 ;theta=pi/360(0.5deg)</p><p>&l
32、t;b> start:</b></p><p><b> .text</b></p><p> STM #STACK+10H,SP</p><p> STM k_theta,AR0</p><p> STM 0,AR1</p><p> STM #si
33、n_x,AR6</p><p> STM #90,BRC</p><p> RPTB loop1-1</p><p> LDM AR1,A</p><p> LD #d_xs,DP</p><p> STL A,@d_xs</p><p> STL A,
34、@d_xc</p><p> CALL sinx ;d_sinx=sin(x)</p><p> CALL cosx ;d_cosx=cos(x)</p><p> LD #d_sinx,DP</p><p> LD @d_sinx,16,A ;A=sin(x)
35、</p><p> MPYA @d_cosx ;B=sin(x)*cos(x)</p><p> STH B,1,*AR6+ ;AR6----2*sin(x)</p><p> MAR *AR1+0</p><p> loop1: STM #sin_x+89, AR7 ;sin9
36、1(deg.)-sin179(deg.)</p><p> STM #88,BRC</p><p> RPTB loop2-1</p><p> LD *AR7-,A</p><p> STL A,*AR6+</p><p> loop2: STM #179,BRC
37、;sin180(deg.)-sin359(deg.)</p><p> STM #sin_x,AR7</p><p> RPTB loop3-1</p><p> LD *AR7+,A</p><p><b> NEG A</b></p><p> STL A,*AR
38、6+</p><p> loop3: STM #sin_x,AR6 ;generate sin wave</p><p> STM #1,AR0</p><p> STM #360,BK</p><p> B loop3</p><p><b> sinx:<
39、;/b></p><p> .def d_xs,d_sinx</p><p><b> .data</b></p><p> table_s .word 01C7H ;C1=1/(8*9)</p><p> .word 030BH ;C2=1/(6*7)&l
40、t;/p><p> .word 0666H ;C3=1/(4*5)</p><p> .word 1556H ;C4=1/(2*3)</p><p> d_coef_s .usect "coef_s",4</p><p> d_xs .usect &qu
41、ot;sin_vars",1</p><p> d_squr_xs .usect "sin_vars",1</p><p> d_temp_s .usect "sin_vars",1</p><p> d_sinx .usect "sin_vars",1</
42、p><p> d_l_s .usect "sin_vars",1</p><p><b> .text</b></p><p> SSBX FRCT</p><p> STM #d_coef_s,AR5 ;move coeffs table_s<
43、/p><p><b> RPT #3</b></p><p> MVPD #table_s,*AR5+</p><p> STM #d_coef_s,AR3</p><p> STM #d_xs,AR2</p><p> STM #d_l_s,AR4</p>&
44、lt;p> ST #7FFFH,d_l_s</p><p> SQUR *AR2+,A ;A=x^2</p><p> ST A,*AR2 ;(AR2)=x^2</p><p> ||LD *AR4,B ;B=1</p>
45、<p> MASR *AR2+,*AR3+,B,A ;A=1-x^2/72,T=x^2</p><p> MPYA A ;A=T*A=x^2(1-x^2/72)</p><p> STH A,*AR2 ;(d_temp)=x^2(1-x^2/72)</p>&l
46、t;p> MASR *AR2-,*AR3+,B,A ;A=1-x^2/42(1-x^2/72);T=x^2(1-x^2/72)</p><p> MPYA *AR2+ ;B=x^2(1-x^2/42(1-x^2/72))</p><p> ST B,*AR2 ;(d_temp)=x^2
47、(1-x^2/42(1-x^2/72))</p><p> ||LD *AR4,B ;B=1</p><p> MASR *AR2-,*AR3+,B,A ;A=1-x^2/20(1-x^2/42(1-x^2/72))</p><p> MPYA *AR2+ ;B=x
48、^2(1-x^2/20(1-x^2/42(1-x^2/72)))</p><p> ST B,*AR2 ;(d_temp)=B</p><p> ||LD *AR4,B ;B=1</p><p> MASR *AR2-,*AR3+,B,A ;A=1-x^2/6(
49、1-x^2/20(1-x^2/42(1-x^2/72)))</p><p> MPYA d_xs ;B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))))</p><p> STH B,d_sinx ;sin(theta)</p><p><b>
50、 RET</b></p><p> cosx: </p><p> .def d_xc,d_cosx</p><p> d_coef_c .usect "coef_c",4</p><p><b> .data</b></p><p>
51、; table_c .word 0249H ;C1=1/(7*8)</p><p> .word 0444H ;C2=1/(5*6)</p><p> .word 0AABH ;C3=1/(3*4)</p><p> .word 4000H ;C4=1/2</p
52、><p> d_xc .usect "cos_vars",1</p><p> d_squr_xc .usect "cos_vars",1</p><p> d_temp_c .usect "cos_vars",1</p><p> d_cosx
53、 .usect "cos_vars",1</p><p> c_l_c .usect "cos_vars",1</p><p><b> .text</b></p><p> SSBX FRCT</p><p> STM #d_coef_c,A
54、R5 ;move coeffs table_c</p><p><b> RPT #3</b></p><p> MVPD #table_c,*AR5+</p><p> STM #d_coef_c,AR3</p><p> STM #d_xc,AR2</p><
55、p> STM #c_l_c,AR4</p><p> ST #7FFFH,c_l_c</p><p> SQUR *AR2+,A ;A=x^2</p><p> ST A,*AR2 ;(AR2)=x^2</p><p> ||LD *A
56、R4,B ;B=1</p><p> MASR *AR2+,*AR3+,B,A ;A=1-x^2/56,T=x^2</p><p> MPYA A ;A=T*A=x^2(1-x^2/56)</p><p> STH A,*AR2
57、;(d_temp)=x^2(1-x^2/56)</p><p> MASR *AR2-,*AR3+,B,A ;A=1-x^2/30(1-x^2/56); T=x^2(1-x^2/56)</p><p> MPYA *AR2+ ;B=x^2(1-x^2/30(1-x^2/56))</p><p> ST
58、 B,*AR2 ;(d_temp)=x^2(1-x^2/30(1-x^2/56))</p><p> ||LD *AR4,B ;B=1</p><p> MASR *AR2-,*AR3+,B,A ;A=1-x^2/12(1-x^2/30(1-x^2/56))</p><p>
59、 SFTA A,-1,A ;-1/2</p><p><b> NEG A</b></p><p> MPYA *AR2+ ;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))</p><p> MAR *AR2+</p&g
60、t;<p><b> RETD</b></p><p> ADD *AR4,16,B ;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))</p><p> STH B,*AR2 ;cos(theta)</p><p><b&g
61、t; RET</b></p><p><b> .end</b></p><p> 2. 產(chǎn)生連接程序清單sin.cmd</p><p><b> MEMORY</b></p><p><b> {</b></p><p><
62、b> PAGE 0:</b></p><p> EPROM: org=0E000H, len=1000H</p><p> VECS: org=0FF80H, len=0080H</p><p><b> PAGE 1:</b></p><p> SPRAM: org=0060H,
63、 len=0020H</p><p> DARAM1: org=0080H, len=0010H</p><p> DARAM2: org=0090H, len=0010H</p><p> DARAM3: org=0200H, len=0200H</p><p><b> }</b></p&
64、gt;<p><b> SECTIONS</b></p><p><b> {</b></p><p> .text :> EPROM PAGE 0</p><p> .data :> EPROM PAGE 0</p><p>
65、 STACK :> SPRAM PAGE 1</p><p> sin_vars :> DARAM1 PAGE 1</p><p> coef_s :> DARAM1 PAGE 1</p><p> cos_vars :> DARAM2 PAGE 1</p><
66、;p> coef_c :> DARAM2 PAGE 1</p><p> sin_x : align(512) {} > DARAM3 PAGE 1</p><p> .vectors :>VECS PAGE 0</p><p><b> }</b></p
67、><p><b> 設計仿真結果及分析</b></p><p> 在ccs集成環(huán)境中實現(xiàn)正弦波能夠起到防止干擾的作用,同時也大大地減小了波形的線性失真。同時我們也能從中看出ccs能夠精確地對各個角度進行計算得出相應的正弦值,幅度和頻率易于調節(jié),波形也較為穩(wěn)定,抗干擾能力較強。 最重要的是這種設計方案簡單可行,新穎實用,具有很高的實踐和推廣價值。 分析:通過不斷的發(fā)現(xiàn)錯
68、誤、改正錯誤和調試,最終得到了所希望的圖象,即正弦波信號。 </p><p><b> 設計總結 </b></p><p> 在本次課程設計過程中我學習到了許多課堂上無法學到的東西
69、。它能夠讓我對課堂上學到的知識進行查漏補缺,而且鍛煉了我的邏輯思考能力。 </p><p> 因為在課堂上使用匯編語言進行編程只是機械的復制所學的程序段,對于它的正確性以及它的功能無法知曉。但是通過CCS,我們可以達到上述目的,它是一款方便簡潔,實用性很強的軟件。在課堂上我們雖學過CCS如何使用,但真正操作
70、起來卻發(fā)現(xiàn)有些吃力。通過這次課程設計,讓我能夠熟練操作CCS,并對正弦波匯編程序也有了一定的了解。 </p><p> 其次,在拿到課設題目后,我首先查閱教材,在有了一定的了解后,開始尋找程序,并在CCS軟件上進行仿真,在這個過程中,最困難的便
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- dsp課程設計--正弦信號發(fā)生器的設計
- dsp課程設計--正弦信號發(fā)生器的設計
- dsp課程設計--正弦信號發(fā)生器的設計
- dsp課程設計---正弦波信號發(fā)生器
- dsp課程設計---正弦波信號發(fā)生器報告
- 正弦波信號發(fā)生器課程設計
- dsp課程設計——信號發(fā)生器(方波)
- 基于dsp正弦波發(fā)生器課程設計
- eda課程設計——基于dds的正弦信號發(fā)生器設計
- 幅值可調的正弦信號發(fā)生器 課程設計
- 高壓正弦發(fā)生器課程設計
- 幅值可調的正弦信號發(fā)生器課程設計
- eda課程設計報告---正弦函數(shù)信號發(fā)生器的設計
- dsp課程設計--多波形信號發(fā)生器
- 幅值可調的正弦信號發(fā)生器 課程設計論文
- 基于dsp技術的正弦信號發(fā)生課程設計
- 信號發(fā)生器課程設計----函數(shù)信號發(fā)生器
- 正弦波發(fā)生器課程設計
- 信號發(fā)生器課程設計報告--函數(shù)信號發(fā)生器的設計
- 信號發(fā)生器課程設計---函數(shù)發(fā)生器的設計
評論
0/150
提交評論