TMS320C54xDSP的函数发生器的设计.docx

上传人:b****7 文档编号:10677051 上传时间:2023-02-22 格式:DOCX 页数:16 大小:41.26KB
下载 相关 举报
TMS320C54xDSP的函数发生器的设计.docx_第1页
第1页 / 共16页
TMS320C54xDSP的函数发生器的设计.docx_第2页
第2页 / 共16页
TMS320C54xDSP的函数发生器的设计.docx_第3页
第3页 / 共16页
TMS320C54xDSP的函数发生器的设计.docx_第4页
第4页 / 共16页
TMS320C54xDSP的函数发生器的设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

TMS320C54xDSP的函数发生器的设计.docx

《TMS320C54xDSP的函数发生器的设计.docx》由会员分享,可在线阅读,更多相关《TMS320C54xDSP的函数发生器的设计.docx(16页珍藏版)》请在冰豆网上搜索。

TMS320C54xDSP的函数发生器的设计.docx

TMS320C54xDSP的函数发生器的设计

广东石油化工学院

DSP综合实验报告

课程名称:

DSP系统开发与设计

实验题目:

函数信号发生器

学号:

姓名:

班级:

指导老师:

实验日期:

2012-6-11至2012-6-15

基于TMS320C54xDSP的函数发生器的设计

一、设计目的:

1、了解数字波形产生的原理;

2、学习用DSP产生各种波形的基本方法和步骤;

3、掌握DSP与D/A转换器接口的使用。

二、设计设备

计算机、DSP仿真器、ZYE1801B实验箱、20M示波器

三、设计原理

波形产生是DSP的重要应用之一。

而正弦信号发生器的设计则是波形产生应用的一个重要方面,它在通信领域有着广泛的应用。

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

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

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

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

产生正弦波的算法

正弦函数和余弦函数可以展开成泰勒级数,其表达式:

取泰勒级数的前5项,得近似计算式:

递推公式:

sin(nx)=2cos(x)sin[(n-1)x]-sin[(n-2)x]

cos(nx)=2cos(x)sin[(n-1)x]-cos[(n-2)x]

由递推公式可以看出,在计算正弦和余弦值时,需要已知cos(x)、sin(n-1)x、sin(n-2)x和cos(n-2)x。

为了减少使用的存储器,可以采用正弦信号的对称性,复制90~180度的正弦值和180~360度的正弦值。

余弦信号的产生同样可以采用多种方法产生。

一是采用公式计算得到,二是采用正弦信号变换得到。

方波信号产生可以通过轮流输出两个不同大小的数值通过A/D转换得到。

四、设计内容

本设计题目以TMS320C54xDSP为目标器件,设计并实现基于迭代法的“正弦序列生成”算法及其DSP程序。

设计步骤:

1、熟悉正弦信号发生器的算法以及在DSP系统的实现

2、熟悉A/D转换的原理及实验箱的链接

3、掌握A/D转换的程序的编写

4、编写DSP的正弦信号发生器的程序

5、编写定时程序产生100HZ、1KHZ、10KHZ的正弦、余弦以及100K、1M的方波信号,每种类型的波形单周期360个点。

6、编写按键程序,控制输出。

用三个拨码开关对DSP进行输入,输入的0~7对应的8种不同的波形。

7、用示波器观察各个波形

8、分析波形失真的原因。

五、实验步骤

1.熟悉本实验原理。

2.阅读本实验样例程序。

3.依次连接主板上的PC10、PC11、TP32到PC15、PC16、GND;依次连接主板上的PC13、PC14、M58到插板上的DJ0、DJ1、S12。

4.将计算机与ZYE1801C实验箱通过并口P1相连。

5.运行CCS软件客户软件\DSP程序\test19,通过插板上的JP1,JP2,JP3来选择不同的波形。

6.用示波器观察DA0的输出波形。

六、设计的硬件结构框图

七、实验代码

先计算0~45°(间隔为0.5°)的sin和cos值,在利用sin2a=2sina*cosa求出sin值(间隔为1°)。

然后,通过复制,获得0~359°的正弦值。

重复向PA口输出,便可得到正弦波。

.title"bxfsq.asm"

.mmregs

.globalmain

.defstart

.refd_xs,d_sinx,d_xc,d_cosx,sinx,cosx

sin_x:

.usect"sin_x",360

cos_x:

.usect"cos_x",360

fangbo:

.usect"fangbo",360

STACK:

.usect"STACK",10H

k_theta:

.set286

TIM0.set0024H

PRD0.set0025H

TCR0.set0026H

PA.set0100H

