当前位置:文档之家› 基于DSP设计正弦信号发生器

基于DSP设计正弦信号发生器

基于DSP设计正弦信号发生器一.设计目的设计一个基于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口输出,便可得到正弦波四.软件操作DSP 集成开发环境 CCS是 Code Composer Studio 的缩写,即代码设计工作室。

它是 TI 公司推出的集成可视化 DSP 软件开发工具。

DSP CCS 内部集成了以下软件工具:◆ DSP 代码产生工具(包括 DSP 的 C 编译器、汇编优化器、汇编器和链接器)◆ CCS 集成开发环境(包括编辑、建立和调试 DSP 目标程序)◆ 实时基础软件 DSP/BIOS (必须具有硬件开发板)◆ RTDX、主机接口和 API(必须具有硬件开发板)在 CCS 下,用户可以对软件进行编辑、编译、调试、代码性能测试(profile)和项目管理等工作。

CCS 可以提供如下功能:◆ 设置断点◆ 在断点处自动修改窗口◆ 观察变量◆ 观察和编辑存储器和寄存器◆ 利用测试点使数据流在目标系统和文件之间流动◆ 观察调用堆栈◆ 观察图形信号◆ 代码性能测试(profiling)◆ 观察反汇编和 C 指令执行◆ 提供 GEL (通用扩展语言)语言。

此语言能增加一个函数或功能到 CCS 菜单中来完成用户自己设定的任务,是扩展 CCS 功能的专用语言。

使用 CCS,可以加速 DSP 的开发进程,是 DSP 开发应用的得力助手。

这里以 C54x DSP 的 CCS 3.1 为例介绍正弦波的产生。

利用 CCS 集成开发环境,用户可以在一个开发环境下完成工程定义、程序编辑、编译链接、调试和数据分析等工作环节。

1.创建工程(project)文件选择Project→New,在“Project”文本框中键入将要创建的工程项目名,本例工程项目名为“sin”选择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.def start.def d_xs,d_sinx,d_xc,d_cosx,sinx,cosx sin_x: .usect "sin_x",360STACK: .usect "STACK",10k_theta .set 286PA0 .set 0start:.textSTM #STACK+10,SPSTM k_theta,AR0STM 0,AR1STM #sin_x,AR6STM #90,BRCRPTB loop1-1LDM AR1,ALD #d_xs,DPSTL A,@d_xsSTL A,@d_xcCALL sinxCALL cosxLD #d_sinx,DPLD @d_sinx,16,AMPYA @d_cosxSTH B,1,*AR6+MAR *AR1+0loop1: STM #sin_x+89,AR7STM #88,BRC RPTB loop2-1LD *AR7-,ASTL A,*AR6+loop2: STM #179,BRCSTM #sin_x,AR7RPTB loop3-1LD *AR7+,ANEG ASTL A,*AR6+loop3: STM #sin_x,AR6STM #1,AR0STM #360,BKloop4: PORTW *AR6+0%,PA0sinx:.def d_xs,d_sinx.datatable_s .word 01C7H.word 030BH.word 0666H.word 1556Hd_coef_s .usect "coef_s",4d_xs .usect "sin_vars",1 d_squr_xs .usect "sin_vars",1 d_temp_s .usect "sin_vars",1 d_sinx .usect "sin_vars",1 d_1_s .usect "sin_vars",1 .textSSBX FRCT STM #d_coef_s,AR5 RPT #3 MVPD #table_s,*AR5+ STM #d_coef_s,AR3 STM #d_xs,AR2 STM #d_1_s,AR4 ST #7FFFH,d_1_s SQUR *AR2+,A ST A,*AR2 ||LD *AR4,B MASR *AR2+,*AR3+,B,A MPYA A STH A,*AR2 MASR *AR2-,*AR3+,B,A MPYA *AR2+ St B,*AR2MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 ||LD *AR4,B MASR *AR2-,*AR3+,B,A MPYA d_xs STH B,d_sinx RETcosx:.def d_xc,d_cosxd_coef_c .usect "coef_c", 4.datatable_c .word 0249H.word 0444H.word 0AABH.word 4000Hd_xc .usect "cos_vars",1d_squr_xc .usect "cos_vars",1d_temp_c .usect "cos_vars",1d_cosx .usect "cos_vars",1c_1_c .usect "cos_vars",1.textSSBX FRCTSTM #d_coef_c,AR5RPT #3MVPD #table_c,*AR5+STM #d_coef_c,AR3 STM #d_xc,AR2 STM #c_1_c,AR4 ST #7FFFH,c_1_c SQUR *AR2+,A||LD *AR4,B MASR *AR2+,*AR3+,B,A MPYA A STH A,*AR2 MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 ||LD *AR4,B MASR *AR2-,*AR3+,B,A SFTA A,-1,ANEG AMPYA *AR2+MAR *AR2+RETDADD *AR4,16,BSTH B,*AR2RET.end正弦波程序链接命令文件sin.cmd-x.\Debug\vectors.obj-x.\Debug\sin.obj-o sin.out-m sin.map-e startMEMORY{PAGE 0: EPROM: org=0E00H,len=1000H VECS: org=0FF80H,len=0080HDARAM1: org=0080H, len=0010HDARAM2: org=0090H, len=0010HDARAM3: org=0200H, len=0200H}SECTIONS{.text :>EPROM PAGE 0.data :>EPROM PAGE 0STACK :>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}六.实验结果及分析将程序装载到DSP目标芯片中,波形实现结果可以在CCS图形显示界面直观地表示出来输出结果显示,在CCS图形观察窗口得到了频率稳定,信号干扰小,波形失真度较小的正弦信号;七.设计总结通过这次基于DSP的正弦信号发生器的设计,使我明白了要完成一个产品是相当不容易的,哪怕是一个小小的正弦波发生器,尤其是编写代码的时候,稍微的马虎就会把大小写打错,导致程序最后错误不断。

通过设计也锻炼了我解决困难的能力,比如说最后总是有一个警告error: system error, can't open file 'vectors.obj' for input:No such file or directory最后通过百度找到了答案,要在cmd文件中的vectors.obj前面添加-x.\Debug\代码才可以正常运行。

相关主题