DSP实验报告数据测量和条件传输系统.docx

上传人:b****4 文档编号:4031822 上传时间:2022-11-27 格式:DOCX 页数:13 大小:252.10KB
下载 相关 举报
DSP实验报告数据测量和条件传输系统.docx_第1页
第1页 / 共13页
DSP实验报告数据测量和条件传输系统.docx_第2页
第2页 / 共13页
DSP实验报告数据测量和条件传输系统.docx_第3页
第3页 / 共13页
DSP实验报告数据测量和条件传输系统.docx_第4页
第4页 / 共13页
DSP实验报告数据测量和条件传输系统.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

DSP实验报告数据测量和条件传输系统.docx

《DSP实验报告数据测量和条件传输系统.docx》由会员分享,可在线阅读,更多相关《DSP实验报告数据测量和条件传输系统.docx(13页珍藏版)》请在冰豆网上搜索。

DSP实验报告数据测量和条件传输系统.docx

DSP实验报告数据测量和条件传输系统

 

研究生实验报告

 

课程名称:

DSP技术应用

综合设计名称:

数据测量和条件传输系统

 

2009年12月28日

一、实验内容和目的

1、实验内容

本实验主要模拟某种电子信息处理设备的功能,实现下列要求:

要求1:

对给定的一路波形信号,计算该信号的频率大小。

要求2:

信号频率低于50HZ时,根据信号控制LED灯每隔10个信号周期点亮或熄灭一次。

要求3:

信号频率高于50HZ时(不超过5KHZ),LED灯不再点亮,并且将信号频率利用SCIB接口传输给上位机,传输格式为:

(例如:

信号测量频率为124HZ的时候,传输格式为<124HZ>)。

2、实验目的

(1)掌握TMS320F28335扩展数字I/O口的方法及应用;

(2)掌握A/D转换模块的性能、数据采集及编程方法;

(3)了解F28335的SCI模块的结构及特点,掌握串行口工作方式及编程方法,了解PC机串行通讯的工作过程;

(4)掌握中断处理程序的编程方法;

二、硬件电路

硬件电路原理图如图1所示。

图1实验硬件电路原理图

由图1可见,试验系统由以下三个部分组成:

(1)PC机

(2)SEED-XDS510系列仿真器

(3)SEED-DTK28335综合实验系统

PC机通过并口或USB口与SEED-XDS510系列仿真器相连;SEED-XDS510系列仿真器通过JTAG口与SEED-DTK综合实验系统相连。

本实验主要用到以下三个模块:

(1)数字I/O模块

DSP系统中一般只有少量的数字I/O资源,而一些控制系统中经常需要大量数字量的输入与输出。

因而,在外部扩展I/O资源非常重要。

扩展I/O资源时,可以采用74LS273、74LS373之类的锁存器,或者采用CPLD在其内部做锁存逻辑,SEED-DEC28335实验箱中采用的是后者。

实验箱上I/O控制部分映射到F28335的Zone7,其起始地址为0x(字地址)。

交通灯控制口的偏移地址为0x0000,地址为0x。

(2)SCI串行通讯模块

在SEED-DEC28335模板直接采用F28335片上的2通道SCI作为异步收发器UART。

SEED-DEC28335采用MAX3160多协议收发器,使得异步串口接口电平可配置为RS232/RS422/RS485多种接口电平标准。

(3)A/D转换模块

F28335的A/D转换模块是带内置采样和保持(S/H)的12位模数转换模块,共有16个模拟输入通道(ADCIN0-ADCIN15)。

SEED-DEC28335板卡上AD接口的ADCINA0、ADCINA2、ADCINA4及ADCINA6共四个通道与波形发生器通道0的输出相连。

实验中选用ADCINA6进行数据采集,通过键盘设置波形发生器通道0的波形及其参数。

三、实验设计说明

1、主程序流程图:

图2-1主程序流程图

 

2、中断子程序流程图:

图2-2中断子程序流程图

3、程序设计思路:

实验程序主要包括两个部分:

主程序,AD中断子程序。

主程序主要有以下功能:

系统的初始化,SCIB通讯模块初始化,I/O口设置,A/D模块初始化及中断设置。

AD中断子程序中,首先对给定信号进行采样,根据采样数据计算信号频率。

如果计算得到的信号频率小于50HZ,则每隔10个信号周期点亮或熄灭LED灯一次;信号频率大于50HZ时,通过SCIB模块将信号频率以的格式传输给上位机。

本次实验中,信号频率的计算方法如图3所示:

图3信号频率计算方法原理图

为了防止采样无效计数,故设置了两个比较值:

H&L。

每当采样值大于比较值H时,就将flag置1,继续比较。

在flag=1的情况下,当采样值一旦小于比较值L时,num++,观察num值

(1)如果num<=1,采样数cj开始计数,并将flag置0;

(2)如果num>1(num=2),cj停止采样计数。

这样得到的cj的值便是一个周期内所得的采样点数,已知采集一个数据所需时间为AD中断周期Ts,那么显然,信号周期T=cj×Ts。

计算完成后,重置参数为flag=0,num=0,cj=0。

本实验中,设定H=500HZ,L=200HZ。

