李正弦波振荡器 2.docx

上传人:b****5 文档编号:7265039 上传时间:2023-01-22 格式:DOCX 页数:20 大小:656.62KB
下载 相关 举报
李正弦波振荡器 2.docx_第1页
第1页 / 共20页
李正弦波振荡器 2.docx_第2页
第2页 / 共20页
李正弦波振荡器 2.docx_第3页
第3页 / 共20页
李正弦波振荡器 2.docx_第4页
第4页 / 共20页
李正弦波振荡器 2.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

李正弦波振荡器 2.docx

《李正弦波振荡器 2.docx》由会员分享,可在线阅读,更多相关《李正弦波振荡器 2.docx(20页珍藏版)》请在冰豆网上搜索。

李正弦波振荡器 2.docx

李正弦波振荡器2

内蒙古工业大学信息工程学院

 

实验报告

 

课程名称:

DSP技术及应用

实验名称:

正弦波振荡器

实验类型:

验证性□综合性□设计性■

实验室名称:

信息工程学院9楼机房

班级:

电子11-2班学号:

姓名组别:

同组人:

成绩:

实验日期:

2014年6月27日

实验报告撰写要求

一、实验前用预习报告纸撰写预习报告,预习报告包括以下内容

1、实验目的

2、实验用仪器设备、器材或软件环境

3、实验原理、方案设计、程序框图、预编程序等

4、实验过程中需要记录的实验数据表格

二、实验过程中,要认真观察,仔细记录

三、完成实验后用实验报告纸撰写实验报告,包括以下内容

1、仪器设备型号及编号

2、实验器材或软件环境

3、实验步骤、程序调试方法

4、实验数据处理及结果分析

5、实验中存在的问题

6、体会及思考题

四、报告撰写时,要求格式规范、书写整齐

 

预习报告成绩:

指导教师审核(签名):

年月日

预习报告

一、实验目的

(1)了解利用CCS进行DSP工程项目创建、编译和运行的过程;

(2)会利用CCS中提供的图形化显示工具、断点、探点等调试工具进行工程项目的简单调试;

(3)能够设计基于迭代法的数字正弦振荡器;

(4)掌握定时器中断的设置和使用。

二、实验用仪器设备、器材或软件环境

(1)微机一台;

(2)CCS软件;(3)DES5402PP-U实验箱。

三、预习要求

(1)参照教材学习DSP定时器的工作原理、中断频率范围、具体寄存器的设置。

根据期望的数据转换速率,得到合理的定时器寄存器设置参数。

(2)参照教材学习二阶IIR数字振荡器的设计原理。

根据选定的数据转换速率和规定的正弦波频率(4kHz),设计相应IIR数字滤波器(差分方程),并对滤波器系数进行合适的量化(确定Q值),转换成定点二进制补码。

(3)参照教材学习在CCS中设置断点、探针的方法,程序动态运行(animate)的要求;学习设置图形化显示工具进行时、频域分析的方法,特别是频域分析工具的使用(各种谱分析方法、FFT点数的设置、窗函数的选用等)。

规划程序调试策略和数据、波形的采集、分析方法。

(4)参照教材给出的指令说明,编写实验程序代码。

四、实验要求

(1)对自己编写的实验程序进行汇编、运行,对出现的问题进行调试,并作必要记录。

(2)记录数字序列在不少于2个周期内的数据及对应的时域波形(注意地址的一致性)。

(3)分析数字序列的频谱(需要注明FFT点数、窗函数和其他关键信息)。

(4)观察量化(不同Q值)对定点DSP算法的影响(频谱纯度、稳定性),记录关键数据和波形。

五、实验报告要求

(1)说明设计过程(包括滤波器系数、量化结果、定时器设置等);

(2)绘制程序流程图(要求与代码相对应);

(3)实验要求记录的数据、波形以及其他关键信息;

(4)程序调试中遇到的问题以及解决过程;

(5)实验代码清单;

实验报告成绩:

指导教师审核(签名):

年月日

实验报告

一、实验目的

(1)了解利用CCS进行DSP工程项目创建、编译和运行的过程;

(2)会利用CCS中提供的图形化显示工具、断点、探点等调试工具进行工程项目的简单调试;

(3)能够设计基于迭代法的数字正弦振荡器;

(4)掌握定时器中断的设置和使用。

二、实验用仪器设备、器材或软件环境

