logo资料库

基于DSP的设计正弦波信号发生器.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
一.设计目的 设计一个基于 DSP 的正弦信号发生器 二.设计内容 利用基于 CCS 开发环境中的 C54X 汇编语言来实现正弦信号发生装置。 三.设计原理 一般情况,产生正弦波的方法有两种:查表法和泰勒级数展开法。查表 法是使用比较普遍的方法,优点是处理速度快,调频调相容易,精度高,但 需要的存储器容量很大。泰勒级数展开法需要的存储单元少,具有稳定性好, 算法简单,易于编程等优点,而且展开的级数越多,失真度就越小。本文采 用了泰勒级数展开法。一个角度为θ的正弦和余弦函数,可以展开成泰勒级 数,取其前 5 项进行近似得: 式中:x 为θ的弧度值,x=2πf/fs(fs 是采样频率;f 是所要发生的信 号频率。 正弦波的波形可以看作由无数点组成,这些点与 x 轴的每一个角度值相 对应,可以利用 DSP 处理器处理大量重复计算的优势来计算 x 轴每一点对应
的 y 的值(在 x 轴取 N 个点进行逼近)。整个系统软件由主程序和基于泰勒展 开法的 SIN 子程序组成,相应的软件流程图如图。
四.设计方案 本设计采用 TMS320C54X 系列的 DSP 作为正弦信号发生器的核心控制芯 片。 通过计算一个角度的正弦值和余弦值程序可实现正弦波,其步骤如下: 1.利用 sinx 和 cosx 子程序,计算 0°~45°(间隔为 0.5°)的正弦和 余弦值 2.利用 sin(2x)=2sin(x)cos(x)公式,计算 0°~90°的正弦值(间隔为 1°) 3.通过复制,获得 0°~359°的正弦值 4.将 0°~359°的正弦值重复从 PA 口输出,便可得到正弦波 三.软件操作 利用 CCS 集成开发环境,用户可以在一个开发环境下完成工程定义、 程序 编辑、编译链接、调试和数据分析等工作环节。 1. 创建工程(project)文件 选择 Project→New,在“Project”文本框中键入将要创建的工程 项目名,本例工程项目名为“sin” 2. 向工程中添加文件 选择 Project→Add Files to Project,将 sine.asm 文件自动添 加到 Project→Source 中。 用同样的方法 将 sine.cmd 文件添加到 对应的目录中。 3. 构建工程,工程所需文件编辑完成后,可以对该工程进行编译链接, 产生可执行文件, 为调试做准备。 选择 Project→Build,系统提示没有出错信息后,系统自动生成
一个可执行文件,sine.out 文件。 4.载入可执行文件 选择 File→Load Program 载入编译链接好的可执行文件 sine.out 5.运行程序 选择 Debug→Run 运行,可以通过查看内存表等方法,看到程序运 行的结果。 6.观察数据和图形 ①选择 View→Graph→Time/Frequence:
②调整输出图形参数: 五.源程序 正弦波源程序 sin.asm: .title "sin.asm" .mmregs start d_xs,d_sinx,d_xc,d_cosx,sinx,cosx "sin_x",360 "STACK",10 286 0 sin_x: STACK: k_theta PA0 start: .def .def .usect .usect .set .set .text
STM STM STM STM STM RPTB LDM LD STL STL CALL CALL LD LD #STACK+10,SP k_theta,AR0 0,AR1 #sin_x,AR6 #90,BRC loop1-1 AR1,A #d_xs,DP A,@d_xs A,@d_xc sinx cosx #d_sinx,DP @d_sinx,16,A MPYA @d_cosx STH MAR STM STM RPTB LD STL STM STM RPTB LD NEG STL STM STM STM B,1,*AR6+ *AR1+0 #sin_x+89,AR7 #88,BRC loop2-1 *AR7-,A A,*AR6+ #179,BRC #sin_x,AR7 loop3-1 *AR7+,A A A,*AR6+ #sin_x,AR6 #1,AR0 #360,BK loop1: loop2: loop3: loop4: PORTW *AR6+0%,PA0
sinx: table_s B loop4 .def .data .word .word .word .word d_xs,d_sinx 01C7H 030BH 0666H 1556H d_coef_s d_xs .usect .usect "coef_s",4 "sin_vars",1 d_squr_xs .usect "sin_vars",1 d_temp_s d_sinx d_1_s .usect .usect .usect .text SSBX STM RPT MVPD STM STM STM ST SQUR ST ||LD MASR MPYA STH MASR MPYA St "sin_vars",1 "sin_vars",1 "sin_vars",1 FRCT #d_coef_s,AR5 #3 #table_s,*AR5+ #d_coef_s,AR3 #d_xs,AR2 #d_1_s,AR4 #7FFFH,d_1_s *AR2+,A A,*AR2 *AR4,B *AR2+,*AR3+,B,A A A,*AR2 *AR2-,*AR3+,B,A *AR2+ B,*AR2
||LD MASR MPYA ST ||LD MASR MPYA STH RET *AR4,B *AR2-,*AR3+,B,A *AR2+ B,*AR2 *AR4,B *AR2-,*AR3+,B,A d_xs B,d_sinx cosx: .def d_xc,d_cosx d_coef_c .usect "coef_c", 4 table_c .data .word .word .word .word 0249H 0444H 0AABH 4000H d_xc .usect "cos_vars",1 d_squr_xc .usect "cos_vars",1 d_temp_c d_cosx c_1_c .usect .usect .usect .text SSBX STM RPT MVPD STM STM STM ST "cos_vars",1 "cos_vars",1 "cos_vars",1 FRCT #d_coef_c,AR5 #3 #table_c,*AR5+ #d_coef_c,AR3 #d_xc,AR2 #c_1_c,AR4 #7FFFH,c_1_c SQUR *AR2+,A
分享到:
收藏