当前位置:
文档之家› 基于DSP的正弦信号发生器的设计
基于DSP的正弦信号发生器的设计
/(/A)低16位→d_xc
sinx
/调/ 用sinx程序
cosx
/调/ 用cosx程序
#d_sinx,DP /D/P←d_sinx
@d_sinx,16,A /A/=sin(x)
@d_cosx
/B/= sin(x)*cos(x)
B,1,*AR6+
/A/R6→2*sin(x)*cos(x)
*AR1+0
方
ST
A,*AR2 /(/ A)左移16位→AR2
||LD *AR4,B /(/ AR4)左移16位→B
MASR
*AR2+,*AR3+,B,A /从/ 累加器A中减去(AR2)
*(AR3)
MPYA
A
/操/ 作数与累加器A中高位相乘
STH
A,*AR2 /(/ A)高16位→AR2
MASR
*AR2-,*AR3+,B,A /从/ 累加器A中减去(AR2)
.text
定//义文本代码段
SSBX
FRCT
/F/RCT=1以清除冗余符号位
STM
#d_coef_c,AR5 /A/R5指向d_coef_c首地址
RPT
#3
重//复下条指令4次
MVPD
#table_c,*AR5+ /把/ table_c中的数复制到中
AR5
STM
#d_coef_c,AR3 /A/R3指向d_coef_c首地址
d_temp_c .usect "cos_vars",1 //为d_temp_c中cos_vars保存1个存储
单元
d_cosx .usect "cos_vars",1 //为d_cosx中cos_vars保存1个存储单
元
c_l_c
.usect "cos_vars",1 //为c_l_c中cos_vars保存1个存储单元
LDM LD STL STL CALL CALL LD LD MPYA STH MAR loop1: STM sin179(deg.) STM RPTB 90次 LD STL loop2: STM
loop3:
STM RPTB LD NEG STL STM STM
k_theta,AR0 0,AR1 #sin_x,AR6 #90,BRC loop1-1
.word 030bh
/c/1=1/(6*7)
.word 0666h
/c/1=1/(4*5)
.word 1556h
/c/1=1/(2*3)
d_coef_s .usect "coef_s",4
//为"coef_s"保留4个存储空间
d_xs
.usect "sin_vars",1 /为/ d_xs中sin_vars保留1个
STACK: .usect "STACK",10 //为堆栈保留10个存储空间
k_theta .set
286
/t/heta=pi/360(0.5deg)
PA0
.set
0
_c_int00
.text
定//义文本程序代码段
STM
#STACK+10,SP /设/ 置堆栈指针
STM STM STM STM RPTB 至
MEMORY段就是用来规定目标存储器的模型,通过这条指令,可以定义系
统中所包含的各种形式的存储器,以及它们占据的地址范围;SECTIONS
段说明如何将输入段组合成输出段以及在可执行文件中定义输出段、规
定输出段在存储器中的位置等。
MEMORY
{
PAGE 0:
EPROM:
org = 0E000h, len = 1000h
ST
B,*AR2 /(/ B)左移16位→AR2
||LD *AR4,B /(/ AR4)左移16位→B
MASR
*AR2-,*AR3+,B,A /从/ 累加器A中减去(AR2)
*(AR3)
MPYA
d_xs /d/_xs指向的操作数与累加器A中高16位相乘
STH
B,d_sinx /(/ B)高16位→d_sinx
1. 利用sinx和cosx子程序,计算0—45°(间 隔为0.5°)的 正弦和余弦值
2. 利用sin(2x)=2sin(x)cos(x)公式,计算0—90°的正弦值 (间隔为1°)
3. 通过复制,获得0—359°的正弦值 4. 将0—359°的正弦值重复从PA口输出,遍可得到正弦波
整个系统相应的软件流程图如右图所示。
/(/(AR7)) →A,然后AR7减去1 /(/A) 低16位→AR6
/s/in180(deg.)—sin359(deg.) (BRC)=179,重复执行180次
/A/R7指向sin_x首地址
/(/(AR7)) →A,然后AR7加1 累//加器变负 /A/低16位→AR6
/A/R6指向sin_x /A/R←01
VECS:
org = 0FF80h, len = 0080h
PAGE 1:
SPRAM:
org = 0060h,
len = 0020h
DARAM1:
org = 0080h,
len = 0010h
DARAM2:
org = 0090h,
len = 0010h
DARAM3:
org = 0200h,
STM
#d_xc,AR2
/A/R2 指向d_xc首地址
STM
#c_l_c,AR4 /A/R4指向c_l_c首地址
ST
#7FFFh,c_l_c /7/FFFh→c_l_c
SQUR
*AR2+,A
/求/ x的平方存放在累加器A中
ST
A,*AR2
/(/ A)左移16位→AR2
||LD *AR4,B
/(/ AR4)左移16位→B
利用基于CCS开发环境中的C54x汇编语言来实现正弦信号发生装 置。 2、 设计原理
一般情况,产生正弦波的方法有两种:查表法和泰勒级数展开法。 查表法是使用比较普遍的方法,优点是处理速度快,调频调相容易,精 度高,但需要的存储器容量很大。泰勒级数展开法需要的存储单元少, 具有稳定性好,算法简单,易于编程等优点,而且展开的级数越多,失 真度就越小。
*(AR3)
MPYA
*AR2+ /A/R2指向的数与累加器A的高16位相乘
ST
B,*AR2 /(/ B)左移16位→AR2
||LD *AR4,B /(/ AR4)左移16位→B
MASR
*AR2-,*AR3+,B,A /从/ 累加器A中减去(AR2)
*(AR3)
MPYA
*AR2+ /与/ 累加器A中高16位相乘
基于DSP的正弦信号发生器的设计
1、绪论 1.1 课题背景
数字信号处理(Digital Signal Processing,简称DSP)是一门涉 及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以 来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生 并得到迅速的发展。数字信号处理是一种通过使用数学技巧执行转换 或提取信息,来处理现实信号的方法,这些信号由数字序列表示。在 过去的二十多年时间里,信号处理已经在通信等领域得到了极为广泛 的应用。
/修/ 改辅助寄存器AR1
#sin_x+89,AR7 /s/in91(deg.)—
#88,BRC loop2-1
/重/ 复执行下条指令至loop2-1处
*AR7-,A A,*AR6+ #179,BRC
#sin_x,AR7 loop3-1 *AR7+,A A A,*AR6+ #sin_x,AR6 #1,AR0
本文采用了泰勒级数展开法。一个角度为θ的正弦和余弦函数,可 以展开成泰勒级数,取其前5项进行近似得:
式中:为θ的弧度值,(是采样频率;f是所要发生的信号频率) 3、 设计方案
本设计采用TMS320C54X系列的DSP作为正弦信号发生器的核心控制 芯片。
通过计算一个角度的正弦值和余弦值程序可实现正弦波,其步骤如 下:
MAR
*AR2+
RETD
ADD
*AR4,16,B //B=1-x^2/2(1-x^2/12(1-x^2/30(1-
x^2/56)))
STH
B,*AR2 //cos(theta)
RET
.end
4.2 正弦波程序链接命令文件sin.cmd
.cmd文件描述输入文件和输出文件,说明系统中有哪些可用存储
器、程序段、堆栈及复位向量和中断向量等安排在什么地方。其中
STM
#360,bk
/B/K←360
loop4: PORTW *AR6+0%,PA0 /P/A0=*AR6+0%,向PA0输出数据
B
loop4
sinx:
.def
d_xs,d_sinx /定/ 义标号d_xs,d_sinx
.data
定//义数据代码段
table_s .word 01c7h
/c/1=1/(8*9)
RET
//返回
cosx:
.def
d_xc,d_cosx /定/ 义标号d_xc,d_cosx
d_coef_c .usect "coef_c",4 //为coef_c保留4个存储空间
.data
/定/义数据代码段
table_c .word 0249h
/c/1=1/(7*8)
.word 0444h
/c/1=1/(6*5)
长期以来,信号处理技术—直用于转换或产生模拟或数字信号。其 中应用的最频繁的领域就是信号的滤波。此外,从数字通信、语音、音 频和生物医学信号处理到检测仪器仪表和机器人技术等许多领域中,都 广泛地应用了数字信号处理技术。数字信号处理己经发展成为一项成熟 的技术,并且在许多应用领域逐步代替了传统的模拟信号处理系统。而 本文中基于DSP技术设计的正弦波信号发生器已被广泛地应用于通信、 仪器仪表和工业控制等领域的信号处理系统中。 1.2 课题内容