三、实验结果和分析

1、实验步骤及程序调试

实验主要步骤如下:

(1)关掉PC电源;

(2)将并口线一端连接到PC并行端口;

(3)将并口线另一端连接到SEED-XDS510PP仿真器上;

(4)用XDS510PP仿真器上的接头与SEED-DTK28335综合实验系统上JTAG仿真端口连接。

程序调试方法:

1)设置断点

2)复位目标板

有三种复位目标板的方法:

a.ResetDSP:

暂停运行中的程序并初始化所有寄存器的内容。

执行该命令后,需重新装载.out文件。

b.Restart:

将PC值恢复至当前程序的入口地址。

c.Gomain:

将程序运行至主程序的入口处暂停。

3)执行

CCS提供了四种执行程序的方法(Debug菜单中)

a.执行(Run):

运行程序直到遇到断点为止。

b.暂停执行(Halt):

停止程序运行。

c.动画执行(Animate):

反复运行程序,每次遇到断点停顿一段时间。

d.自由执行(RunFree):

忽略所有断点运行程序。

4)单步执行

5)查看变量:

右击—WatchWindow命令

6)Graph的设置及图形显示:

选择View—Graph—Time/Frequency

2、运行结果

1)给定信号频率低于50HZ时,LED灯循环点亮与熄灭(间隔10个信号周期)。

图4-1发生波形图(f=30HZ)图4-2LED点亮图4-3LED熄灭图

2)给定信号频率高于50HZ时,LED灯熄灭,并且通过PC机显示信号频率,如图5所示为信号频率为600HZ时,PC机显示结果:

图5f=600HZ时的频率显示

3、实验中遇到的问题

在实验过程中,出现了不少的问题,首先是AD中断经常需要经过开关实验板来重置,这个问题应该是硬件接触不良的原因引起的;其次,在实验初期,当频率f<50HZ时,经常会出现波形变成噪声的情况,导致不能进行信号周期的计算,如图6所示为f=30HZ的标准正弦波的波形。

但是如果f比较大时,不会出现这种情况,将f从大逐渐减小至30HZ,则波形又能正常显示,这个问题我们暂时还未能讨论出可靠的干扰原因。

图6f=30HZ时的error噪声波形

四、源程序

//头文件

#include"DSP2833x_Device.h"

//DSP2833xHeaderfileIncludeFile

#include"DSP2833x_Examples.h"

//DSP2833xExamplesIncludeFile

#include"comm.h"

interruptvoidadc_isr(void);

voidscib_fifo_init();

//地址定义

volatileunsignedint*p_ceselect=(volatileunsignedint*)0x;

volatileunsignedint*p_trafficaddr=(volatileunsignedint*)0x;

volatileunsignedint*p_ioenable=(volatileunsignedint*)0x;

//设置A/D采样时钟频率为12.5MHz,宽度为16

#if(CPU_FRQ_150MHZ)

//Default-150MHzSYSCLKOUT

#defineADC_MODCLK0x3

//HSPCLK=SYSCLKOUT/2*ADC_MODCLK2

=150/(2*3)=25.0MHz

#endif

#if(CPU_FRQ_100MHZ)

#defineADC_MODCLK0x2

//HSPCLK=SYSCLKOUT/2*ADC_MODCLK2=100/(2*2)=25.0MHz

#endif

#defineADC_CKPS0x1

//ADCmoduleclock=HSPCLK/2*ADC_CKPS

=25.0MHz/(1*2)

=12.5MHz

#defineADC_SHCLK0xf

//S/HwidthinADCmoduleperiods

=16ADCclocks

//定义全局变量

Uint16LoopCount;

Uint16ConversionCount;

Uint16Voltage1[1024];//存储波形采样数据

Uint16num=0,cj=0,flag=0;//用于频率计算的参数

float32T,Ts=7.68e-6;//信号、A/D采样周期T、Ts

Uint32f;//信号频率f=1/T

Uint16Tjc=0;//信号采样周期计数

unsignedintiostatus=0;

main()

{

InitSysCtrl();///系统初始化

//GPIO口初始化

InitGpio();//Skippedforthisexample

InitSciGpio();//设置SCI模块所用到的GPIO口

DINT;

InitXintf();

InitPieCtrl();//初始化中断

IER=0x0000;//清除中断标志

IFR=0x0000;//清除中断标志

*p_ceselect=0x3;//打开ce3空间

DELAY_US(100);//延迟函数

*p_ioenable=0xfff;//IO空间始能

DELAY_US(100);

InitPieVectTable();//I初始化中断向量表

//设置A/D中断入口

EALLOW;

PieVectTable.ADCINT=&adc_isr;

EDIS;

//初始化SCIB模块和A/D模块

scib_fifo_init();//InitSCI-B

InitAdc();//Forthisexample,inittheADC

//使能AD中断

PieCtrlRegs.PIEIER1.bit.INTx6=1;

IER|=M_INT1;//EnableCPUInterrupt1

EINT;//EnableGlobalinterruptINTM

ERTM;//EnableGlobalrealtimeinterruptDBGM

LoopCount=0;

ConversionCount=0;

//AD模块初始化

AdcRegs.ADCTRL1.bit.ACQ_PS=ADC_SHCLK;//采样时间预定标

AdcRegs.ADCTRL3.bit.ADCCLKPS=ADC_CKPS;//AD时钟预定标

AdcRegs.ADCTRL1.bit.SEQ_CASC=1;//级联排序

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=0x1;//中断使能

AdcRegs.ADCTRL2.bit.RST_SEQ1=0x1;

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x6;//将第6通道的转换结果存放在CONV00中

AdcRegs.ADCMAXCONV.bit.MAX_CONV1=15;//最大转换通道为16

AdcRegs.ADCTRL2.bit.SOC_SEQ1=0x1;//软件触发启动

for(;;);//循环等待AD中断

}

