正弦信号发生器的设计.docx

上传人:b****3 文档编号:11492952 上传时间:2023-06-01 格式:DOCX 页数:14 大小:106.08KB
下载 相关 举报
正弦信号发生器的设计.docx_第1页
第1页 / 共14页
正弦信号发生器的设计.docx_第2页
第2页 / 共14页
正弦信号发生器的设计.docx_第3页
第3页 / 共14页
正弦信号发生器的设计.docx_第4页
第4页 / 共14页
正弦信号发生器的设计.docx_第5页
第5页 / 共14页
正弦信号发生器的设计.docx_第6页
第6页 / 共14页
正弦信号发生器的设计.docx_第7页
第7页 / 共14页
正弦信号发生器的设计.docx_第8页
第8页 / 共14页
正弦信号发生器的设计.docx_第9页
第9页 / 共14页
正弦信号发生器的设计.docx_第10页
第10页 / 共14页
正弦信号发生器的设计.docx_第11页
第11页 / 共14页
正弦信号发生器的设计.docx_第12页
第12页 / 共14页
正弦信号发生器的设计.docx_第13页
第13页 / 共14页
正弦信号发生器的设计.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

正弦信号发生器的设计.docx

《正弦信号发生器的设计.docx》由会员分享,可在线阅读,更多相关《正弦信号发生器的设计.docx(14页珍藏版)》请在冰点文库上搜索。

正弦信号发生器的设计.docx

正弦信号发生器的设计

 

XXXX大学现代科技学院

 

DSP硬件电路设计基础课程设计

 

设计名称正弦信号发生器的设计

专业班级

学号

姓名DENG

指导教师XXXX

XXXX大学现代科技学院

专业班级

XX班

学生姓名

DENG

课程名称

DSP硬件电路设计基础

设计名称

正弦信号发生器的设计

设计周数

1.5周

指导教师

XXXX

设计

任务

主要

设计

参数

1.掌握产生正弦波的方法;

2.学习正弦信号发生器的DSP实现原理;

5.学习使用CCS的波形观察窗口观察输入/输出信号波形和频谱变化情况。

设计内容

设计要求

用DSP汇编语言及C语言进行编程,实现正弦信号发生器。

主要参考

资料

邹彦等.DSP原理及应用.北京:

电子工业出版社.2007年.电气与电子信息类本科规划教材

李利等.DSP原理及应用.北京:

中国水利水电出版社.2007年.21世纪高等院校规划教材

学生提交

归档文件

课程设计报告

课程设计任务书

注:

1.课程设计完成后,学生提交的归档文件应按照:

封面—任务书—说明书—图纸的顺序进行装订上交(大张图纸不必装订)

2.可根据实际内容需要续表,但应保持原格式不变。

日期:

2014-12-10

XXXX大学现代科技学院

……………………………………装………………………………………订…………………………………………线………………………………………

专业班级XXXXXXX学号姓名DENG成绩

设计题目 

正弦波信号发生器

设计目的

学会使用CCS(CodeComposerStudio)集成开发环境软件,在此集成开发环境下完成工程项目创建,程序编写,编译,链接,调试以及数据的分析。

同时完成一个正弦波信号发生器的程序的编写,并在集成开发环境下进行模拟运行,观察结果。

设计内容 

编写一个产生正弦波信号的程序,在CCS软件下进行模拟运行,观察输出结果。

设计原理

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

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

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

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

本次课程设计只要使用泰勒级数展开法来实现正弦波信号。

1. 产生正弦波的算法 

在高等数学中,正弦函数和余弦函数可以展开成泰勒级数,其表达式为

若要计算一个角度x的正弦和余弦值,可取泰勒级数的前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]。

2. 正弦波的实现 

⑴计算一个角度的正弦值 

利用泰勒级数的展开式,可计算一个角度x的正弦值,并采用子程序的调用方式。

在调用前先在数据存储器d_xs单元中存放x的弧度值,计算结果存放在d_sinx单元中。

⑵计算一个角度的余弦值 

利用余弦函数展开的泰勒级数的前五项计算一个角度的余弦值,可采用子程序的调用方式来实现。

调用前先将x弧度值放在数据存储器d_xc单元中,计算结果存放在d_cosx单元中。

⑶正弦波的实现 

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

其实现步骤如下:

 第一步:

利用sin_start和cos_start子程序,计算45°~0°(间隔为0.5°)的正弦和余弦值; 

第二步:

利用sin(2x)=2sin(x)cos(x)公式,计算90°~0°的正弦值(间隔为1°); 第三步:

通过复制,获得359°~0°的正弦值; 

第四步:

将359°~0°的正弦值重复从PA口输出,便可得到正弦波。

在实际应用中,正弦波是通过D/A口输出的。

选择每个正弦周期中的样点数、改变每个样点之间的延迟,就能够产生不同频率的波形,也可以利用软件改变波形的幅度以及起始相位。