(1)微机一台;

(2)CCS软件;(3)DES5402PP-U实验箱。

三、实验原理

本实验采用递归的差分方程方法计算正弦和余弦值,其数字振荡器的实现原理与实验5(c)相同。

其实现公式为:

y[n]=2cosα×y[n-1]-y[n-2]

式中:

为角度的计算步长,f0是正弦信号的频率,fs是D/A转换速率。

利用上面的递推公式计算正弦或余弦值y[n]需要已知cosα和正弦/余弦的前两个初始值y[0]和y[1]。

在产生周期性的正弦信号时,必须以一定的D/A转换速率fs将各个样点值送往D/A转换器。

正弦信号每个周期的样点数N由正弦信号的频率f0及D/A转换速率fs决定,即

例如,当利用递归的差分方程产生正弦信号时,若设定D/A转换速率fs=16000Hz,则产生f0=1000Hz的正弦波信号时,存在

,此时

首先在程序中计算出cosα及初始值y[0]和y[1]。

cosα=0.9238795;

y[0]=sin0=0;

y[1]=sinα=0.382683;

n≧2以后的y[n]的值,都可以通过前面的递推公式递归计算得出。

在产生正弦信号的过程中,由于sinx的值总是小于1的数,而F206DSP是16位定点处理器,所以要将其乘以215,变成Q15的数据格式,才能够在DSP中送到D/A转换器进行处理。

本实验采用低速D/A转换器(AIC10)进行D/A转换。

在AIC10中包含A/D和D/A两部分电路,在实验中只使用D/A转换部分。

F206DSP通过片内外设SSP(同步串行口)与EVM板上的AIC10相连。

当F206DSP的发送FIFO缓冲区空时,产生SSP发送中断。

此时调用XmitIsr中断服务程序。

XmitIsr中断服务程序的功能:

对于软件仿真时,中断服务程序根据正弦振荡器的算法计算出1000h点正弦波的波形值,并把这些波形值存储到板载存储器900h开始的存储单元上;

对于硬件仿真时,中断服务程序除了根据正弦振荡器的算法产生正弦波波形值以外,还要将该波形数据通过AIC10进行D/A转换。

四、实验内容与步骤

在CCS下的仿真器驱动程序的具体过程:

步骤1:

双击桌面上的SetupCCS2(’C5000)图标,启动CCS设置在弹出对话框中单击“Clear”按钮,清除以前定义的配置。

从列出的可供选择的配置文件中,选择能与使用的目标系统相匹配的配置文件。

建立新的工程:

添加工程中支持C源文件(*.c*)、汇编源文件(*.a*、*.s*)、库文件(*.o*、*.lib)、头文件(*.h)和链接命令文件(*.cmd)项目,添加文件到工程(Project→AddFilestoProject)

实验源程序:

 

调试程序:

“Project→RebuildAll”,对工程进行重新编译。

•“File→LoadProgram”,选volume.out并打开,将Build生成的程序加载到DSP。

•“View→MixedSource/ASM”。

该设置使得C程序与其汇编结果同时显示。

•“Debug→GoMain”。

使得程序从主程序开始执行。

•“Debug→Run”,可以在Output窗口看到“beginprocessing”信息。

•“Debug→Halt,中止正在执行的程序。

调试和运行:

在File菜单选择“FileI/O”,出现FileI/O对话框,在对话框中选择输入/输出文件。

在“FileInput”栏中,单击AddFile按钮。

输入输出口设置:

在volume.c文件所在目录选择sina.dat,并单击打开按钮。

此时将出现一个控制窗口,可以在运行程序时使用这个窗口来控制数据文件的开始、停止、前进、后退等操作。

在FileI/O对话框中,在Address域填入inp_buffer,在length域填入100,选中WrapAround复选框(读取数据的循环特性)。

单击“AddProbePoint”按钮,将出现Break/ProbePoints对话框,选中“ProbePoints”栏。

在ProbePoint列表中显示“VOLUME.Cline61-->NoConnection”。

表明该第61行已经设置ProbePoint,但还没有和PC文件关联。

在Connect域,单击向下箭头并从列表中选sine.dat。

单击Replace按钮,ProbePoint列表框表示ProbePoint已与sine.dat文件相关联。

单击“确定”按钮,FileI/O对话框指示文件连至一个ProbePoint。

单击“确定”按钮,关闭FileI/O对话框。

 

