当前位置:文档之家› 正弦信号发生器实验

正弦信号发生器实验

目录一、设计目的二、设计内容三、设计原理四、总体方案设计五、主要参数六、源程序七、实验结果及分析八、设计总结实验名称:正弦信号发生器一.实验目的:(1) 了解DSP及DSP控制器的发展过程及其特点。

(2) 较熟练地在硬件上掌握DSP及DSP硬件器的结构、各部件基本工作原理。

(3) 熟悉CCS集成开发环境,并能较熟练的对CCS的开发系统进行使用。

(4) 熟悉用C语言、汇编语言编程DSP源程序(5) 学习DSP程序的调试及编写,及运用观察变量的方法查看程序的运行情况。

(6) 掌握工程设计的流程及方法。

二.实验内容:用PMS320C5402的汇编语言程序设计正弦信号发生器,大大方便了程序的编辑,调试和加快了程序的运行速度。

三.实验原理正弦波信号发生器已被广泛地应用于通信、仪器仪表和工业控制等领域的信号处理系统中。

通常有两种方法可以产生正弦波,分别为查表法和泰勒级数展开法。

查表法是通过查表的方式来实现正弦波,主要用于对精度要求不很高的场合。

泰勒级数展开法是根据泰勒展开式进行计算来实现正弦信号,它能精确地计算出一个角度的正弦和余弦值,且只需要较小的存储空间。

本次主要用泰勒级数展开法来实现正弦波信号。

产生正弦波的算法在高等数学中,正弦函数和余弦函数可以展开成泰勒级数,其表达式为:sin(x)=x-(x^3/3!)+(x^5/5!)-(x^7/7)+(x^9/9)-…cos(x)=1-(x^2/2!)+(x^4/4!)-(x^6/6!)+(x^8/8!)-…若要计算一个角度x的正弦和余弦值,可取泰勒级数的前5项进行近似计算。

sin(x)=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!=x(1-x^2/2*3(1-x^2/4*5(1-x^2/6*7(1-x^2/8*9)))) (式1) cos(x) =1-x^2/2!+x^4/4!-x^6/6!+x^8/8!=1-x^2/2(1-x^2/3*4(1-x^2/5*6(1-x^2/7*8))) (式2)由(式1)和(式2)可推导出递推公式,即sin(nx)=2c os(x)sin[(n-1)x]-sin[(n-2)x] (式3)cos(nx)=2cos(x)sin[(n-1)x]-cos[(n-2)x] (式4)由递推公式可以看出,在计算正弦余弦值时,不仅需要已知的cos(x),而且还需要sin(n-1)x,sin(n-2)x和c os(n-2)x。

利用计算一个角度的正余弦值程序可实现正弦波。

其实现步骤如下:第一步:利用计算正弦函数和余弦函数的子程序,计算0度~45度(间隔为0.5度)的正弦和余弦值;第二步:利用sin(2x)=2sin(x)cos(x)公式,计算0度~90度的正弦值(间隔为1度);第三步:通过复制,获得0度~359度的正弦值;第四步:将0度~359度的正弦值重复从PA口输出,便可得到正弦波。

四.总体方案设计:1.基于DSP的特点,设计用TMS320C5402的DSP作为正弦信号发生器的核心控制芯片;2.用泰勒级数展开法实现正弦波的信号;3.设置时域观察窗口,得到滤波后的波形图;4.设置频域观察窗口,得到滤波后的波形图。

