DSP课设正弦波发生器DOC.docx
- 文档编号:24050758
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:31
- 大小:1.89MB
DSP课设正弦波发生器DOC.docx
《DSP课设正弦波发生器DOC.docx》由会员分享,可在线阅读,更多相关《DSP课设正弦波发生器DOC.docx(31页珍藏版)》请在冰豆网上搜索。
DSP课设正弦波发生器DOC
摘要
数字信号处理(DigitalSignalProcessing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。
数字信号处理器(DSP)是在模拟信号变成数字信号以后进行高速实时处理的专用处理器。
DSP芯片以其独特的结构和快速实现各种数字信号处理算法的突出优点,发展十分迅速。
本文中提出的基于DSP技术设计的正弦波信号发生器已被广泛地应用于通信、仪器仪表和工业控制等领域的信号处理系统中。
在本文中简要的概括了一种基于TMS320C5402实现正弦信号发生器的设计原理与方法,介绍了所设计的正弦信号发生器硬件电路结构和软件程序流程图。
结合DSP硬件特性,通过使用泰勒级数展开法得到设定参数的正弦波形输出,达到设计目的。
该信号发生器弥补了通常信号发生器模式固定,波形不可编程的缺点,其具有实时性强,波形精度高,可方便调节频率和幅度、稳定性好等优点。
关键字:
DSP;TMS320C5402;信号发生器;正弦信号;
1设计目的及要求
1.1设计目的
DSP课程设计是对《数字信号处理》、《DSP原理及应用》等课程的较全面练习和训练,是实践教学中的一个重要环节。
通过本次课程设计,综合运用数字信号处理、DSP技术课程以及其他有关先修课程的理论和生产实际知识去分析和解决具体问题,并使所学知识得到进一步巩固、深化和发展。
初步培养学生对工程设计的独立工作能力,掌握电子系统设计的一般方法。
通过课程设计完成基本技能的训练,如查阅设计资料和手册、程序的设计、调试等,提高学生分析问题、解决问题的能力。
主要是:
1.掌握DSP程序设计的方法以及软件的调试等;
2.掌握CCS软件的使用;
3.学会用CCS仿真模拟DSP芯片,通过CCS软件平台上应用C54X汇编语言来实现正弦信号发生装置;
4.掌握控制TLC320AIC23的输出信号,使该信号通过滤波放大后输出,并在点阵液晶中大致显示出幅频图的基本方法和步骤。
1.2设计内容及要求
本题目DSP通过计算法或者查表的方法,得到正弦信号,然后将数据传递给TLC320AIC23,控制TLC320AIC23的输出信号,该信号通过滤波放大后输出,并在点阵液晶中大致显示出幅频图。
1.DSP与TLC320AIC23接口电路的原理图绘制;
2.DSP控制TLC320AIC23的程序编写与调试;
3.TLC320AIC23进行D/A的转换,实现信号的输出;
4.控制点阵液晶,实现绘图功能,将幅频图显示出来;
5.按要求编写课程设计报告书,正确、完整的阐述设计和实验结果。
6.在报告中绘制程序的流程图,并文字说明。
2设计方案及原理
2.1总体方案
总体思想是:
(1)基于DSP的特点,本设计采用TMS320C5402这款DSP芯片作为正弦信号发生器的核心控制芯片。
(2)用泰勒级数展开法实现正弦波信号。
(3)利用点阵的绘图功能将正弦波的波形显示出来。
2.2设计原理
泰勒级数展开法是一种有效的方法,与查表法和查表结合插值法相比,该方法需要的存储单元很少,而且精度更高。
我们知道一个角度为x的正弦和余弦函数,都可以展开为泰勒级数,且其前五项可以看为:
(1)
(2)
程序的设计思想是这样的,正弦波的波形可以看为由无数点组成,这些点与
轴的每一个角度值相对应,那么我们可以利用DSP处理器处理大量重复计算的优势来计算,
轴每一点对应的y轴的值(在x轴取360个点来进行逼近),由于程序的编制采用小数形式,其弧度大于1的正弦值得不到,这就对正弦波的产生造成了障碍。
可由于正弦波的特殊的对称形式给程序的编制找到了出口。
的弧度为0.7854<1,即
之间的任意正弦、余弦值可以利用汇编程序得到N又可以利用公式:
得到
之间的正弦值。
而
之间的正弦曲线与
之间的正弦曲线通过
这条轴左右对称,那么就可以得到
的正弦值,而
的正弦曲线的相反数通过
这条轴与
左右对称。
这样
的正弦值也得到了。
一个周期内完整的正弦波就得到了。
正弦波产生的流程图如下:
图2.1正弦波产生的流程图
3系统硬件设计
3.1系统硬件框图
该正弦信号发生器的硬件结构框图如图3.1所示,主要由TMS320C5402芯片,D/A转换器,独立键盘等几部分组成。
图3.1DSP系统硬件框图
3.2TMS320C5402简介
本次设计中采用的是TI公司性价比良好的TMS320C5402芯片,这款芯片它采用修正的增强型哈佛结构,程序和数据分开存放,内部具有8组高度并行总线,一组程序总线、3组数据总线和4组地址总线,从而保证完成并行指令操作。
40位算术逻辑单元ALU以及17位×17位并行乘法器与40位专用加法器相连,可用于非流水线式单周期乘法/累加运算。
双地址生成器,包括8个辅助寄存器和2个辅助寄存器算术运算单元RARU,使得周期定点指令的执行时间达到100MIPS。
片上集成有192K存储空间:
64K字程序空间、64K数据空间、64K字I/O空间,它具有23条外部程序地址线,可寻址1M字的外部程序空间,因此增设了额外的存储映射程序技术扩展寄存器XPC,以及6条扩展程序空间寻址指令,整个程序空间分成16页。
同时可寻址64K外部数据空间、64K外部I/O空间。
RAM包括两种类型,一是只可以一次寻址的SARAM,二是可以两次寻址的DARAM。
此外,还有数据存储器0页映射的25个特殊功能寄存器。
同时,该芯片还有高度专业化的指令系统,具有功耗小、高度并行等优点。
此外,其支持C语言和汇编语言混合编程,高效的流水线操作和灵活的寻址方式使其适合高速实时信号处理。
3.3D/A转换部分设计
McBSP(Multi-channelBufferedSerial)即多通道缓冲串口,包括一个数据通道和一个控制通道。
数据通道通过DX引脚发送数据、DR引脚接收数据。
控制通道完成的任务包括内部时钟的产生、帧同步信号的产生、对这些信号的控制以及多通路的选择等。
此外还负责产生中断信号送往CPU,产生同步事件信号通知DMA控制器。
控制信息则是通过控制通道以时钟和帧同步信号的形式传送。
数模转换芯片采用TLC320AD50C其是TI公司出品的一块将A/D和D/A转换功能集成在一起的接口芯片,采用∑-△技术在低系统成本下实现高精度的A/D和D/A转换。
该芯片由一对16bit同步串行转换通道组成,在A/D之后有一个抽取滤波器,在D/A之前有一个插值滤波器。
TLC320AD50C可以与TMS320C5402DSP的McBSP无缝串行连接进行数据采集、存储和处理。
SCLK输出时钟,M/S主从模式选择(H为高电平,为主机模式),DIN串行输入,DOUT串行输出,FS帧同步信号输出,对应DSP的各相应引脚。
McBSP和D/A芯片的硬件电路连接如图3.2所示。
图3.2McBSP和D/A芯片的硬件连接图
4系统软件设计及调试
4.1变频调幅的方法
(1)16位定时模块
C5402DSP芯片片内定时器是一个软件可编程的计数器,它包括以下3个16位存储器映射寄存器:
定时寄存器TIM,定时器周期寄存器PRD和定时控制寄存器TCR。
片内定时器中,4位的预定标计数器PSC和16位定时计数器TIM组成一个20位的计数器,定时器每个CPU时钟周期减1,每次计数器减到0将产生定时器中断(TINT),同时PSC和TIM重新载入预设的值。
定时器中断TINT的速率可由式(3)计算。
(3)
(2)变频调幅实现方法
调幅的实现相对简单,只需在所有采样值前乘以一个调幅因子A1就可得到相应的正弦波幅值A。
而调频的实现必须依赖于C5402芯片内的16位定时器。
DSP芯片不断向D/A芯片送出采样值,然后经模数转换后可在示波器上观察到连续的正弦波形。
先预设要产生的正弦信号频率为f,根据正弦波生成原理可知,向D/A送出采样值的间隔,即向D/A送值的周期T1=T/N(N为采样点数),那么向D/A送值的频率为f1=N×f,即向D/A送值的频率是期待产生的正弦波信号频率的N倍。
因此,为了能够调节产生正弦信号的频率,实际上改变向D/A芯片送值的频率即可。
而改变向D/A芯片送值的频率就得用到C5402芯片内的16位定时器。
根据式(3)将需要的频率值换算成PRD内的初值和TDDR的初值,并将该初值分别置入PRD和TDDR。
4.2程序设计
软件系统采用模块化结构设计,主要包括DSP主程序,中断程序和键盘驱动程序。
DSP系统的主程序流程图如图4.1所示。
先对系统进行检测、配置McBSP端口等,开启中断调用键盘驱动程序读取键值并处理,进入中断后根据相应的键值设置相应的信号参数,并通过D/A转换,产生不同幅度、频率的正弦波。
图4.1主程序流程图
中断程序流程图如图4.2所示。
首先根据键盘的按键值选择已设置好的正弦波的幅度与频率,然后按具体步骤执行便可以得到所需正弦波。
图4.2中断程序流程
在CCS开发环境下编程,通过仿真器将程序下载到DSP芯片中,选择不同的按键产生相应的中断,即可在示波器中观察到相应的正弦波形。
所产生的波形具有精度高,幅值稳定的特点,同时具有较强的实时性和灵活性。
4.3程序编写
1、正弦波的实现
计算一个角度的正弦值
利用泰勒级数的展开式,可计算一个角度x的正弦值,并采用子程序的调用方式。
在调用前先在数据存储器d_xs单元中存放x的弧度值,计算结果存放在d_sinx单元中。
实现计算一个角度的正弦值的程序片段如下:
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
计算一个角度的余弦值
利用余弦函数展开的泰勒级数的前五项计算一个角度的余弦值,可采用子程序的调用方式来实现。
调用前先将x弧度值放在数据存储器d_xc单元中,计算结果存放在d_cosx单元中。
实现计算一个角度的余弦值的程序片段如下:
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
正弦波的实现
利用计算一个角度的正弦值和余弦值程序可实现正弦波。
其实现步骤如下:
第一步:
利用sin_start和cos_start子程序,计算
(间隔为
)的正弦和余弦值;
第二步:
利用sin(2x)=2sin(x)cos(x)公式,计算
的正弦值(间隔为
);
第三步:
通过复制,获得
的正弦值;
第四步:
将
的正弦值重复从PA口输出,便可得到正弦波。
产生正弦波的程序片段如下:
.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
*.cmd文件描述输入文件和输出文件,说明系统中有哪些可用存储器、程序段、堆栈及复位向量和中断向量等安排在什么地方。
其中MEMORY段就是用来规定目标存储器的模型,通过这条指令,可以定义系统中所包含的各种形式的存储器,以及它们占据的地址范围;SECTIONS段说明如何将输入段组合成输出段以及在可执行文件中定义输出段、规定输出段在存储器中的位置等。
产生正弦波链接命令文件的程序片段如下:
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
}
在实际应用中,正弦波是通过D/A口输出的。
选择每个正弦周期中的样点数、改变每个样点之间的延迟,就能够产生不同频率的波形,也可以利用软件改变波形的幅度以及起始相位。
4.4CCS简介
本实验是基于CCS开发环境的。
CCS是TI公司推出的为开发TMS320系列DSP软件的集成开发环境,是目前使用最为广泛的DSP开发软件之一。
它提供了环境配置、源文件编译、编译连接、程序调试、跟踪分析等环节,并把软、硬件开发工具集成在一起,使程序的编写、汇编、程序的软硬件仿真和调试等开发工作在统一的环境中进行,从而加速软件开发进程。
CCS有两种工作模式:
(1)硬件在线编程模式:
可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序;
(2)软件仿真器模式:
可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。
本次设计采取硬件在线编程模式。
如图4.3所示
图4.3DSP试验箱
4.5运行步骤及结果
1运行步骤
本次课程设计采用CCS中的C5000。
第一步,软件中芯片的选择,如图所示,选择C5416XDS510Emulator。
图4.4setupCCS界面
第二步,仿真器C5416XDS510Emulator的设置
图4.5仿真器XDS510的设置
第三步,设置完成后,退出setupC5000后可自动打开CCS5000,选择Project下的new,新建工程,如图4.5所示;将DspregDefine.h文件添加到工程sinlcd_54下的Include文件中,rts.lib文件添加到Libraries文件中,将程序的命令链接文件(.CMD),中断向量表(VECTORS.ASM)添加到Source文件下,如图4.6所示。
图4.6新建工程
图4.7添加文件到工程
第四步对编写完成的程序进行编译,结果如图4.8所示
图4.8编译成功
第五步汇编无误后就可将程序下载到实验箱中,点击如图所示命令运.out文件,再点击run即可在实验箱中得到结果。
图4.9下载程序到实验箱
2仿真结果及分析
图4.10仿真结果
在CCS集成环境中实现正弦波能够起到防止干扰的作用,同时也大大地减小了波形的线性失真。
同时我们也能从中看出CCS能够精确地对各个角度进行计算得出相应的正弦值,幅度和频率易于调节,波形也较为稳定,抗干扰能力较强。
最重要的是这种设计方案简单可行,新颖实用,具有很高的实践和推广价值。
分析:
通过不断的发现错误、改正错误和调试,最终得到了所希望的图象,即正弦波信号。
5设计心得
为期两周的DSP课程设计已进入尾声了,在这两周的时间里,我认认真真地复习了DSP的相关理论知识。
由于基础知识学得不是很扎实,正好利用课程设计这个机会,对没有掌握好的知识进行一个补习。
在刚开始的时候,我首先从最简单的程序开始着手,首先看懂程序是什么意思,在尝试在这个基础上对程序进行修改,看程序是否出错,或者说实验的结果会有什么样的改变。
用这种方法是自己尽快的熟悉这个系统的编程的方式。
本次课程设计中遇到一些课堂中从未有过的问题,通过网络查找和同学交流,大大促进了设计进程。
并在过程中进一步提高自身的创作、创新水平,扎实基础,扩展所学。
并且此次课程设计,基于课程理论知识和网上资料,使我对数字信号处理课程有了更深一步的了解和掌握,对利用CCS软件编程的数字信号处理方法有了进一步的了解。
在理论课的基础上进行实验实习,是对本门课程的深入学习和掌握,在以后的工作学习中,数字信号的处理都是采用计算机仿真的方法进行测试,因此,掌握基于计算机的数字信号处理方法对以后的工作和学习有很大的帮助。
这样一个课程设计对我们的发展有着极大的帮助!
由于基础知识不够扎实,在本次课程设计的过程中,我经常遇到各种难题,比如说程序看不懂,调试时显示结果与预期不一致等等。
而每当我遇到困难的时候,老师总会给予我耐心的教导,帮助我发现问题,纠正错误;同学也会很热情的帮助我修改和完善设计方案。
在这样一个良好的环境下,我顺利地完成了本次DSP课程设计,让我发现了自己所学知识
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 正弦波 发生器 DOC
![提示](https://static.bdocx.com/images/bang_tan.gif)