DSP课设论文.docx
- 文档编号:12373932
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:20
- 大小:143.62KB
DSP课设论文.docx
《DSP课设论文.docx》由会员分享,可在线阅读,更多相关《DSP课设论文.docx(20页珍藏版)》请在冰点文库上搜索。
DSP课设论文
课程设计说明书
(2011/2012学年第一学期)
课程名称:
DSP控制器及其应用
题目:
分频发生器
专业班级:
通信工程
学生姓名:
学号:
指导教师:
设计周数:
2周
设计成绩:
2012年1月5日
一、课程设计目的
通过本次的课程设计使学生增进对DSP的认识,加深对单DSP理论方面的理解,使学生掌握DSP在实际生活中的应用。
使学生了解和掌握用DSP实现分频发生器的设计方法、过程,为以后更多的设计打下良好基础,并且通过这次设计使我们对DSP应用的基本操作方法有了一定的了解,对于以后的发展打下了基础,所以本次课程设计对于学生的动手能力的提高有着很大的帮助并达到以下目的:
(1)使学生增进对DSPF2812电路的感性认识,加深对理论方面的理解。
(2)使学生掌握软硬件的有关知识等。
(3)让同学们认识分频器器的工作原理和方法
(4)使学生了解和掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。
(5)通过简单课题的设计练习,可使学生了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。
二、课程设计正文
2.1系统分析
2.1.1设计任务
本次设计名为分频发生器,也可以称为键盘输入分频输出装置,要求用9个按键,组成3行3列键盘,采用扫描按键的方法控制蜂鸣器发出对应的声音从而实现按键控制蜂鸣器发出不同频率的声音。
2.1.2性能指标
硬件部分:
1、按照系统设计要求绘制(3行3列按键及分明器)电路图。
2、按照电路图统筹安排各元器件在电路板上的分布,并焊接电路板。
3、了解各引脚功能,将电路板与TMS320F2812相关引脚相连接。
软件部分:
1、搞清楚各个引脚功能,调入引脚头文件。
2、了解了各引脚控制的行列后,编写键盘扫描程序。
3、编写延时程序,实现按键去抖。
最终实现键盘输入分频输出,并由蜂鸣器发出不同频率的响声。
2.2系统整体设计
2.2.1硬件设计组成框图
图2-1硬件组成框图
2.2.2总体电路图
总体电路图如图2-2所示:
图2-2总体电路图
其中PWM1-PW3是输入引脚,PWM4-PWM5是输出引脚,PWM6是蜂鸣器输出引脚,XTAL1和XTAL2为晶振输入引脚,VCC接电源(+5V),RESET复位引脚,GND接地,MP/MC接入存储器。
如果是低电平接片内存储器,高电平接片外存储器。
2.2.3TMS320F2812芯片的简介
本设计需要DSP实验箱,.DSP芯片是一种具有特殊结构的嵌入式微处理器,现在芯片一般都具有哈佛结构的并行总线体系,流水线操作功能,快速的中断处理和硬件I/O支持,低开销循环及跳转的硬件支持,单周期硬件地址产生器,单周期硬件乘法器以及一套适合数字信号处理的指令集。
TMS320F2812作为使用的DSP芯片。
它包含33个电源引脚(为使器件正常运行,所有电源引脚必须正确连接且不能悬空),时钟源模块,DSP有六种信号可以使DSP控制器复位。
所以在设计的初期,我把它分成了四个模块。
它们分别是:
电平转换部分、晶振和复位部分、键盘部分和液晶显示。
其中复位采用电源复位的方式,由引脚PORESET引起。
为了可靠复位,其中高电平的有效时间至少6个CPU时钟周期。
2.2.4关于TMS320F2812参数
TMS320F2812的具体参数如下:
1、主处理芯片:
TMS320F2812,运行速度为150M。
2、工作速度可达150MIPS。
3、片上的RAM18*16Bit。
4、片上扩展RAM存储空间64K×16Bit。
5、自带的16路12bitA/D,最大采样速率12.5msps。
6、4路的DAC7617转换,100K/S,12Bit。
7、两路UART串行接口,符合RS232标准。
8、16路PWM输出。
9、1路CAN接口通讯。
10、片上128*16bitFLASH.自带128位加密位。
11、设计有用户可以自定义的开关和测试指示灯。
12、4组标准扩展连接器,为用户二次开发提供条件。
13、具有IEEE1149.1相兼容的逻辑扫描电路该电路仅用于测试和仿真。
14、4层板设计工艺,工作稳定可靠。
15、具有自启动功能设计,可以实现脱机工作。
16、可以选配多种应用接口板,包括语音板,网络板等。
2.2.5管脚的定义和说明
P1接口主要是扩展评估板上空闲的DSP外设引脚,以便于定制用户的硬件环境。
注意:
由于这组引脚是直接来自于F2812DSP芯片,因此,这些引脚为TTL3.3V标准,其输出最高电压为3.3V,如果要接入5V器件,外接时时要注意电平转换。
(在扩展板上使用3.3V-5V兼容器件与扩展接口连接)。
表2-1管脚的定义及管脚的说明
管脚号
管脚名
说明
1
+5v电源
有POWER提供+5V电源
2
+5v电源
有POWER提供+5V电源
3
PWM1
PWM1输出引脚
4
PWM2
PWM2输出引脚
5
PWM3
PWM3输出引脚
6
PWM4
PWM4输出引脚
7
PWM5
PWM5输出引脚
8
PWM6
PWM6输出引脚
9
PWM7
PWM7输出引脚
10
PWM8
PWM8输出引脚
11
PWM9
PWM9输出引脚
12
T1PWM
T1输出引脚
13
T2PWM
T2输出引脚
14
T3PWM
T3输出引脚
15
T4PWM
T4输出引脚
16
T1CTRP
定时器1比较输出
17
GND
地线
18
GND
地线
19
T2CTRP
定时器2比较输出
20T
T3CTRP
定时器3比较输出
21
T4CTRP
定时器4比较输出
22
C1CTRIP
比较器1比较输出
23
C2CTRP
比较器2比较输出
24
C3CTRP
比较器3比较输出
25
TDIRA
定时器计数方向选择信号A
26
TCKINA
定时器时钟输入A
27
SCITXB
异步串口TX端B
28
SCIRXB
异步串口RX端B
29
SPSIMA
SPI从收主发端
30
SPSOMA
SPI主发从收端
31
SPICLKA
SPI时钟
32
SPISTEA
SPISlave设备发送始能
33
GND
地线
34
GND
地线
2.3各单元电路设计
2.3.13*3键盘输入电路设计
键盘工作原理:
从图中可以看出,当一个键被按下时,按键对应的行线和列线的状态均为低电平,其他键对应的均为高电平,具体来讲,把行线相连的引脚均设为输入方式,把列线相连的引脚均设为输出方式。
程序首先把所有列线上输出低电平,然后调用扫描程序逐列读取列线上的输入,如果没有键按下,行线将一直保持全1的状态,否则相应的行线上将出现低电平并被程序所获知。
然后检测按键所在的列,延时一段时间后,程序逐渐发出扫描码,即扫描的列为0,其他行为1。
如果没有任何一条输入的行线为低电平,则说明扫描的列线上没有按键被按下接着扫描下一列。
如果在某一列上发0可以在行线上收到不全为1的输入,即表明该行是按键所在的行,从而可以确定按键所在的位置。
3*3键盘电路如图2-3所示
图2-33*3键盘电路图
2.3.2时钟源电路设计
时钟源可以由两种方式产生:
一种是利用内部振荡器与外部无源晶振产生;另一种是利用外部有源晶振产生。
本系统选择的是前者。
而且上在实验箱内部。
时钟振荡电路如图2-4所示,时钟电路主要使用的是DSP的内部振荡器,外接6MHZ的晶振产生时钟。
图2-4最小系统框图
2.3.3复位电路设计
复位电路(如图2-5)由电容,电阻和按钮开关组成,可实现上电复位和手动复位功能。
当加载电源时,电源电压通过RC串联电路对电容C进行充电,充电时间常数为t=RC。
当充电时间超过5t时,电容C3上的电压接近电源电压,复位完成。
对于本系统来说,要求复位时间超过6个系统时钟周期。
所以,C3和R2的值,应该根据所用芯片的工作频率来定,否则,系统无法正常工作。
另外,按钮S7用于手动复位,R2和S7串联作为电容C3的放电回路,当S7按下,C3的放电回路接通,芯片的复位端接地,芯片处于复位状态。
放开S7,C3的放电电路断开。
由于C3上的电压已经放完,所以,C3通过电源再次充电,完成复位动作。
放电的时间远远小于充电时间,否则,电路无法正常工作。
图2-5复位电路
2.3.4电源转换电路设计
电源电路(如图2-6)是各种电子设备的核心电路,电子设备的小型化和低成本化使电源电路向轻薄和高效率方向发展,因此在设计电路时选择一款合适的电源电路芯片是首要任务。
本课程设计要求电压控制在3.3V左右,因此在设计中加入了电压转换电路,将5V电压转换为3.3V电压。
在实际操作中采用了使用电源箱调节电压达到3.3V左右。
图2-6电源转换电路图
2.3.5蜂鸣器的设计
蜂鸣器设计(如图2-7所示)的总体思想:
由DSP的固定的头文件初始化各个端口的功能,置相应的端口为I/O功能,并设置其为输入或输出功能,依次扫描键盘,如果有电平由高电平向低电平调变则由相应的延时参数延时产生不同的频率,输出到蜂鸣器上,从而发出不同的响声。
蜂鸣器由DSP通用I/O管脚输出控制,由管脚S13控制蜂鸣器的输出频率,DSP的I/O管脚直接驱动外部蜂鸣器工作。
在实际的连接当中,9个按钮的引线依次接P1口的管脚3——管脚11。
蜂鸣器的引线接P4口的管脚25。
正5V电源接P1口的管脚1。
地线接P1口的管脚17。
程序直接运行即可。
图2-7蜂鸣器电路图
2.4元器件选择
元气件的选择主要是限流电阻的选择,根据按键工作电流(0~1mA)以及DSP工作电压(3.3V),因此可以选择3.3K以上的电阻作为上拉电阻,本系统中我们选择4.7K。
同时由于外接电源是5V的,而芯片工作电压是3.3,因此也需要一个电阻用于压降,在此我们也选择4.7K电阻。
元器件清单如表2所示。
表2-2电路元件配置表
元件名称
参数
个数
电阻
4.7K
5
蜂鸣器
给定
1
发光二极管
1
TMS320F2812芯片
给定
1
DSP系统试验箱
给定
1
按钮
给定
9
排针
——
8
除表中所列元器件外,还需导线若干以及供电源一个。
2.5运行描述
在运行时,首先应先在计算机上安装上CCS软件,然后把程序加载到Example中进行调试,如果调试出现错误,要进行修改。
若程序正常通过,则可将电路板与计算机相连,然后安装电路板的驱动,驱动安好后,将焊接好的电路与电路板相连,注意针引脚的相连,在
本设计中用的是电路板的PWM1、PWM2、PWM3、PWM4、PWM5、PWM6针口,注意不要连错。
同时还要注意DSP用的是3.3V的电压,注意电压的调节。
一切硬件连接好后,即可将软件下载到DSP芯片中,运行,查看结果。
将按键按下后都会发出不同的声音,但由于电路存在一定的干扰,有的按键按下后时响时不响。
键盘分频发声装置基本制作成功。
2.6软件设计
2.6.1程序流程图
根据硬件设计思想和硬件图的总体设计,画出软件实现流程图
程序流程图是人们对解决问题的方法、思路或算法的一种描述。
它采用简单规范的符号,画法简单,并且结构清晰,逻辑性强。
经过对硬件部分的分析,理论上技术的实现,基于分块设计的思想可以得出基本程序实现思路。
初始化程序以后,将管脚定义为I/O口方式,并且定义管脚的输出输入端,接入高电平。
若给入高电平,设置行列值。
例如。
将行设置为输入端,列设置为输出端。
首先先判断是否有键按下,无键按下时(加入一段延时程序),有键按下时,给行值,对列值进行判断,如果循环成立,则能确定是哪个按键按下。
图2-8程序流程图
2.7程序代码
程序如下:
#include"DSP281x_Device.h"//DSP281xHeaderfileIncludeFile
#include"DSP281x_Examples.h"//DSP281xExamplesIncludeFile
interruptvoidinter(void);//中断申明无返回值
voidDelay(unsignedintndelay);//子程序声明
Uint16jishu=0,new1,a1,a2;
#defineNumber8
unsignedintmusic1[Number][2]=
{
{162,1480},{144,1480},{129,1480},{121,1480},{108,1480},{97,1480},{86,1480},{81,1480}
};
voidmain(void)
{
InitSysCtrl();//初始化系统管脚语句
DINT;//关中断
InitPieCtrl();//初始化PIE寄存器
IER=0x0000;//寄存器复位中断使能寄存器包含所有可屏蔽中断使能位
IFR=0x0000;//寄存器复位中断标志寄存器用于识别和清楚未屏蔽中断位
InitPieVectTable();//初始化PIE向量表
EALLOW;
PieVectTable.TINT0=&inter;//指定中断服务子程序地址
EDIS;
EALLOW;
GpioMuxRegs.GPAMUX.all=0x0000;//工作方式设置为I/O
GpioMuxRegs.GPADIR.all=0x0007;//pwm1-pwm3为输出,
GpioMuxRegs.GPBMUX.all=0x0000;
GpioMuxRegs.GPBDIR.all=0x0001;
EDIS;
CpuTimer0Regs.PRD.all=new1;
CpuTimer0Regs.TPR.all=0;//TPR-预定标计数器,16位,PIC(8-15位),TDDR(0-7位)取值(0-15),可位操作
CpuTimer0Regs.TIM.all=0;//TIM-计数寄存器
CpuTimer0Regs.TPRH.all=0;//TPRH-高16位,一般不用,付0
CpuTimer0Regs.TCR.bit.TSS=1;//TCR-控制寄存器,位操作tss位停止寄存器
CpuTimer0Regs.TCR.bit.SOFT=1;//soft遇到软件中断直接运行
CpuTimer0Regs.TCR.bit.FREE=1;
CpuTimer0Regs.TCR.bit.TRB=1;//重装载位PRD值
CpuTimer0Regs.TCR.bit.TIE=1;//一直请求中断
CpuTimer0.InterruptCount=0;
StartCpuTimer0();//0-计数器重新工作,1-停止
IER|=M_INT1;//0X0001中断1
PieCtrlRegs.PIEIER1.bit.INTx7=1;//向量控制寄存器,第一组里的第七个,1-开中断
EINT;//防止可屏蔽中断影响
ERTM;//防止事件相互影响
while
(1)
{
GpioDataRegs.GPADAT.bit.GPIOA0=0;
GpioDataRegs.GPADAT.bit.GPIOA1=0;
GpioDataRegs.GPADAT.bit.GPIOA2=0;
if((GpioDataRegs.GPADAT.bit.GPIOA3==1)&&(GpioDataRegs.GPADAT.bit.GPIOA4==1)&&(GpioDataRegs.GPADAT.bit.GPIOA5==1))
{
new1=0;
//Delay(296);
a1=0;a2=0;
}
GpioDataRegs.GPADAT.bit.GPIOA0=0;
GpioDataRegs.GPADAT.bit.GPIOA1=1;
GpioDataRegs.GPADAT.bit.GPIOA2=1;
if((GpioDataRegs.GPADAT.bit.GPIOA3==0)&&(GpioDataRegs.GPADAT.bit.GPIOA4==1)&&(GpioDataRegs.GPADAT.bit.GPIOA5==1))
{
new1=56700;//new1=music1[0][0]*350;
//Delay(music1[0][1]*201);
a1=0;a2=1;
}
if((GpioDataRegs.GPADAT.bit.GPIOA3==1)&&(GpioDataRegs.GPADAT.bit.GPIOA4==0)&&(GpioDataRegs.GPADAT.bit.GPIOA5==1))
{
new1=music1[1][0]*350;
//Delay(music1[1][1]*200);
a1=0;a2=1;
}
if((GpioDataRegs.GPADAT.bit.GPIOA3==1)&&(GpioDataRegs.GPADAT.bit.GPIOA4==1)&&(GpioDataRegs.GPADAT.bit.GPIOA5==0))
{
new1=music1[2][0]*350;
//Delay(music1[2][1]*200);
a1=0;a2=1;
}
GpioDataRegs.GPADAT.bit.GPIOA0=1;
GpioDataRegs.GPADAT.bit.GPIOA1=0;
GpioDataRegs.GPADAT.bit.GPIOA2=1;
if((GpioDataRegs.GPADAT.bit.GPIOA3==0)&&(GpioDataRegs.GPADAT.bit.GPIOA4==1)&&(GpioDataRegs.GPADAT.bit.GPIOA5==1))
{
new1=music1[3][0]*350;
//Delay(music1[3][1]*200);
a1=0;a2=1;
}
if((GpioDataRegs.GPADAT.bit.GPIOA3==1)&&(GpioDataRegs.GPADAT.bit.GPIOA4==0)&&(GpioDataRegs.GPADAT.bit.GPIOA5==1))
{
new1=music1[4][0]*350;
//Delay(music1[4][1]*200);
a1=0;a2=1;
}
if((GpioDataRegs.GPADAT.bit.GPIOA3==1)&&(GpioDataRegs.GPADAT.bit.GPIOA4==1)&&(GpioDataRegs.GPADAT.bit.GPIOA5==0))
{
new1=music1[5][0]*350;
//Delay(music1[5][1]*200);
a1=0;a2=1;
}
GpioDataRegs.GPADAT.bit.GPIOA0=1;
GpioDataRegs.GPADAT.bit.GPIOA1=1;
GpioDataRegs.GPADAT.bit.GPIOA2=0;
if((GpioDataRegs.GPADAT.bit.GPIOA3==0)&&(GpioDataRegs.GPADAT.bit.GPIOA4==1)&&(GpioDataRegs.GPADAT.bit.GPIOA5==1))
{
new1=music1[6][0]*350;
//Delay(music1[6][1]*200);
a1=0;a2=1;
}
if((GpioDataRegs.GPADAT.bit.GPIOA3==1)&&(GpioDataRegs.GPADAT.bit.GPIOA4==0)&&(GpioDataRegs.GPADAT.bit.GPIOA5==1))
{
new1=music1[7][0]*350;
//Delay(music1[7][1]*200);
a1=0;a2=1;
}
if((GpioDataRegs.GPADAT.bit.GPIOA3==1)&&(GpioDataRegs.GPADAT.bit.GPIOA4==1)&&(GpioDataRegs.GPADAT.bit.GPIOA5==0))
{
new1=music1[7][0]*350;
//Delay(music1[7][1]*200);
a1=0;a2=1;
}
CpuTimer0Regs.PRD.all=new1;
}
}
interruptvoidinter(void)
{
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//中断应答寄存器重装值
CpuTimer0Regs.TCR.bit.TIF=1;//定时器中断标志位
CpuTimer0Regs.TCR.bit.TRB=1;//重装载
GpioDataRegs.GPBSET.bit.GPIOB0=1;
if(jishu==0)
{
GpioDataRegs.GPBDAT.bit.GPIOB0=a1;//将与蜂鸣器相连的引脚置低,蜂鸣器发声
jishu=1;
}
else
{
GpioDataRegs.GPBDAT.bit.GPIOB0=a2;//将与蜂鸣器相连的引脚置高,蜂鸣器停止发声
jishu=0;
}
}
voidDelay(unsignedintndelay)
{
inti,k=0;
for(i=0;i k++; } 三、课程设计总结 如果说任何机会都是需要去创造出来的话,那么那个创造者,其实就是你自己。 时间过得真快,转眼间已经有两个星期了,现在回想起来,往事还历历在目。 但是不可否认的却是这些经历将会是我人生当中不可多得的财富和经验的累积。 这两周的课程设计实习结束了,通过两周以来同学和老师的共同努力,我们终于完成了设计要求。 但大家脸上的表情都是欣慰和欢喜的,到底工夫不负有心人。 回想过去两周,这里面的辛苦只有做是课程设计的人才明白,才能体会。 通过这种综合性训练,要学生达到以下的目的和要求: 1.结合课程中所学的理论知识,独立设计方案。 达到学有所用的目的。 2.学会查阅相关手册与资料,通过查阅手册和文献资料,并掌握合理选用的原则,培养独立分析与解决问题的能力。 这次设计我们学到了很多东西,虽然作出来的东西很基础,但是我们加深了对知识的理解和掌握。 作为一名大四的学生,我觉得能做类似的课程设计是十分有意义的。 同时这是一次团队合作开发过程,一次难得的经历。 通过此次设计试验也着重能够学到许多东西。 在课程设计中发现自己本身还是存在着很大的欠缺,这样才能不断地提升自身的素质、素养,不断地改进自己的知识结构水平,让自己投入到理论学习中,好好积累基础理论知识,并在实践中将理论尽可能的实现,将理论与实践结合在一起。 首先我要感谢老师对我们的指导
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 论文