正弦波信号发生器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

… …
(4) 熟悉用 C 语言、汇编语言编程 DSP 源程序

(5) 学习 DSP 程序的调试及编写,及运用观察变量的方法查看程序的运行情况。
… …
(6) 掌握工程设计的流程及方法。

… 二.实验内容:


用 PMS320C5402 的汇编语言程序设计正弦信号发生器,大大方便了程序的编辑,调
… …
试和加快了程序的运行速度。
线 …
若要计算一个角度 x 的正弦和余弦值,可取泰勒级数的前 5 项进行近似计算。

sin(x)=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!
… …
=x(1-x^2/2*3(1-x^2/4*5( 1-x^2/6*7(1-x^2/8*9)))) (式 1)

cos(x) =1-x^2/2!+x^4/4!-x^6/6!+x^8/8!
指导教师签名:
日期:
… 专业班级
学号
姓名
成绩




… …
实验名称:正弦波信号发生器


… 一.实验目的:


(1) 了解 DSP 及 DSP 控制器的发展过程及其特点。
装 …
(2) 较熟练地在硬件上掌握 DSP 及 DSP 硬件器的结构、各部件基本工作原理。

(3) 熟悉 CCS 集成开发环境,并能较熟练的对 CCS 的开发系统进行使用。
;AR6----2*sin(x)

MAR *AR1+0
… …
loop1:
STM #sin_x+89, AR7 ;sin91(deg.)-sin179(deg.)
STM #88,BRC
RPTB loop2-1
LD *AR7-,A


STL A,*AR6+

loop2:
STM #179,BRC


STM #sin_x,AR7
… 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

… …
STL A,@d_xc

CALL sinx
;d_sinx=sin(x)
… …
CALL cosx
;d_cosx=cos(x)

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

MPYA @d_cosx
;B=sin(x)*cos(x)
… …
STH B,1,*AR6+
;A=1-x^2/56,T=x^2

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


STH A,*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+
… …
d_temp_c .usect "cos_vars",1
… d_cosx .usect "cos_vars",1
… …
c_l_c
.usect "cos_vars",1

.text
… …
SSBX FRCT

STM #d_coef_c,AR5
;move coeffs table_c
… …
RPT #3
… sinx: … …
.def d_xs,d_sinx

.data
… …
table_s
.word 01C7H
;C1=1/(8*9)

.word 030BH
;C2=1/(6*7)
… 订
.word 0666H
;C3=1/(4*5)

.word 1556H
;C4=1/(2*3)
… …
d_coef_s .usect "coef_s",4
太原理工大学现代科技学院 课程设计
设计名称来自百度文库专业班级 学号 姓名 指导教师
专业班级 设计名称
设计 任务 主要 设计 参数
太原理工大学现代科技学院
课程设计任务书
学生姓名
课程名称
设计周数
指导教师
设计内容 设计要求
主要参考 资料 学生提交 归档文件
注:1.课程设计完成后,学生提交的归档文件应按照:封面—任务书—说明书—图纸的顺 序进行装订上交(大张图纸不必装订) 2.可根据实际内容需要续表,但应保持原格式不变。

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


ST
A,*AR2
;(AR2)=x^2

||LD *AR4,B
;B=1


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

DARAM2: org=0090H, len=0010H
… 订
DARAM3: org=0200H, len=0200H

}
… …
SECTIONS

{
… …
.text :> EPROM PAGE 0

.data :> EPROM PAGE 0
… …
STACK :> SPRAM
PAGE 1

sin_vars :> DARAM1
为 0.5 度 ) 的 正 弦 和 余 弦 值 ;
第 二 步 :利 用 sin(2x)=2sin(x)cos(x)公 式 ,计 算 0 度 ~90 度 的 正 弦 值( 间
… 隔 为 1 度 );
… …
第 三 步 : 通 过 复 制 , 获 得 0 度 ~359 度 的 正 弦 值 ;

第 四 步 : 将 0 度 ~359 度 的 正 弦 值 重 复 从 PA 口 输 出 , 便 可 得 到 正 弦 波 。
… …
三.实验原理


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

通常有两种方法可以产生正弦波,分别为查表法和泰勒级数展开法。
… …
查表法是通过查表的方式来实现正弦波,主要用于对精度要求不很高的场合。

泰勒级数展开法是根据泰勒展开式进行计算来实现正弦信号,它能精确地计算出一个
;A=x^2

ST A,*AR2