.text

start:

;产生正弦波数据

STMk_theta,AR0

STM#0,AR1

STM#sin_x,AR6

STM#90,BRC

RPTBloop1-1

LDMAR1,A

LD#d_xs,DP

STLA,@d_xs

STLA,@d_xc

CALLsinx

CALLcosx

LD#d_sinx,DP

LD@d_sinx,16,A

MPYA@d_cosx

STHB,1,*AR6+

MAR*AR1+0

loop1:

STM#sin_x+89,AR7

STM#88,BRC

RPTBloop2-1

LD*AR7-,A

STLA,*AR6+

loop2:

STM#179,BRC

STM#sin_x,AR7

RPTBloop3-1

LD*AR7+,A

NEGA

STLA,*AR6+

loop3:

STM#sin_x+89,AR6

STM#cos_x,AR7

STM#269,BRC

RPTBlcos-1

LD*AR6+,A

STLA,*AR7+

lcos:

STM#sin_x,AR6

STM#89,BRC

RPTBloop4-1

LD*AR6+,A

STLA,*AR7+

;产生方波数据

loop4:

STM#fangbo,AR6

STM#179,BRC

RPTBlfangbo-1

LD#7FFFH,A

STLA,*AR6+

lfangbo:

STM#179,BRC

RPTBmain-1

LD#0H,A

STLA,*AR6+

main:

STM#0,SWWSR

STM#STACK+10H,SP

STM#3FA0H,PMST

STM#0010H,TCR0

STM#0260H,TCR0

STM#0008H,IFR

STM#0008H,IMR

RSBXINTM

PORTRPA,*AR2

LD*AR2,A

AND#01B,A

BCfangbo_1m,ANEQ

LD*AR2,A

AND#010B,A

BCfangbo_100k,ANEQ

LD*AR2,A

AND#0100B,A

BCsin_10k,ANEQ

LD*AR2,A

AND#01000B,A

BCsin_1k,ANEQ

LD*AR2,A

AND#010000B,A

BCsin_100,ANEQ

LD*AR2,A

AND#0100000B,A

BCcos_10k,ANEQ

LD*AR2,A

AND#01000000B,A

BCcos_1k,ANEQ

LD*AR2,A

AND

BCcos_100,ANEQ

end:

Bend

fangbo_1m:

STM#10,TIM0

STM#10,PRD0

STM#fangbo,AR3

Bmain

fangbo_100k:

STM#110,TIM0

STM#110,PRD0

STM#fangbo,AR3

Bmain

sin_10k:

STM#2,TIM0

STM#2,PRD0

STM#sin_x,AR3

Bmain

sin_1k:

STM#30,TIM0

STM#30,PRD0

STM#sin_x,AR3

Bmain

sin_100:

STM#306,TIM0

STM#306,PRD0

STM#sin_x,AR3

Bmain

cos_10k:

STM#2,TIM0

STM#2,PRD0

STM#sin_x,AR3

Bmain

cos_1k:

STM#30,TIM0

STM#30,PRD0

STM#sin_x,AR3

Bmain

cos_100:

STM#306,TIM0

STM#306,PRD0

STM#sin_x,AR3

Bmain

;定时器中断输出

TINT_T0:

STM#1,AR0

STM#360,BK

loop:

PORTW*AR3+0%,PA

Bloop

RETE

sinx:

.defd_xs,d_sinx

.data

table_s:

.word01c7h;c1=1/(8*9)

.word030bh;c2=1/(6*7)

.word0666h;c3=1/(4*5)

.word1556h;c4=1/(2*3)

coef_s:

.usect"coef_s",4

d_xs:

.usect"sin_vars",1

squr_xs:

.usect"sin_vars",1

temp_s:

.usect"sin_vars",1

d_sinx:

.usect"sin_vars",1

l_s:

.usect"sin_vars",1

.text

SSBXFRCT

STM#coef_s,AR5

RPT#3

MVPD#table_s,*AR5+

STM#coef_s,AR3

STM#d_xs,AR2

STM#l_s,AR4

ST#7FFFH,l_s

SQUR*AR2+,A

STA,*AR2

||LD*AR4,B

MASR*AR2+,*AR3+,B,A

MPYAA

STHA,*AR2

MASR*AR2-,*AR3+,B,A

MPYA*AR2+

STB,*AR2

||LD*AR4,B

MASR*AR2-,*AR3+,B,A

MPYA*AR2+

STB,*AR2

||LD*AR4,B

MASR*AR2-,*AR3+,B,A

MPYAd_xs

STHB,d_sinx

