版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> DSP硬件電路設(shè)計(jì)基礎(chǔ) 課程設(shè)計(jì)</p><p> 設(shè)計(jì)名稱 正弦信號發(fā)生器的設(shè)計(jì) </p><p> 專業(yè)班級 </p><p> 學(xué) 號 </p><p> 姓 名
2、 </p><p> 指導(dǎo)教師 </p><p><b> 課程設(shè)計(jì)任務(wù)書</b></p><p> 注:1.課程設(shè)計(jì)完成后,學(xué)生提交的歸檔文件應(yīng)按照:封面—任務(wù)書—說明書—圖紙的順序進(jìn)行裝訂上交(大張圖紙不必裝訂)</p><p> 2.可根據(jù)實(shí)際內(nèi)容需要續(xù)
3、表,但應(yīng)保持原格式不變。</p><p> 日期:2014-12-10 </p><p><b> 設(shè)計(jì)題目 </b></p><p> 正弦波信號發(fā)生器
4、</p><p><b> 設(shè)計(jì)目的 </b></p><p> 學(xué)會使用CCS(Code Composer Studio)集成開發(fā)環(huán)境軟件,在此集成開發(fā)環(huán)境下完成工程項(xiàng)目創(chuàng)建,程序編寫,編譯,鏈接,調(diào)試以及數(shù)據(jù)的分析。同時(shí)完成一個(gè)正弦波信號發(fā)生器的程序的編寫,并在集成開發(fā)環(huán)境下進(jìn)行模擬運(yùn)行,觀察結(jié)果。
5、 </p><p><b> 設(shè)計(jì)內(nèi)容 </b></p><p> 編寫一個(gè)產(chǎn)生正弦波信號的程序,在CCS軟件下進(jìn)行模擬運(yùn)行,觀察輸出結(jié)果。
6、 </p><p><b> 設(shè)計(jì)原理 </b></p><p> 正弦波信號發(fā)生器已被廣泛地應(yīng)用于通信、儀器儀表和工業(yè)控制等領(lǐng)域的信號處理系統(tǒng)中。通常有兩種方法可以產(chǎn)生正弦波,分別為查表法和泰勒級數(shù)展開法。查表法是通過查表的方式來實(shí)現(xiàn)正弦波,主要用于對精度要求不很高的場合。泰勒級數(shù)展開法是
7、根據(jù)泰勒展開式進(jìn)行計(jì)算來實(shí)現(xiàn)正弦信號,它能精確地計(jì)算出一個(gè)角度的正弦和余弦值,且只需要較小的存儲空間。本次課程設(shè)計(jì)只要使用泰勒級數(shù)展開法來實(shí)現(xiàn)正弦波信號。 </p><p> 1. 產(chǎn)生正弦波的算法 </p&g
8、t;<p> 在高等數(shù)學(xué)中,正弦函數(shù)和余弦函數(shù)可以展開成泰勒級數(shù),其表達(dá)式為 </p><p> 若要計(jì)算一個(gè)角度x的正弦和余弦值,可取泰勒級數(shù)的前5項(xiàng)進(jìn)行近似計(jì)算。
9、 </p><p> 由上述兩個(gè)式子可以推導(dǎo)出遞推公式,即
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> 由遞推公式可以看出,在計(jì)算正弦和余弦值時(shí),不僅需要已知cos(x),而且還需要sin[(n-1)x]、si
12、n[(n-2)x]和cos[(n-2)x]。 </p><p> 2. 正弦波的實(shí)現(xiàn) </p><p> ?、庞?jì)算一個(gè)角度的正弦值 </p><p> 利用泰
13、勒級數(shù)的展開式,可計(jì)算一個(gè)角度x的正弦值,并采用子程序的調(diào)用方式。在調(diào)用前先在數(shù)據(jù)存儲器d_xs單元中存放x的弧度值,計(jì)算結(jié)果存放在d_sinx單元中。 </p><p> ?、朴?jì)算一個(gè)角度的余弦值 </p>&
14、lt;p> 利用余弦函數(shù)展開的泰勒級數(shù)的前五項(xiàng)計(jì)算一個(gè)角度的余弦值,可采用子程序的調(diào)用方式來實(shí)現(xiàn)。調(diào)用前先將x弧度值放在數(shù)據(jù)存儲器d_xc單元中,計(jì)算結(jié)果存放在d_cosx單元中。 </p><p><b> ?、钦也?/p>
15、的實(shí)現(xiàn) </b></p><p> 利用計(jì)算一個(gè)角度的正弦值和余弦值程序可實(shí)現(xiàn)正弦波。其實(shí)現(xiàn)步驟如下: 第一步:利用sin_start和cos_start子程序,計(jì)算??45°~0°(間隔為?0.5°)的正弦和余弦值; </p><p> 第二步:利用sin(2x)=2sin(x)cos(x)公式,計(jì)算??90
16、176;~0°的正弦值(間隔為1°); 第三步:通過復(fù)制,獲得359°~0°的正弦值; </p><p> 第四步:將359°~0°的正弦值重復(fù)從PA口輸出,便可得到正弦波。
17、 </p><p> 在實(shí)際應(yīng)用中,正弦波是通過D/A口輸出的。選擇每個(gè)正弦周期中的樣點(diǎn)數(shù)、改變每個(gè)樣點(diǎn)之間的延遲,就能夠產(chǎn)生不同頻率的波形,也可以利用軟件改變波形的幅度以及起始相位。 </p><
18、p><b> 總體方案設(shè)計(jì) </b></p><p> 1. 總體實(shí)現(xiàn)方案 </p><p> 我們知道一個(gè)角度為x的正弦和余弦函數(shù),都可以展開為泰勒級數(shù),且其前五項(xiàng)可以看為:
19、 </p><p> 本程序的編程思想是這樣的,正弦波的波形可以看為由無數(shù)點(diǎn)組成,這些點(diǎn) 與x軸的每一個(gè)角度值相對應(yīng),那么我們可以利用DSP處理器處理大量重復(fù)計(jì)算的優(yōu)勢來計(jì)算,x軸每一點(diǎn)對應(yīng)的y軸的值(在x軸取360個(gè)點(diǎn)來進(jìn)行逼近),由于程序的編制采用小數(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、了。一個(gè)周期內(nèi)完整的正弦波就得到了。正弦波產(chǎn)生的流程圖如下: </p><p> 2. 具體實(shí)現(xiàn)步驟 </p><p> 本課程設(shè)計(jì)需要使用C54X匯編語言產(chǎn)生正弦波,并通過 CCS的圖形顯示工具觀察波形。設(shè)
22、計(jì)分以下幾步完成: 啟動 CCS,操作如下: </p><p> 1.建立新的工程文件:點(diǎn)擊Project→New,保存文件名為sinx.pjt。 </p><p> 2.建立匯編源程序:點(diǎn)擊File→New→Source File菜單命令,打開一個(gè)空白文檔,將匯編源程序逐條輸入后,單擊Flie→Save菜單命令,文件類型保存為(*.asm),單擊“保存”按鈕,以上匯編程序被存盤。
23、</p><p> 3.建立連接命令文件:點(diǎn)擊File→New→Source File菜單命令,打開一個(gè)空白文檔,將鏈接命令文件逐條輸入后,單擊Flie→Save菜單命令,文件類型保存為(*.cmd),單擊“保存”按鈕,以上鏈接命令文件被存盤。 </p><p> 4.選擇 Project 菜單中的Add File to Project 選項(xiàng),將匯編源程序sin.asm和鏈接定位sin
24、.cmd文件依次添加到工程文件中。 </p><p> 5.選擇 Project 菜單中的 Options 選項(xiàng),并選擇 build options 項(xiàng)來修改或添加編譯、連接中使用的參數(shù)。選擇Linker 窗口,在“Output Filename”欄中寫入輸出 OUT 文件的名字,如 sin.out,還可以設(shè)置生成的 map文件名。 </p><p> 6.完成匯編,編譯和鏈接,正確產(chǎn)
25、生.out文件:點(diǎn)擊Project菜單中的Rebuild all,請注意在監(jiān)視窗口顯示的匯編,編譯和鏈接的相關(guān)信息。如果沒有錯(cuò)誤,將產(chǎn)生sin.out文件;如果有錯(cuò),在監(jiān)視窗口以紅色字體顯示出錯(cuò)誤行,用鼠標(biāo)雙擊該行,光標(biāo)跳將至源程序相應(yīng)的出錯(cuò)行。修改錯(cuò)誤后,重新匯編鏈接。</p><p> 7.在 Project 選項(xiàng)中打開sin.pjt 文件,使用 Build 選項(xiàng)完成編譯、連接。 </p>
26、<p> 8.使用 File 菜單中的 Load Program 將 OUT 文件裝入。然后選擇 Debug→Run,程序執(zhí)行過程中可以使用 Debug →Halt 暫停程序的執(zhí)行。 </p><p> 9.選擇 View -> Graph -> Time/Frequency菜單打開一個(gè)圖形顯示窗口。將 “Start Address”項(xiàng)改為地址sin_x,將“Acquisition Bu
27、ffer Size”項(xiàng)設(shè)置為360,將“Display Data Size”項(xiàng)設(shè)置為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> 設(shè)計(jì)仿真結(jié)果及分析</b></p><p> 在ccs集成環(huán)境中實(shí)現(xiàn)正弦波能夠起到防止干擾的作用,同時(shí)也大大地減小了波形的線性失真。同時(shí)我們也能從中看出ccs能夠精確地對各個(gè)角度進(jìn)行計(jì)算得出相應(yīng)的正弦值,幅度和頻率易于調(diào)節(jié),波形也較為穩(wěn)定,抗干擾能力較強(qiáng)。 最重要的是這種設(shè)計(jì)方案簡單可行,新穎實(shí)用,具有很高的實(shí)踐和推廣價(jià)值。 分析:通過不斷的發(fā)現(xiàn)錯(cuò)
68、誤、改正錯(cuò)誤和調(diào)試,最終得到了所希望的圖象,即正弦波信號。 </p><p><b> 設(shè)計(jì)總結(jié) </b></p><p> 在本次課程設(shè)計(jì)過程中我學(xué)習(xí)到了許多課堂上無法學(xué)到的東西
69、。它能夠讓我對課堂上學(xué)到的知識進(jìn)行查漏補(bǔ)缺,而且鍛煉了我的邏輯思考能力。 </p><p> 因?yàn)樵谡n堂上使用匯編語言進(jìn)行編程只是機(jī)械的復(fù)制所學(xué)的程序段,對于它的正確性以及它的功能無法知曉。但是通過CCS,我們可以達(dá)到上述目的,它是一款方便簡潔,實(shí)用性很強(qiáng)的軟件。在課堂上我們雖學(xué)過CCS如何使用,但真正操作
70、起來卻發(fā)現(xiàn)有些吃力。通過這次課程設(shè)計(jì),讓我能夠熟練操作CCS,并對正弦波匯編程序也有了一定的了解。 </p><p> 其次,在拿到課設(shè)題目后,我首先查閱教材,在有了一定的了解后,開始尋找程序,并在CCS軟件上進(jìn)行仿真,在這個(gè)過程中,最困難的便
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- dsp課程設(shè)計(jì)--正弦信號發(fā)生器的設(shè)計(jì)
- dsp課程設(shè)計(jì)--正弦信號發(fā)生器的設(shè)計(jì)
- dsp課程設(shè)計(jì)--正弦信號發(fā)生器的設(shè)計(jì)
- dsp課程設(shè)計(jì)---正弦波信號發(fā)生器
- dsp課程設(shè)計(jì)---正弦波信號發(fā)生器報(bào)告
- 正弦波信號發(fā)生器課程設(shè)計(jì)
- dsp課程設(shè)計(jì)——信號發(fā)生器(方波)
- 基于dsp正弦波發(fā)生器課程設(shè)計(jì)
- eda課程設(shè)計(jì)——基于dds的正弦信號發(fā)生器設(shè)計(jì)
- 幅值可調(diào)的正弦信號發(fā)生器 課程設(shè)計(jì)
- 高壓正弦發(fā)生器課程設(shè)計(jì)
- 幅值可調(diào)的正弦信號發(fā)生器課程設(shè)計(jì)
- eda課程設(shè)計(jì)報(bào)告---正弦函數(shù)信號發(fā)生器的設(shè)計(jì)
- dsp課程設(shè)計(jì)--多波形信號發(fā)生器
- 幅值可調(diào)的正弦信號發(fā)生器 課程設(shè)計(jì)論文
- 基于dsp技術(shù)的正弦信號發(fā)生課程設(shè)計(jì)
- 信號發(fā)生器課程設(shè)計(jì)----函數(shù)信號發(fā)生器
- 正弦波發(fā)生器課程設(shè)計(jì)
- 信號發(fā)生器課程設(shè)計(jì)報(bào)告--函數(shù)信號發(fā)生器的設(shè)計(jì)
- 信號發(fā)生器課程設(shè)計(jì)---函數(shù)發(fā)生器的設(shè)計(jì)
評論
0/150
提交評論