总体方案设计 

1. 总体实现方案 

我们知道一个角度为x的正弦和余弦函数,都可以展开为泰勒级数,且其前五项可以看为:

本程序的编程思想是这样的,正弦波的波形可以看为由无数点组成,这些点与x轴的每一个角度值相对应,那么我们可以利用DSP处理器处理大量重复计算的优势来计算,x轴每一点对应的y轴的值(在x轴取360个点来进行逼近),由于程序的编制采用小数形式,其弧度大于1的正弦值得不到,这就对正弦波的产生造成了障碍。

可由于正弦波的特殊的对称形式给程序的编制找到了出口。

Sin(∏/4)的弧度为0.7854<1,

即0~∏/4之间的任意正弦、余弦值可以利用汇编程序得到N又可以利用公式:

sin(2a)=2sin(a)cos(a)得到0~∏/2之间的正弦值。

而0~∏/2之间的正弦曲线与∏/2~∏之间的正弦曲线通过x=∏/2这条轴左右对称,那么就可以得到∏/2~∏的正弦值,而0~∏的正弦曲线的相反数通过x=∏这条轴与∏~2∏左右对称。

这样∏~2∏的正弦值也得到了。

一个周期内完整的正弦波就得到了。

正弦波产生的流程图如下:

2.具体实现步骤

本课程设计需要使用C54X汇编语言产生正弦波,并通过CCS的图形显示工具观察波形。

设计分以下几步完成:

启动CCS,操作如下:

1.建立新的工程文件:

点击Project→New,保存文件名为sinx.pjt。

2.建立汇编源程序:

点击File→New→SourceFile菜单命令,打开一个空白文档,将汇编源程序逐条输入后,单击Flie→Save菜单命令,文件类型保存为(*.asm),单击“保存”按钮,以上汇编程序被存盘。

3.建立连接命令文件:

点击File→New→SourceFile菜单命令,打开一个空白文档,将链接命令文件逐条输入后,单击Flie→Save菜单命令,文件类型保存为(*.cmd),单击“保存”按钮,以上链接命令文件被存盘。

4.选择Project菜单中的AddFiletoProject选项,将汇编源程序sin.asm和链接定位sin.cmd文件依次添加到工程文件中。

5.选择Project菜单中的Options选项,并选择buildoptions项来修改或添加编译、连接中使用的参数。

选择Linker窗口,在“OutputFilename”栏中写入输出OUT文件的名字,如sin.out,还可以设置生成的map文件名。

6.完成汇编,编译和链接,正确产生.out文件:

点击Project菜单中的Rebuildall,请注意在监视窗口显示的汇编,编译和链接的相关信息。

如果没有错误,将产生sin.out文件;如果有错,在监视窗口以红色字体显示出错误行,用鼠标双击该行,光标跳将至源程序相应的出错行。

修改错误后,重新汇编链接。

7.在Project选项中打开sin.pjt文件,使用Build选项完成编译、连接。

8.使用File菜单中的LoadProgram将OUT文件装入。

然后选择Debug→Run,程序执行过程中可以使用Debug→Halt暂停程序的执行。

9.选择View->Graph->Time/Frequency菜单打开一个图形显示窗口。

将“StartAddress”项改为地址sin_x,将“AcquisitionBufferSize”项设置为360,将“DisplayDataSize”项设置为360,将“DSPDataType”改为“16-bitsignedinteger”。

主要参数 

1.sin(theta)=x(1-x^2/2*3(1-x^2/4*5(1-x^2/6*7(1-x^2/8*9))))

 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(theta)

源程序 

1. 产生正弦波程序清单sin.asm

.mmregs

.defstart

.defd_xs,d_sinx,d_xc,d_cosx,sinx,cosx

sin_x:

.usect"sin_x",360

STACK:

.usect"STACK",10H

k_theta.set286;theta=pi/360(0.5deg)

start:

.text

STM#STACK+10H,SP

STMk_theta,AR0

STM0,AR1

STM#sin_x,AR6

STM#90,BRC

RPTBloop1-1

LDMAR1,A

LD#d_xs,DP

STLA,@d_xs

STLA,@d_xc

CALLsinx;d_sinx=sin(x)

CALLcosx;d_cosx=cos(x)

LD#d_sinx,DP

LD@d_sinx,16,A;A=sin(x)

MPYA@d_cosx;B=sin(x)*cos(x)

STHB,1,*AR6+;AR6----2*sin(x)

MAR*AR1+0

loop1:

STM#sin_x+89,AR7;sin91(deg.)-sin179(deg.)

STM#88,BRC

RPTBloop2-1

LD*AR7-,A

STLA,*AR6+

loop2:

STM#179,BRC;sin180(deg.)-sin359(deg.)

STM#sin_x,AR7

RPTBloop3-1

LD*AR7+,A

NEGA