RET

cosx:

.defd_xc,d_cosx

.data

table_c.word0249h;c1=1/(8*7)

.word0444h;c2=1/(6*5)

.word0aabh;c3=1/(4*3)

.word4000h;c4=1/(2*1)

coef_c.usect"coef_c",4

d_xc.usect"cos_vars",1

squr_xc.usect"cos_vars",1

temp_c.usect"cos_vars",1

d_cosx.usect"cos_vars",1

l_c.usect"cos_vars",1

.text

SSBXFRCT

STM#coef_c,AR5

RPT#3

MVPD#table_c,*AR5+

STM#coef_c,ar3

STM#d_xc,AR2

STM#l_c,AR4

ST#7FFFH,l_c

SQUR*AR2+,A

STA,*AR2

||LD*AR4,B

MASR*AR2+,*AR3+,B,A

MPYAA

STHA,*AR2

MASR*AR2-,*AR3+,B,A

MPYA*AR2+

STB,*AR2

||LD*AR4,B

MASR*AR2-,*AR3+,B,A

SFTAA,-1,A

NEGA

MPYA*AR2+

MAR*AR2+

RETD

ADD*AR4,16,B

STHB,*AR2

RET

.sect".vectors"

.align0x80

RESET:

BDmain

STM#200,SP

nmi:

RETE

NOP

NOP

NOP

sint17.space4*16

sint18.space4*16

sint19.space4*16

sint20.space4*16

sint21.space4*16

sint22.space4*16

sint23.space4*16

sint24.space4*16

sint25.space4*16

sint26.space4*16

sint27.space4*16

sint28.space4*16

sint29.space4*16

sint30.space4*16

int0:

RETE

NOP

NOP

NOP

int1:

RETE

NOP

NOP

NOP

int2:

RETE

NOP

NOP

NOP

tint:

BTINT_T0

NOP

NOP

NOP

rint0:

RETE

NOP

NOP

NOP

xint0:

RETE

NOP

NOP

NOP

rint1:

RETE

NOP

NOP

NOP

xint1:

RETE

NOP

NOP

NOP

int3:

RETE

NOP

NOP

NOP

.end

2、cmd文件代码如下:

说明系统中有哪些可用存储器、程序段、堆栈及复位向量和中断向量等安排在什么地方。

其中MEMORY段就是用来规定目标存储器的模型,通过这条指令,可以定义系统中所包含的各种形式的存储器,以及它们占据的地址范围;SECTIONS段说明如何将输入段组合成输出段以及在可执行文件中定义输出段、规定输出段在存储器中的位置等。

bxfsq.obj

-obxfsq.out

-mbxfsq.map

-estart

MEMORY

{

PAGE0:

EPROM:

origin=0E000h,length=1000h

VECS:

origin=0FF80h,length=0080h

PAGE1:

SPRAM:

origin=0060h,length=0020h

DARAM1:

origin=0080h,length=0010h

DARAM2:

origin=0090h,length=0010h

DARAM3:

origin=0200h,length=0600h

}

SECTIONS

{

.text:

>EPROMPAGE0

.data:

>EPROMPAGE0

STACK:

>SPRAMPAGE1

sin_vars:

>DARAM1PAGE1

coef_s:

>DARAM1PAGE1

cos_vars:

>DARAM2PAGE1

coef_c:

>DARAM2PAGE1

sin_x:

align(512){}>DARAM3PAGE1

cos_x:

align(512){}>DARAM3PAGE1

fangbo:

align(512){}>DARAM3PAGE1

.vectors:

>VECSPAGE0

}

八、设计结果以及结果分析

在装有ccs软件的计算机上进行调试仿真,首先在仿真平台上配置好仿真平台,然后将以上代码输入代码编辑器,通过调试可得出实验所要求的波形。

正弦波形图如下:

余弦波形图如下:

方波图形如下:

三种波形的图如下:

九、实验总结

本次课程设计中对课堂所学进行了实践,中断,I/O口,定时器……大大地加深了我对DSP编程原理的理解。

我还在这过程中进一步提高自身的创作、创新水平,扎实基础,扩展所学。

并且此次课程设计,基于课程理论知识和网上资料,使我对数字信号处理课程有了更深一步的了解和掌握,对利用CCS软件编程的数字信号处理方法有了进一步的了解。

在理论课的基础上进行实验实习,是对本门课程的深入学习和掌握,在以后的工作学习中,数字信号的处理都是采用计算机仿真的方法进行测试,因此,掌握基于计算机的数字信号处理方法对以后的工作和学习有很大的帮助。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1