基于DSP的设计正弦波信号发生器

一.设计目的

设计一个基于DSP的正弦信号发生器

二.设计内容

利用基于CCS开发环境中的C54X汇编语言来实现正弦信号发生装置。

三.设计原理

一般情况,产生正弦波的方法有两种:查表法和泰勒级数展开法。查表法是使用比较普遍的方法,优点是处理速度快,调频调相容易,精度高,但需要的存储器容量很大。泰勒级数展开法需要的存储单元少,具有稳定性好,算法简单,易于编程等优点,而且展开的级数越多,失真度就越小。本文采用了泰勒级数展开法。一个角度为θ的正弦和余弦函数,可以展开成泰勒级数,取其前5项进行近似得:

式中:x为θ的弧度值,x=2πf/fs(fs是采样频率;f是所要发生的信号频率。

正弦波的波形可以看作由无数点组成,这些点与x轴的每一个角度值相

的y的值(在x轴取N个点进行逼近)。整个系统软件由主程序和基于泰勒展开法的SIN子程序组成,相应的软件流程图如图。

四. 设计方案

本设计采用TMS320C54X系列的DSP作为正弦信号发生器的核心控制芯片。

通过计算一个角度的正弦值和余弦值程序可实现正弦波,其步骤如下:

1.利用sinx和cosx子程序,计算0°~45°(间隔为0.5°)的正弦和余弦值

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

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

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

三.软件操作

利用 CCS 集成开发环境,用户可以在一个开发环境下完成工程定义、程序 编辑、编译链接、调试和数据分析等工作环节。

1. 创建工程(project)文件

选择 Project→New,在“Project”文本框中键入将要创建的工程项目名,本例工程项目名为“sin”

2. 向工程中添加文件

选择 Project→Add Files to Project,将 sine.asm文件自动添加到 Project→Source 中。 用同样的方法 将 sine.cmd 文件添加到对应的目录中。

3. 构建工程,工程所需文件编辑完成后,可以对该工程进行编译链接,产生可执行文件, 为调试做准备。

选择 Project→Build,系统提示没有出错信息后,系统自动生成

一个可执行文件,sine.out 文件。

4.载入可执行文件

选择 File→Load Program 载入编译链接好的可执行文件sine.out

5.运行程序

选择 Debug→Run运行,可以通过查看内存表等方法,看到程序运行的结果。

6.观察数据和图形

①选择 View→Graph→Time/Frequence:

②调整输出图形参数

:

五. 源程序

正弦波源程序sin.asm:

.title "sin.asm"

.mmregs

.def start

.def d_xs,d_sinx,d_xc,d_cosx,sinx,cosx sin_x: .usect "sin_x",360

STACK: .usect "STACK",10

k_theta .set 286

PA0 .set 0

start:

.text

STM #STACK+10,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

STL A,@d_xc

CALL sinx

CALL cosx

LD #d_sinx,DP

LD @d_sinx,16,A

MPYA @d_cosx

STH B,1,*AR6+

MAR *AR1+0

loop1: STM #sin_x+89,AR7

STM #88,BRC RPTB loop2-1

LD *AR7-,A

STL A,*AR6+

loop2: STM #179,BRC STM #sin_x,AR7

RPTB loop3-1

LD *AR7+,A

NEG A

STL A,*AR6+

loop3: STM #sin_x,AR6

STM #1,AR0

STM #360,BK

B loop4

sinx:

.def d_xs,d_sinx .data

table_s .word 01C7H

.word 030BH

.word 0666H

.word 1556H

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_1_s .usect "sin_vars",1 .text

SSBX FRCT STM #d_coef_s,AR5 RPT #3 MVPD #table_s,*AR5+ STM #d_coef_s,AR3 STM #d_xs,AR2 STM #d_1_s,AR4 ST #7FFFH,d_1_s SQUR *AR2+,A ST A,*AR2 ||LD *AR4,B MASR *AR2+,*AR3+,B,A MPYA A STH A,*AR2 MASR *AR2-,*AR3+,B,A MPYA *AR2+

MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 ||LD *AR4,B MASR *AR2-,*AR3+,B,A MPYA d_xs STH B,d_sinx RET

cosx:

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

table_c .word 0249H

.word 0444H

.word 0AABH

.word 4000H

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_1_c .usect "cos_vars",1 .text

SSBX FRCT STM #d_coef_c,AR5 RPT #3 MVPD #table_c,*AR5+ STM #d_coef_c,AR3 STM #d_xc,AR2 STM #c_1_c,AR4 ST #7FFFH,c_1_c

||LD *AR4,B MASR *AR2+,*AR3+,B,A MPYA A STH A,*AR2 MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 ||LD *AR4,B MASR *AR2-,*AR3+,B,A SFTA A,-1,A

NEG A

MPYA *AR2+

MAR *AR2+

RETD

ADD *AR4,16,B

STH B,*AR2 RET

.end

正弦波程序链接命令文件sin.cmd:

-x.\Debug\vectors.obj

-x.\Debug\sin.obj

-o sin.out

-m sin.map

-e start

MEMORY

{

PAGE 0: EPROM: org=0E00H,len=1000H

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, len=0200H }

SECTIONS

{

.text

.data

STACK

sin_vars :>DARAM1 PAGE 1

coef_s

cos_vars :>DARAM2 PAGE 1

coef_c :>DARAM2

sin_x

.vectors :>VECS

}

:>EPROM PAGE 0 :>EPROM PAGE 0 PAGE 1 PAGE 1 PAGE 1 align(512){} > DARAM3 PAGE 0 PAGE 1 :>SPRAM :>DARAM1 :

六. 实验结果及分析

将程序装载到DSP目标芯片中,波形实现结果可以在CCS图形显示界面直观地表示出来

输出结果显示,在CCS图形观察窗口得到了频率稳定,信号干扰小,波形失真度较小的正弦信号

七. 设计总结心得

一.设计目的

设计一个基于DSP的正弦信号发生器

二.设计内容

利用基于CCS开发环境中的C54X汇编语言来实现正弦信号发生装置。

三.设计原理

一般情况,产生正弦波的方法有两种:查表法和泰勒级数展开法。查表法是使用比较普遍的方法,优点是处理速度快,调频调相容易,精度高,但需要的存储器容量很大。泰勒级数展开法需要的存储单元少,具有稳定性好,算法简单,易于编程等优点,而且展开的级数越多,失真度就越小。本文采用了泰勒级数展开法。一个角度为θ的正弦和余弦函数,可以展开成泰勒级数,取其前5项进行近似得:

式中:x为θ的弧度值,x=2πf/fs(fs是采样频率;f是所要发生的信号频率。

正弦波的波形可以看作由无数点组成,这些点与x轴的每一个角度值相

的y的值(在x轴取N个点进行逼近)。整个系统软件由主程序和基于泰勒展开法的SIN子程序组成,相应的软件流程图如图。

四. 设计方案

本设计采用TMS320C54X系列的DSP作为正弦信号发生器的核心控制芯片。

通过计算一个角度的正弦值和余弦值程序可实现正弦波,其步骤如下:

1.利用sinx和cosx子程序,计算0°~45°(间隔为0.5°)的正弦和余弦值

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

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

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

三.软件操作

利用 CCS 集成开发环境,用户可以在一个开发环境下完成工程定义、程序 编辑、编译链接、调试和数据分析等工作环节。

1. 创建工程(project)文件

选择 Project→New,在“Project”文本框中键入将要创建的工程项目名,本例工程项目名为“sin”

2. 向工程中添加文件

选择 Project→Add Files to Project,将 sine.asm文件自动添加到 Project→Source 中。 用同样的方法 将 sine.cmd 文件添加到对应的目录中。

3. 构建工程,工程所需文件编辑完成后,可以对该工程进行编译链接,产生可执行文件, 为调试做准备。

选择 Project→Build,系统提示没有出错信息后,系统自动生成

一个可执行文件,sine.out 文件。

4.载入可执行文件

选择 File→Load Program 载入编译链接好的可执行文件sine.out

5.运行程序

选择 Debug→Run运行,可以通过查看内存表等方法,看到程序运行的结果。

6.观察数据和图形

①选择 View→Graph→Time/Frequence:

②调整输出图形参数

:

五. 源程序

正弦波源程序sin.asm:

.title "sin.asm"

.mmregs

.def start

.def d_xs,d_sinx,d_xc,d_cosx,sinx,cosx sin_x: .usect "sin_x",360

STACK: .usect "STACK",10

k_theta .set 286

PA0 .set 0

start:

.text

STM #STACK+10,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

STL A,@d_xc

CALL sinx

CALL cosx

LD #d_sinx,DP

LD @d_sinx,16,A

MPYA @d_cosx

STH B,1,*AR6+

MAR *AR1+0

loop1: STM #sin_x+89,AR7

STM #88,BRC RPTB loop2-1

LD *AR7-,A

STL A,*AR6+

loop2: STM #179,BRC STM #sin_x,AR7

RPTB loop3-1

LD *AR7+,A

NEG A

STL A,*AR6+

loop3: STM #sin_x,AR6

STM #1,AR0

STM #360,BK

B loop4

sinx:

.def d_xs,d_sinx .data

table_s .word 01C7H

.word 030BH

.word 0666H

.word 1556H

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_1_s .usect "sin_vars",1 .text

SSBX FRCT STM #d_coef_s,AR5 RPT #3 MVPD #table_s,*AR5+ STM #d_coef_s,AR3 STM #d_xs,AR2 STM #d_1_s,AR4 ST #7FFFH,d_1_s SQUR *AR2+,A ST A,*AR2 ||LD *AR4,B MASR *AR2+,*AR3+,B,A MPYA A STH A,*AR2 MASR *AR2-,*AR3+,B,A MPYA *AR2+

MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 ||LD *AR4,B MASR *AR2-,*AR3+,B,A MPYA d_xs STH B,d_sinx RET

cosx:

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

table_c .word 0249H

.word 0444H

.word 0AABH

.word 4000H

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_1_c .usect "cos_vars",1 .text

SSBX FRCT STM #d_coef_c,AR5 RPT #3 MVPD #table_c,*AR5+ STM #d_coef_c,AR3 STM #d_xc,AR2 STM #c_1_c,AR4 ST #7FFFH,c_1_c

||LD *AR4,B MASR *AR2+,*AR3+,B,A MPYA A STH A,*AR2 MASR *AR2-,*AR3+,B,A MPYA *AR2+ ST B,*AR2 ||LD *AR4,B MASR *AR2-,*AR3+,B,A SFTA A,-1,A

NEG A

MPYA *AR2+

MAR *AR2+

RETD

ADD *AR4,16,B

STH B,*AR2 RET

.end

正弦波程序链接命令文件sin.cmd:

-x.\Debug\vectors.obj

-x.\Debug\sin.obj

-o sin.out

-m sin.map

-e start

MEMORY

{

PAGE 0: EPROM: org=0E00H,len=1000H

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, len=0200H }

SECTIONS

{

.text

.data

STACK

sin_vars :>DARAM1 PAGE 1

coef_s

cos_vars :>DARAM2 PAGE 1

coef_c :>DARAM2

sin_x

.vectors :>VECS

}

:>EPROM PAGE 0 :>EPROM PAGE 0 PAGE 1 PAGE 1 PAGE 1 align(512){} > DARAM3 PAGE 0 PAGE 1 :>SPRAM :>DARAM1 :

六. 实验结果及分析

将程序装载到DSP目标芯片中,波形实现结果可以在CCS图形显示界面直观地表示出来

输出结果显示,在CCS图形观察窗口得到了频率稳定,信号干扰小,波形失真度较小的正弦信号

七. 设计总结心得


相关文章

  • 基于dsp的正弦波信号发生器课程设计
  • 目录 第1章 绪论 ............................................. 1 1 DSP简介 ............................................... 1 第2章 ...查看


  • 数控移相信号发生器
  • 湖南人文科技学院 课程设计报告 课程名称:VHDL 语言与EDA 课程设计 设计题目: 数控移相信号发生器 系 别: 通信与控制工程系 专 业: 电子信息工程 班 级: 2008级1班 学生姓名: 叶小华 稂雄伟 学 号: 08409106 ...查看


  • 一种采用DSP控制并基于三相半桥逆变器的UPS
  • 第41卷第4期电力电子技术 Vol.41,No.4April,2007 2007年4月PowerElectronics 一种采用DSP控制并基于三相半桥逆变器的UPS 黄玉水1,侯明鑫1,吴胜益2 (1.南昌大学,江西南昌330031:2. ...查看


  • 三相pwm整流器研究
  • 毕业设计(论文) 题 目 学院(系): 自动化学院 专业班级: 学生姓名: 指导教师: 胡红明 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果.除了文中特别加以标注引用的内容外,本论文不包括任 ...查看


  • 三相四线制有源电力滤波器软硬件系统的设计
  • 摘 要:为了解决三相四线制电网中谐波.无功功率和三相不平衡等电能质量问题,本文采用基于DSP+CPLD全数字控制的并联型有源电力滤波器(APF)来实现补偿.本文分析了APF的系统结构及工作原理,给出了装置的总体控制方案,并进行控制系统的优化 ...查看


  • 江苏省大学生创新训练计划项目研究总结报告
  • 附件3 江苏省大学生创新训练计划项目研究总结报告 一.项目研究背景及意义 20世纪集成电路的发展为数字音频技术提供了良好的发展空间,使数字音频技术得到了迅猛的发展.随着音频处理技术的发展,它们对音质.体积.功耗和处理速度的要求越来越苛刻,作 ...查看


  • 基于Multisim10的正弦波振荡电路仿真
  • 2011年7月第30卷第7期 应用天地 基于Multisim10的正弦波振荡电路仿真 吴凌燕 (海军航空工程学院青岛分院 青岛 266041) 摘 要:以文氏电桥正弦波振荡电路仿真为例,分析了基本及稳幅文氏电桥正弦波发生器的特点,并采用Mu ...查看


  • 基于空间电压矢量电力机车四象限整流的研究
  • 基于空间电压矢量电力机车四象限整流的研究 时间:2012-08-31 09:19:56 来源:电源在线作者: 摘要:本论文侧重于三相电压型PWM 整流器及其控制系统的工程设计与实现,以提供一种较为实用的控制器设计与选取方法.论文主要内容包括 ...查看


  • 附带资料 基于matlab的IIR数字滤波器设计
  • 基于matlab 的IIR 数字滤波器设计 一. IIR 数字滤波器介绍 1.IIR 数字滤波器的基本原理 所谓数字滤波器,是指输入,输出均为数字信号,通过一定运算关系改变输入信号所含频率成分的 相对比例或者滤除某些频率成分的硬件.实质上就 ...查看


热门内容