五.主要参数coff_x, squr_x,temp,sinx,cosx六.源程序1.正弦波的实现.mmregs.def start.def d_xs,d_sinx,d_xc,d_cosx,sinx,cosxsin_x: .usect "sin_x",360ST ACK: .usect "ST ACK",10Hk_theta .set 286 ;theta=pi/360(0.5deg)start:.textSTM #ST ACK+10H,SPSTM k_theta,AR0STM 0,AR1STM #sin_x,AR6STM #90,BRCRPTB loop1-1LDM AR1,ALD #d_xs,DPSTL A,@d_xsSTL A,@d_xcCALL sinx ;d_sinx=sin(x)CALL cosx ;d_cosx=cos(x)LD #d_sinx,DPLD @d_sinx,16,A;A=sin(x)MPYA @d_cosx ;B=sin(x)*cos(x)STH B,1,*AR6+ ;AR6----2*sin(x)MAR *AR1+0loop1: STM #sin_x+89, AR7 ;sin91(deg.)-sin179(deg.)STM #88,BRCRPTB loop2-1LD *AR7-,ASTL A,*AR6+loop2: STM #179,BRC ;sin180(deg.)-sin359(deg.)STM #sin_x,AR7RPTB loop3-1LD *AR7+,ANEG ASTL A,*AR6+loop3: STM #sin_x,AR6 ;generate sin waveSTM #1,AR0STM #360,BKB loop32.计算sinx的值的程序sinx:.def d_xs,d_sinx.datatable_s .word 01C7H ;C1=1/(8*9).word 030BH ;C2=1/(6*7).word 0666H ;C3=1/(4*5).word 1556H ;C4=1/(2*3)d_coef_s .usect "coef_s",4d_xs .usect "sin_vars",1d_squr_xs .usect "sin_vars",1d_temp_s .usect "sin_vars",1d_sinx .usect "sin_vars",1d_l_s .usect "sin_vars",1.textSSBX FRCTSTM #d_coef_s,AR5 ;move coeffs table_sRPT #3MVPD #table_s,*AR5+STM #d_coef_s,AR3STM #d_xs,AR2STM #d_l_s,AR4ST #7FFFH,d_l_sSQUR *AR2+,A;A=x^2ST A,*AR2 ;(AR2)=x^2||LD *AR4,B ;B=1MASR *AR2+,*AR3+,B,A;A=1-x^2/72,T=x^2MPYA A ;A=T*A=x^2(1-x^2/72)STH A,*AR2 ;(d_temp)=x^2(1-x^2/72)MASR *AR2-,*AR3+,B,A;A=1-x^2/42(1-x^2/72);T=x^2(1-x^2/72)MPYA *AR2+ ;B=x^2(1-x^2/42(1-x^2/72))||LD *AR4,B ;B=1MASR *AR2-,*AR3+,B,A;A=1-x^2/20(1-x^2/42(1-x^2/72))MPYA *AR2+ ;B=x^2(1-x^2/20(1-x^2/42(1-x^2/72)))ST B,*AR2 ;(d_temp)=B||LD *AR4,B ;B=1MASR*AR2-,*AR3+,B,A;A=1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72)))MPYAd_xs ;B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))))STH B,d_sinx ;sin(theta)RET3.计算cosx的值的程序cosx:.def d_xc,d_cosxd_coef_c .usect "coef_c",4.datatable_c .word 0249H ;C1=1/(7*8).word 0444H ;C2=1/(5*6).word 0AABH ;C3=1/(3*4).word 4000H ;C4=1/2d_xc .usect "cos_vars",1d_squr_xc .usect "cos_vars",1d_temp_c .usect "cos_vars",1d_cosx .usect "cos_vars",1c_l_c .usect "cos_vars",1.textSSBX FRCTSTM #d_coef_c,AR5 ;move coeffs table_cRPT #3MVPD #table_c,*AR5+STM #d_coef_c,AR3STM #d_xc,AR2STM #c_l_c,AR4ST #7FFFH,c_l_cSQUR *AR2+,A;A=x^2ST A,*AR2 ;(AR2)=x^2||LD *AR4,B ;B=1MASR *AR2+,*AR3+,B,A;A=1-x^2/56,T=x^2MPYA A ;A=T*A=x^2(1-x^2/56)STH A,*AR2 ;(d_temp)=x^2(1-x^2/56)MASR *AR2-,*AR3+,B,A;A=1-x^2/30(1-x^2/56); T=x^2(1-x^2/56)MPYA *AR2+ ;B=x^2(1-x^2/30(1-x^2/56))||LD *AR4,B ;B=1MASR *AR2-,*AR3+,B,A;A=1-x^2/12(1-x^2/30(1-x^2/56))SFT A A,-1,A ;-1/2NEG AMPYA *AR2+ ;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))MAR *AR2+RETDADD *AR4,16,B ;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))STH B,*AR2 ;cos(theta)RET.end4.链接命令文件sin.cmdMEMORY{PAGE 0:EPROM: org=0E000H, len=1000HVECS: org=0FF80H, len=0080HPAGE 1:SPRAM: org=0060H, len=0020HDARAM1: org=0080H, len=0010HDARAM2: org=0090H, len=0010HDARAM3: org=0200H, len=0200H}SECTIONS{.text :> EPROM PAGE 0.data :> EPROM PAGE 0ST ACK :> SPRAM PAGE 1sin_vars :> DARAM1 PAGE 1coef_s :> DARAM1 PAGE 1cos_vars :> DARAM2 PAGE 1coef_c :> DARAM2 PAGE 1sin_x : align(512) {} > DARAM3 PAGE 1.vectors :>VECS PAGE 0}CCS环境下的调试:(1)创建工程项目1,进入CCS集成开发工具2,创建一个新的工程项目,命名为MYMOVE3,点FILE/NEW编写源程序,保存为MYMOVE.ASM4,点FILE/NEW编写链接命令文件,保存为MYMOVE.CMD(2)向工程项目中添加文件给工程添加汇编源文件并执行PROJECT/ADD FILES TO PROJECT命令,将MYMOVE.ASM文件和MYMOVE。

相关主题