||LD *AR4,B
;(AR2)=x^2 ;B=1

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


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

STH A,*AR2
;(d_temp)=x^2(1-x^2/72)
MASR *AR2-,*AR3+,B,A

RET

.end
装 …
4.链接命令文件 sin.cmd

MEMORY


{

PAGE 0:
… …
EPROM: org=0E000H, len=1000H

VECS: org=0FF80H, len=0080H
… …
PAGE 1:

SPRAM: org=0060H, len=0020H
… …
DARAM1: org=0080H, len=0010H
;B=x^2(1-x^2/30(1-x^2/56))
ST B,*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))
SFTA A,-1,A
;-1/2

.data
… …
table_c .word 0249H
;C1=1/(7*8)

.word 0444H
;C2=1/(5*6)
… …
.word 0AABH
;C3=1/(3*4)

.word 4000H
;C4=1/2
… 订
d_xc
.usect "cos_vars",1
… d_squr_xc .usect "cos_vars",1
… …
六.源程序

… 1.正弦波的实现
… .mmregs


.def start
… … … sin_x:
.def d_xs,d_sinx,d_xc,d_cosx,sinx,cosx .usect "sin_x",360
订 STACK: .usect "STACK",10H

… k_theta .set 286
SSBX FRCT
… …
STM #d_coef_s,AR5
;move coeffs table_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=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)))

ST B,*AR2


||LD *AR4,B
;(d_temp)=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)))
PAGE 1
… …
coef_s :> DARAM1

… …
四.总体方案设计:
… …
1.基于 DSP 的特点,设计用 TMS320C5402 的 DSP 作为正弦信号发生器的核心控制芯片;

2.用泰勒级数展开法实现正弦波的信号;
… …
3.设置时域观察窗口,得到滤波后的波形图;

4.设置频域观察窗口,得到滤波后的波形图。

… 五.主要参数

… …
coff_x, squr_x,temp,sinx,cosx
;theta=pi/360(0.5deg)
… start:


.text

STM #STACK+10H,SP


STM k_theta,AR0

STM 0,AR1


STM #sin_x,AR6

STM #90,BRC


RPTB loop1-1

LDM AR1,A
… 线
LD #d_xs,DP

STL A,@d_xs


MPYA d_xs
;B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))))

STH B,d_sinx


RET
;sin(theta)
… 3.计算 cosx 的值的程序 … … cosx:

.def d_xc,d_cosx
… …
d_coef_c .usect "coef_c",4

=1-x^2/2(1-x^2/3*4(1-x^2/5*6(1-x^2/7*8)))
(式 2)


由 (式 1)和 ( 式 2) 可 推 导 出 递 推 公 式 , 即

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


cos(nx)=2cos(x)sin[(n-1)x]-cos[(n-2)x]
;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))
ST B,*AR2


||LD *AR4,B
;(d_temp)=x^2(1-x^2/42(1-x^2/72)) ;B=1

MASR *AR2-,*AR3+,B,A
… …
角度的正弦和余弦值,且只需要较小的存储空间。
… 本次主要用泰勒级数展开法来实现正弦波信号。

产生正弦波的算法


在高等数学中,正弦函数和余弦函数可以展开成泰勒级数,其表达式为:
… …
sin(x)=x-(x^3/3!)+(x^5/5!)-(x^7/7)+(x^9/9)-…

cos(x)=1-(x^2/2!)+(x^4/4!)-(x^6/6!)+(x^8/8!)-…


NEG A

MPYA *AR2+


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

RETD


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

STH B,*AR2
;cos(theta)

(式 4)

由 递 推 公 式 可 以 看 出 , 在 计 算 正 弦 余 弦 值 时 , 不 仅 需 要 已 知 的 cos(x),

… 而 且 还 需 要 sin(n-1)x,sin(n-2)x 和 cos(n-2)x。

利用计算一个角度的正余弦值程序可实现正弦波。其实现步骤如下:
第 一 步 :利 用 计 算 正 弦 函 数 和 余 弦 函 数 的 子 程 序 ,计 算 0 度 ~45 度 (间 隔
;sin180(deg.)-sin359(deg.)

RPTB loop3-1


LD *AR7+,A

NEG A


STL A,*AR6+

loop3:
STM #sin_x,AR6


STM #1,AR0
;generate sin wave

STM #360,BK


B loop3

… …
2.计算 sinx 的值的程序
相关文档
最新文档