(1)选择“View→Graph→Time/Frequency(显示→图形→时域/频域)”。

弹出GraphProperty对话框

(2)在GraphProperty对话框中,更改GraphTitle(图形标题)、StartAddress(起始地址)、AcquisitionBufferSize(采集缓冲区大小)、DSPDataType(DSP数据类型)、Autoscale(自动伸缩属性)及MaximumY-value(最大Y值)。

(3)单击OK按钮,出现一个显示inp_buffer波形的图形窗口。

(4)在图形窗口中右击,从弹出菜单中选择ClearDisplay,清除已显示波形。

(5)再次执行“View→Graph→Time/Frequency”。

(6)将GraphTitle修改为outputbuffer,StartAddress修改为out_buffer,其他设置不变。

(7)单击OK按钮,出现一个显示out_buffer波形的图形窗口,右击从菜单中选择ClearDisplay命令,清除已有显示波形。

参数调整:

由于ProbePoint不会更新图形显示内容。

本例将设置一个断点,使图形窗口自动更新。

使用Animate命令,使程序到达断点时更新窗口后自动继续运行。

(1)在volume.c窗口,将光标放在dataIO行上。

(2)在该行同时设置一个断点和一个ProbePoint,使程序中断时执行两个操作:

传送数据和更新图形显示。

(3)在Debug菜单单击Animate。

此命令将运行程序,碰到断点后临时中断程序运行,更新窗口显示,然后继续执行程序(5)每次碰到ProbePoint时,CCS将从sine.dat文件读取100个样值,并将其写至输入缓冲inp_buffer。

由于sine.dat文件保存的是40个采样值的正弦波形数据,因此每个波形包括2.5个sin周期波形,如下图所示。

(6)选择“Debug→Halt(调试→停止)”,停止程序运行。

波形显示:

五、实验源程序代码

主函数

main.asm

.title"2kHzsinewavegeberator(fs=40000Hz,25usTINT)"

.mmregs

.global_c_int00

.globaly0,y1,y2,AA,BB,CC

.refvector

OFF_INTIMER.set04Ch;vectorofINTtimeratVECTOR+OFF_INTIMER

INIT_A.set079bch;A/2=0.9510498046875

INIT_B.set0c000h;B/2=-0.5

INIT_C.set0278dh;C=0.308990478515625

.bssy0,1

.bssy1,1

.bssy2,1

.bsstemp,1

.bssAA,1

.bssBB,1

.bssCC,1

.text

_c_int00:

ld#0,dp

ssbxintm;disableallinterrupt!

st#1fffh,sp

ld#vector,a;getvectortableaddress!

and#0FF80h,a

andm#007Fh,pmst

orpmst,a

stlma,pmst;setIPTR

stm#10h,TCR;initTIMER

stm#2499,PRD;f=100M/(2499+1)=40kHz

stm#20h,TCR;resetTIMER

ldmIMR,a;readbackIMR

or#08h,a;enableTIMERinterrupt

stlma,IMR;setIMR

ld#temp,dp;setDP

ssbxFRCT;prepareforfractionmpy

st#INIT_A,AA;initAA

st#INIT_B,BB;initBB

st#INIT_C,CC;initCC

pshdCC

popdy2;inity2,y2=CC

ldAA,T;T=AA

mpyy2,a;y2*AA->a

stha,y1;y2*AA->y1

stm#0h,TCR;enableTIMER

nop

rsbxintm;enableallinterrupts!

idle:

nop

bidle

.end

tint_ISR.asm

.mmregs

.global_tint

.refy0,y1,y2,AA,BB,CC

;------------------------------

;ISRforTIMER0interrupt!

;-----------------------------

_tint:

ld#BB,DP

ldBB,T;T=BB

mpyy2,a;a=y2*BB

ltdy1;T=y1,y2=y1

macAA,a;a=a+y1*AA

stha,1,y1;newcosdata->y1

stha,1,y0;newcosdata->y0

nop;setbreakpointinCCS!

!

!

rete

.end

vector_table.asm

s

.ref_c_int00

.ref_tint

.globalvector

.sect".int_table"

;----------------------------

;interruptevectortable

;----------------------------

vector:

rsb_c_int00

nop

nop

nmirete

nop

nop

nop

sint17rete

nop

nop

nop

sint18rete

nop

nop

nop

sint19rete