STLA,*AR6+

loop3:

STM#sin_x,AR6;generatesinwave

STM#1,AR0

STM#360,BK

Bloop3

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)

d_coef_s.usect"coef_s",4

d_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_l_s.usect"sin_vars",1

.text

SSBXFRCT

STM#d_coef_s,AR5;movecoeffstable_s

RPT#3

MVPD#table_s,*AR5+

STM#d_coef_s,AR3

STM#d_xs,AR2

STM#d_l_s,AR4

ST#7FFFH,d_l_s

SQUR*AR2+,A;A=x^2

STA,*AR2;(AR2)=x^2

||LD*AR4,B;B=1

MASR*AR2+,*AR3+,B,A;A=1-x^2/72,T=x^2

MPYAA;A=T*A=x^2(1-x^2/72)

STHA,*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))

STB,*AR2;(d_temp)=x^2(1-x^2/42(1-x^2/72))

||LD*AR4,B;B=1

MASR*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)))

STB,*AR2;(d_temp)=B

||LD*AR4,B;B=1

MASR*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))))

STHB,d_sinx;sin(theta)

RET

cosx:

.defd_xc,d_cosx

d_coef_c.usect"coef_c",4

.data

table_c.word0249H;C1=1/(7*8)

.word0444H;C2=1/(5*6)

.word0AABH;C3=1/(3*4)

.word4000H;C4=1/2

d_xc.usect"cos_vars",1

d_squr_xc.usect"cos_vars",1

d_temp_c.usect"cos_vars",1

d_cosx.usect"cos_vars",1

c_l_c.usect"cos_vars",1

.text

SSBXFRCT

STM#d_coef_c,AR5;movecoeffstable_c

RPT#3

MVPD#table_c,*AR5+

STM#d_coef_c,AR3

STM#d_xc,AR2

STM#c_l_c,AR4

ST#7FFFH,c_l_c

SQUR*AR2+,A;A=x^2

STA,*AR2;(AR2)=x^2

||LD*AR4,B;B=1

MASR*AR2+,*AR3+,B,A;A=1-x^2/56,T=x^2

MPYAA;A=T*A=x^2(1-x^2/56)

STHA,*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))

STB,*AR2;(d_temp)=x^2(1-x^2/30(1-x^2/56))

||LD*AR4,B;B=1

MASR*AR2-,*AR3+,B,A;A=1-x^2/12(1-x^2/30(1-x^2/56))

SFTAA,-1,A;-1/2

NEGA

MPYA*AR2+;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))

MAR*AR2+

RETD

ADD*AR4,16,B;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))

STHB,*AR2;cos(theta)

RET

.end

2.产生连接程序清单sin.cmd

MEMORY

{

PAGE0:

EPROM:

org=0E000H,len=1000H

VECS:

org=0FF80H,len=0080H

PAGE1:

SPRAM:

org=0060H,len=0020H

DARAM1:

org=0080H,len=0010H

DARAM2:

org=0090H,len=0010H

DARAM3:

org=0200H,len=0200H

}

SECTIONS

{

.text:

>EPROMPAGE0

.data:

>EPROMPAGE0

STACK:

>SPRAMPAGE1

sin_vars:

>DARAM1PAGE1

coef_s:

>DARAM1PAGE1

cos_vars:

>DARAM2PAGE1

coef_c:

>DARAM2PAGE1

sin_x:

align(512){}>DARAM3PAGE1

.vectors:

>VECSPAGE0

}

设计仿真结果及分析

在ccs集成环境中实现正弦波能够起到防止干扰的作用,同时也大大地减小了波形的线性失真。

同时我们也能从中看出ccs能够精确地对各个角度进行计算得出相应的正弦值,幅度和频率易于调节,波形也较为稳定,抗干扰能力较强。

最重要的是这种设计方案简单可行,新颖实用,具有很高的实践和推广价值。

分析:

通过不断的发现错误、改正错误和调试,最终得到了所希望的图象,即正弦波信号。

设计总结 

在本次课程设计过程中我学习到了许多课堂上无法学到的东西。

它能够让我对课堂上学到的知识进行查漏补缺,而且锻炼了我的逻辑思考能力。

因为在课堂上使用汇编语言进行编程只是机械的复制所学的程序段,对于它的正确性以及它的功能无法知晓。

但是通过CCS,我们可以达到上述目的,它是一款方便简洁,实用性很强的软件。

在课堂上我们虽学过CCS如何使用,但真正操作起来却发现有些吃力。

通过这次课程设计,让我能够熟练操作CCS,并对正弦波汇编程序也有了一定的了解。

其次,在拿到课设题目后,我首先查阅教材,在有了一定的了解后,开始寻找程序,并在CCS软件上进行仿真,在这个过程中,最困难的便是输入的程序总是会出现错误,经过修改,最终出现所需的结果。

最后完成课设。

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2