资源描述
深圳大学考试答题纸
(以论文、报告等形式考核专用)
二○一四~二○一五年度第 1 学期
课程编号
课程名称
单片机/ARM /DSP技术实践
主讲教师
评分
学号
姓名
专业年级
教师评语:
题目:
基于DSP2812课程设计
一、实验规定
由外接信号发生器产生一正弦信号(电压范畴:0~3V),通过DSPAD功能对此正弦信号进行采集,通过DSPSCI功能与PC机之间进行通信,把所采集AD信号发送至PC机端,在超级终端上进行实时显示。
二、实验原理
2.1 ADC概述
ADC,即模/数转换器,将模仿量转换成数字量,提供应控制器使用。TMS320F2812片上有一种12位辨别率、具备流水线构造模/数转换器,其机构框图如图1所示。其前端为2个8选1多路切换器和2路同步采样/保持器,构成16个模仿输入通道,模仿通道切换由硬件自动控制,并将各模仿通道转换成果顺序存入16个成果寄存器中。
图1 ADC机构框图
2.2 ADC模块特点
(1)带2个8选1多路切换器和双采样/保持器12位ADC,共有16个模仿输入通道;
(2)模仿量输入范畴:0.0V-3.0V;
(3)转换率:在25MHZADC时钟下为80ns;
(4)转换成果存储在16个成果存储器中;
(5)转换成果=4095*(输入模仿信号-ADCLO)/3;
(6)各种A/D触发方式:软件启动、EVA和EVB;
(7)灵活中断方式:可以在每次转换结束或每隔一次转换结束触发中断;
3.ADC转换环节
(1)初始化DSP系统;
(2)设立PIE中断矢量表;
(3)初始化ADC模块;
(4)将ADC中断入口地址装入PIE中断矢量表中,开中断;
(5)软件启动ADC转换;
(6)等待ADC中断;
(7)在ADC中断中读取ADC转换成果,软件启动下一次ADC中断。
三、实验实现
3.1硬件方案设计
本实验以TMS320F2812为核心控制部件,运用软件编程,通过ADC模块对实验箱上信号发生器发出正弦信号进行采集,由于实验箱上信号发生器只能调节到2V,因此本次实验只针对2V正弦信号,再通过串口线与PC机连接,将采集转换数字信号传送到PC机端串口助手,并还原成采集时电压值。硬件框架图如图2所示。本次ADC采用SEED-DEC2812AD接口ADCINA6通道。
图2 硬件框架图
3.2软件设计
程序主体沿用AD采样例程,用定期器产生中断,在中断程序中对电压信号进行AD转换并将转换值通过串口发送到电脑,在电脑上用串口助手对采样值进行实时显示。
重要工作:是在AD程序基本上初始化串口、修改中断程序及更改采样率、波特率参数 。程序要解决问题:
1、 采样值转换
2、 采样率及波特率设立
串口初始化程序可以直接使用SCI例程中初始化程序,下面只简介中断程序设计及采样率、波特率参数设立
中断程序设计
在中断程序中对电压信号进行采集,然后将采集到12位有效值转换成实际电压值,取电压值三位有效数字以字符形式用串口发送,这里要注意是AD采集12位有效数字在寄存器中是靠左放置,需要右移四位后才干对其转换。
图3 中断程序图
SCI波特率设立
SCI波特率大小决定串口能每秒传送数据多少,若太小则会限制采样率,本实验选取串口助手最大波特率115200b/s,则:
1、每秒理论上能传送字节数:115200/10=11520B
2、波特值BRR由公式
可得BRR=40,在串口初始化程序中设立SciaRegs.SCILBAUD = 0x28,可以把波特率设立成115200 b/s。
图4 串口初始化程序图
采样率设立
采样率受波特率和信号频率两方面控制
1、115200b/s波特率下最大采样率为
2、信号频率为100HZ,依照采样定理采样率要不不大于
综合考虑设采样率为1000HZ在单位周期内采样十次,采样率可以通过在主程序中ConfigCpuTimer(&CpuTimer2,150,1000) 设立,通过设立周期值(1000us)可以拟定采样率1000。
图4 某些主程序程序图
3.3软件调试
软件调试是通过对程序编译、连接、执行来发现程序中存在语法错误与逻辑错误并加以排除纠正过程。本设计软件调试使用CCS3.3测试软件进行调试,即可看到对的测试成果,从而最后实现运用ADC采集正弦信号。
四、实验成果分析
1.实验箱信号发生器上设立如图5所示。
图5 信号发生器设立
2.PC端上串口助手显示接受数据,如图6所示。
图6 串口调试助手界面
3.采用matlab对上图数据进行绘图,如图7所示,横坐标为时间/s,y轴为幅值,图中可以较直观显示出经AD采集到正弦信号发送到PC机上也是正弦信号数据。
图7 MATLAB绘制图
五、实验结论
通过本次实验咱们掌握DSP芯片功能及其在实际中应用办法,对于DSP基本知识理解。学习到了很过关于DSPAD模块和SCI知识,并且更加巩固和掌握了课堂上所学课本知识,是自己对DSP技术有了更进一步结识和理解。本实验是由实验箱信号发生器产生一正弦信号(电压范畴:0~2V),通过DSPAD功能对此正弦信号进行采集,通过DSPSCI功能与PC机之间进行通信,把所采集AD信号发送至PC机端,在超级终端上进行实时显示。本实验最后达到了实验规定,实现了电压值实时显示。
附录
实验代码如下所示:
#include <math.h>
#include "DSP28_Device.h"
#include "comm.h"
///////////////////////////////////////////////////////////////////
#define SAMPLERATE 1
unsignedintuart_sendtype ;
unsignedintSampleRate;
unsignedintSampleLong=1024;
///////////////////
unsignedinti,j;
unsignedintAd_data[10]={0};
char send[5]={0};
float results=0;
float temp=0;
//////////////////
unsignedintconvcount = 0;
volatile unsigned intadconvover =0;
// Prototype statements for functions found within this file.
interrupt void ISRTimer2(void);
interrupt void ad(void);
void main(void)
{
/*初始化系统*/
InitSysCtrl();
#if SAMPLERATE==1
SampleRate =ADSAMPL8K;
#endif
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE中断*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
//初始化cputimer
InitCpuTimers();
InitSci();
/*设立中断服务程序入口地址*/
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.TINT2 = &ISRTimer2;
PieVectTable.ADCINT = &ad;
EDIS; // This is needed to disable write to EALLOW protected registers
/*开中断*/
IER |= M_INT1;//ADC中断
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
/*启动AD采样*/
/*AD采样率*/
adconvover=0;
switch(SampleRate){
case ADSAMPL8K: //采样率为1k
DINT;
/*设立CPU*/
ConfigCpuTimer(&CpuTimer2,150,1000);
StartCpuTimer2();
/*开中断*/
IER |= M_INT14;
EINT;
InitAdc();
SampleRate = 0;
break;
default:
break;
}
for(;;)
{
}
}
interrupt void ad(void)
{
IFR=0x0000;
PieCtrl.PIEACK.all=0xffff;
Ad_data[0] = AdcRegs.RESULT0;
temp=Ad_data[0]>>4;
results=(temp/4095.0)*3.0;
results=results*100;
send[3]=(int)results%10+0x30;
results=results/10;
send[2]=(int)results%10+0x30;
send[1]='.';
results=results/10;
send[0]=(int)results+0x30;
send[4]='\n';
for(i=0;i<5;i++)
{
SciaRegs.SCITXBUF =send[i];
while(!SciaTx_Ready());
}
}
interrupt void ISRTimer2(void)
{
AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
}
串口初始化子程序
void InitSci(void)
{
// Initialize SCI-A:
*UART_MODE = 0x44;
EALLOW;
GpioMuxRegs.GPFMUX.all = 0x0030;
EDIS;
/* loopback 8 bit data */
SciaRegs.SCICCR.all = 0x07;
SciaRegs.SCICTL1.all = 0x03;
SciaRegs.SCICTL2.all = 0x03;
SciaRegs.SCIHBAUD = 0x00;
SciaRegs.SCILBAUD = 0x28;//波特率为115200b/s
SciaRegs.SCICTL1.all = 0x23;
PieCtrl.PIEIER9.bit.INTx1 = 1;
// PieCtrl.PIEIER9.bit.INTx2 = 1;
//tbd...
// Initialize SCI-B:
//tbd...
}
展开阅读全文