nop

nop

nop

sint20rete

nop

nop

nop

sint21rete

nop

nop

nop

sint22rete

nop

nop

nop

sint23rete

nop

nop

nop

sint24rete

nop

nop

nop

sint25rete

nop

nop

nop

sint26rete

nop

nop

nop

sint27rete

nop

nop

nop

sint28rete

nop

nop

nop

sint29rete

nop

nop

nop

sint30rete

nop

nop

nop

int0rete

nop

nop

nop

int1rete

nop

nop

nop

int2rete

nop

nop

nop

tint0b_tint

nop

nop

brint0rete

nop

nop

nop

bxint0rete

nop

nop

nop

dmac0rete

nop

nop

nop

tint1rete

nop

nop

nop

int3rete

nop

nop

nop

hpintrete

nop

nop

nop

dmac2rete

nop

nop

nop

dmac3rete

nop

nop

nop

dmac4rete

nop

nop

nop

dmac5rete

nop

nop

nop

rev1rete

nop

nop

nop

rev2rete

nop

nop

nop

.end

;---------------------------------------

;endofinterruptevectortable

;---------------------------------------

sine.cmd

MEMORY

{

PAGE1:

INT_D:

ORIGIN=80h,LENGTH=1F80h

PAGE0:

EXT_P:

ORIGIN=2000h,LENGTH=2000h

}

SECTIONS{

.text:

>EXT_PPAGE0

.int_table:

>(EXT_PALIGN(128)PAGE(0))

.data:

>INT_DPAGE1

}

.out文件

.title"2kHzsinewavegeberator(fs=40000Hz,25usTINT)"

.mmregs

.global_c_int00

.globaly0,y1,y2,AA,BB,CC

.refvector

 

OFF_INTIMER.set04Ch;vectorofINTtimeratVECTOR+OFF_INTIMER

INIT_A.set079bch;A/2=0.9510498046875

INIT_B.set0c000h;B/2=-0.5

INIT_C.set0278dh;C=0.308990478515625

.bssy0,1

.bssy1,1

.bssy2,1

.bsstemp,1

.bssAA,1

.bssBB,1

.bssCC,1

.text

_c_int00:

ld#0,dp

ssbxintm;disableallinterrupt!

st#1fffh,sp

ld#vector,a;getvectortableaddress!

and#0FF80h,a

andm#007Fh,pmst

orpmst,a

stlma,pmst;setIPTR

stm#10h,TCR;initTIMER

stm#2499,PRD;f=100M/(2499+1)=40kHz

stm#20h,TCR;resetTIMER

ldmIMR,a;readbackIMR

or#08h,a;enableTIMERinterrupt

stlma,IMR;setIMR

ld#temp,dp;setDP

ssbxFRCT;prepareforfractionmpy

st#INIT_A,AA;initAA

st#INIT_B,BB;initBB

st#INIT_C,CC;initCC

pshdCC

popdy2;inity2,y2=CC

ldAA,T;T=AA

mpyy2,a;y2*AA->a

stha,y1;y2*AA->y1

stm#0h,TCR;enableTIMER

nop

rsbxintm;enableallinterrupts!

idle:

nop

bidle

.end

六、实验中遇到的问题及结果分析

1.建立Project后,添加完sine.cmd文件后,再进行汇编后成功,没有警告和错误。

2.进行查看波形时,出现错误。

首先由于时间过快,调整后仍然不能够显示波形。

经过检查发现是由于没有将sine的波形载入,载入后错误消失。

七、实验心得体会

在本次DSP的实验中,学会了CCS软件的而应用,包括项目的建立,项目所兼容的文件。

添加文件过程要谨慎。

不能遗漏或者乱填加。

会造成后面项目执行出现错误。

以及利用CCS进行DSP工程项目创建、编译和运行的过程会利用CCS中提供的图形化显示工具、断点、探点等调试工具进行工程项目的简单调试;能够设计基于迭代法的数字正弦振荡器;掌握了定时器中断的设置和使用。

这个实验不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有所提高。

更重要的是,在实验课上我学会了很多学习的方法。

真正将所学知识应用到实际生活中。

在实验中应用了书本所学的知识,而且将断点知识应用到实践中更加深了对知识的理解。

在本次实验中收获很多。

而且你多做几遍,就对软件和知识更加熟练和透彻,正所谓一份耕耘一份收获。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1