//AD中断函数

interruptvoidadc_isr(void)

{

Voltage1[ConversionCount]

=AdcRegs.ADCRESULT0>>4;

//将采样所得数据结果存储到Voltage1数组中

if(Voltage1[ConversionCount]>50)

flag=1;//当采样值大于50时,flag置1

if(num>=1)

cj++;//num大于1时,cj开始计数

if(flag==1)//flag为1时,如果采样值小于200,//num计数加1,同时将flag置0;

{

if(Voltage1[ConversionCount]<200)

{num++;flag=0;}

}

if(num==2)

//num=2时,计算信号频率,并重置参数

{

num=0;

T=cj*Ts;//计算信号周期

f=1/T;//计算信号频率

cj=0;//信号采样点计数复位

Tjc++;//信号采样周期计数

}

if(ConversionCount==1024)

//If1024conversions

//havebeenlogged,startover

{

ConversionCount=0;

}

elseConversionCount++;

if(Tjc%10==0)//每10个信号周期,

//执行一些操作

{

if(f<50)//信号频率小于50Hz时的一些操作

{

iostatus=*p_trafficaddr;

if(iostatus==0)

//判断上一次LED灯的状态

iostatus=0xfff;//点亮LED灯

else

iostatus=0;//熄灭LED灯

*p_trafficaddr=iostatus;

}

else//信号频率大于或等于50HZ时

{

iostatus=0;

*p_trafficaddr=iostatus;//熄灭LED灯

//将信号频率传输给上位机,传输格式为:

xxxHZ

while(ScibRegs.SCIFFTX.bit.TXFFST!

=0);

//SCI端口不空闲,循环等待

ScibRegs.SCITXBUF=f/1000+48;//信号频率千位转化为字符输出

while(ScibRegs.SCIFFTX.bit.TXFFST!

=0);

ScibRegs.SCITXBUF=f%1000/100+48;

//信号频率百位转化为字符输出

while(ScibRegs.SCIFFTX.bit.TXFFST!

=0);

ScibRegs.SCITXBUF=f%100/10+48;//信号频率十位转化为字符输出

while(ScibRegs.SCIFFTX.bit.TXFFST!

=0);

ScibRegs.SCITXBUF=f%10+48;

//取信号频率个位转化为字符输出

while(ScibRegs.SCIFFTX.bit.TXFFST!

=0);

ScibRegs.SCITXBUF='H';//输出字符'H'

while(ScibRegs.SCIFFTX.bit.TXFFST!

=0);

ScibRegs.SCITXBUF='Z';//输出字符'Z'

}

}

//复位AD模块

AdcRegs.ADCTRL2.bit.RST_SEQ1=1;

//重置排序器SEQ1

AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;

//ClearINTSEQ1bit

PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//AcknowledgeinterrupttoPIE

AdcRegs.ADCTRL2.bit.SOC_SEQ1=0x1;

return;

}

//SCIB模块初始化函数

voidscib_fifo_init()

{ScibRegs.SCICCR.all=0x0007;

//1位停止位,数据位为8个字节,//无奇偶校验位,空闲线方式

ScibRegs.SCICTL1.all=0x0003;//发送、接收使能

ScibRegs.SCICTL2.all=0x0003;

ScibRegs.SCICTL2.bit.TXINTENA=1;

ScibRegs.SCICTL2.bit.RXBKINTENA=1;

ScibRegs.SCIHBAUD=0x0001;

//设置通讯频率为9600

ScibRegs.SCILBAUD=0x00e7;

ScibRegs.SCICCR.bit.LOOPBKENA=0;

//Disableloopback

ScibRegs.SCICTL1.all=0x0023;

//RelinquishSCIfromReset

ScibRegs.SCIFFTX.bit.TXFIFOXRESET=0;

ScibRegs.SCIFFRX.bit.RXFIFORESET=0;

ScibRegs.SCIFFTX.all=0xE040;

ScibRegs.SCIFFRX.all=0x204f;

ScibRegs.SCIFFCT.all=0x0;

}

五、实验总结

通过本次实验,初步掌握了TMS320F28335扩展数字I/O口的方法及应用,A/D转换模块的性能、数据采集及编程方法,了解了F28335的SCI模块的结构及特点,串行口工作方式及编程方法,PC机串行通讯的工作过程,中断处理程序的编程方法。

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

当前位置:首页 > 农林牧渔 > 林学

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

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