正弦波信号发生器
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 的值的程序