基于dspf2812的交通灯设计_第1页
基于dspf2812的交通灯设计_第2页
基于dspf2812的交通灯设计_第3页
基于dspf2812的交通灯设计_第4页
基于dspf2812的交通灯设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 信息与电气工程学院电子信息工程专业cdio三级项目项目设计说明书(2011/2012学年第二学期)项目名称 : dsp应用系统 题 目 :dspicetekf2812b控制交通灯 专业班级 : 电子信息工程 学生姓名 : 学 号: 指导教师 : 设计周数 : 2周 设计成绩 : 2012年7月6日目录1、项目设计目的22、项目设计正文22.1硬件设计22.1.1总体方案设计22.1.2 数码管驱动显示电路设计32.1.3交通灯亮灭控制电路设计32.2项目软件设计62.2.1软件系统分析62.2.2 软件系统设计72.2.3 软件系统实施72.2.4软件开发环境的使用83、项目设计总结104、

2、参考文献105、附录:111、项目设计目的本学期我们主要学习了dsp硬件方面的一些基本原理,对于如何通过软件来控制dsp从而实现我们最终的需求,还不是很了解。本次设计的目的就是基于tms320cf2812平台的进行c语言编程,了解软件编程开发的基本流程,以及软硬件是如何共同协调工作从而实现最终的控制的。熟练掌握tms320f2812控制交通灯方法,树立正确的设计思想提高分析问题与解决具体问题的能力。并通过此次项目设计熟练软件ccs的操作和使用,能够实现程序的编译、运行以及烧写。2、项目设计正文2.1硬件设计2.1.1总体方案设计dsp gpioa最小系 gpiob统数码管驱动电路发光二极管显示

3、电路数码管显示电路本次设计过程中主要利用了f2812的通用i/o来实现对东西南北方向红绿黄灯亮灭的控制,以及数码管显示的控制。而实现定时的操作主要通过通用定时器0的中断调用来实现。硬件设计的总体框图如图1所示。图1 硬件设计总体框图 f2812 gpio介绍tms320f2812 dsp有多达56个通用数字量输入输出端口(gpio),其中绝大部分是通用i/o和专用功能复用引脚。数字量i/o端口模块采用一种灵活配置的方法控制服用引脚功能,gpiomux寄存器用来选择f2812的引脚操作模式,可以通过该寄存器独立设置每个引脚的功能。如果选择数字量i/o模式,可以通过gpxdir寄存器

4、配置数字量i/o的方向,并通过gpxqual进一步消除数字量i/o引脚的噪声信号。此外,处理器提供gpxset和gpxclear寄存器对数字量进行置位和清零,还可以通过gpxdat寄存器独立读/写i/o信号。 定时器0及其中断介绍f2812器件上有3个32位的cpu定时器(timer0/1/2)。定时器1和2留给实时操作系统dsp/bios使用,只有定时器0可以在应用程序中使用。若处理器采用30mhz的外部时钟经过锁相环10/2倍频之后,系统时钟工作在150mhz,一旦定时器被使能,定时器时钟经过与预定标计数器递减计数,预订标计数器产生下溢之后向定时器的32位计数器借位。最后定时

5、器产生溢出使定时器想cpu发出中断。每次预订标计数器产生溢出后使用分频寄存器中的值重新装载,同样32位的周期寄存器为32位的计数器提供重新装载值。 基于f2812构成的最小系统f2812构成的最小系统如图2所示。图2 f2812最小系统原理图f2812芯片的最小系统,由11、12号引脚接外部时钟电路,用30mhz的晶振提供时钟周期。用1117电平转换芯片将外部寄存的电平+5v转换为f2812能支持的电平+3.3v,接到15号引脚(vdd)给f2812提供电源。f2812芯片的复位电路由14号引脚接入。2.1.2 数码管驱动显示电路设计本次设计为了节省f2812的端口的使用采用芯片

6、cd4511来实现数码管的驱动以及显示。cd4511是一个用于驱动共阴极 led (数码管)显示器的 bcd 码七段码译码器,特点如下:具有bcd转换、消隐和锁存控制、七段译码及驱动功能的cmos电路能提供较大的拉电流。可直接驱动led显示器。其引脚图如图3所示。图3 cd4511引脚电路图cd4511引脚功能介绍如下: bi:4脚是消隐输入控制端,当bi=0 时,不管其它输入端状态如何,七段数码管均处于熄灭(消隐)状态,不显示数字。lt:3脚是测试输入端,当bi=1,lt=0 时,译码输出全为1,不管输入 dcba 状态如何,七段均发亮,显示“8”。它主要用来检测数码管是否损坏。 le:锁定

7、控制端,当le=0时,允许译码输出。 le=1时译码器是锁定保持状态,译码器输出被保持在le=0时的数值。a1、a2、a3、a4为8421bcd码输入端。 a、b、c、d、e、f、g为译码输出端,输出为高电平1有效。为了让数码管正常显示,进行引脚的焊接时bi与lt引脚接电源vcc,le则连接地。cd4511正常显示时用的真值表如表一:表一 cd4511真值表输 入输 出lebilia3a2a1a4abcdefg显示0110000111111000110001011000010110010110110120110011111100130110100011001140110101101101150

8、11011000111116011011111100007011100011111118011100111100119电路进行连接时cd4511输出引脚a、c、d、e、f、g依次数码管的a、c、d、e、f、g引脚上即可。另外由于数码管采用共阴的因此本次设计过程中即那个数码管的3脚与8脚接地,从而使数码管正常工作。数码管的内部原理图以及其封装引脚如图4和图5所示。图4 数码管内部原理图 图5 数码管封装引脚图数码管驱动现实的电路图如图6所示。图6 数码管驱动电路图为了编写程序时与上述真值表相对应,将cd4511与dsp f2812的b口进行连接时,应将其中,芯片cd4511引脚a4接芯片f281

9、2的第13号引脚(gpiob0/pwm7)、引脚a1接芯片f2812的第14号引脚(gpiob1/pwm8)、引脚a2接芯片f2812的第15号引脚(gpiob2/pwm9)、引脚a3接芯片f2812的第16号引脚(gpiob3/pwm10)。2.1.3交通灯亮灭控制电路设计由于f2812的通用i/o口引脚输出高电平时,引脚的电压为3.3v,而开发板上所提供的电源电压为5v,因此,发光二极管进行连接时只能采用共阴极。因为当采用共阳极进行连接时,二极管阳极所接的电压为5v,当通用i/o口输出低电平时,发光二极管点亮。但是,当通用i/o口输出高电平时,电压为3.3v,3.3v与5v存在1.7v的压

10、降,足以使发光二极管点亮。这样就会造成,无论通用i/o口输出低电平时,还是高电平时,发光二极管都点亮。采用共阴极则不存在这个问题。此次设计中为了简化地那路的连接,只将东西方向以及南北方向各一边的灯进行了设计连接。共利用了6个通用i/o口。进行连接时,连接在了tms320f2812 dsp的gpioa的前六个引脚,即gpioa0/pwm1- gpioa5/pwm6。总体硬件电路图如图7所示。图7 总体硬件电路图实物图调试如图8所示。图8 硬件实物图2.2项目软件设计2.2.1软件系统分析软件的设计主要是通过利用c语言的编程来实现交通灯亮灭的控制,程序的设计包括初始化部分,对系统时钟的初始化、pi

11、e控制寄存器的初始化、中断向量表的初始化、gpio的初始化、定时器0的初始化。接着就是对定时器0以及其中断周期进行配置。最后进行中断程序的设计,中断程序的设计以及定时器中断周期的设置是本次软件设计的两块重要部分。2.2.2 软件系统设计程序的总体流程图以及中断程序流程图如图9和图10所示。开始系统时钟、gpio、定时器0、中断等的初始化。配置中断响应周期,实现计时功能循环语句等待中断开始中断 zhongduanflag=1?gpadat =0x0024东红灯南绿灯亮gpbdat.all=ledi显示倒计时的值i3?flag=0i=10gpadat=0x0012东西南北黄灯亮gpadat=0x0

12、009东绿灯南红灯亮i-i=0?结束中断nnnyyy图9 程序总体流程图图10 中断程序流程图2.2.3 软件系统实施主程序里面主要实现了对定时器0中断周期的设置,以为计时以秒为单位进行计时的,所以在进行配置时,将定时器的周期配置为1s,在主程序的while(1)语句中每间隔1s响应一次中断。进行配置的函数为configcputimer(&cputimer0,150,1000000),此函数的具体定义在文件dsp281x_cputimers.c中进行了具体定义。中断程序的设计主要是根据i的递减来实现对中断的计数从而进一步实现计时,i的初值为9,当i2时东西方向的红灯亮,南北方向的绿灯亮(反之也

13、可),保持时间为7s。但当倒计时的值为2时东西南北的黄灯都亮,保持时间为2s,之后东西方向与南北方向红灯与绿灯相互转换。程序中区分东西方向与南北方向采用flag的值进行判断。通用i/o口输出的值不同,各方向灯亮的就不同。本次软件的实施过程中对通用i/o(gpio)的操作都是在定时器中断中进行操作的,并且通过实际调试验证此种方法可行。软件调试环境2.2.4软件开发环境的使用在本次设计中程序的编写是在ccs2.0的环境中用c语言实现其功能的代码,因开始编写程序时没有硬件调试,所以是在该开发环境中的simulator方式下进行调试的,如图10红色箭头标记处,最终下载到最小系统上需要在emulator

14、方式下进行下载。下图为ccs2.0界面的相关介绍,如下图所示:图11 软件设置为simulator方式单击图11的“save and quit”,系统将进入程序新建编写界面,如下图12所示图12软件开发界面单击图12菜单栏中的“project”,选择“open”,选择time.pjt得到如下图13的界面图13打开项目界面最终需要将呈程序下载到最小系统上去,选择菜单栏“file”下的“load program”,如下图14红色标记所示。选择debug文件夹里面的后缀名为.out文件,最终按“f5”运行程序。图14 下载程序界面3、项目设计总结本学期学习了dsp原理及其应用这门课程,但只是从宏观上

15、对dsp的各部分的结构以及原理有了一个基本的认识,并没有深入而又具体的对其进行了解。当涉及到一些具体的应用时,还是感到有些力不从心,而且不知道如何具体通过软件来操作dsp实现具体的功能。但是通过此次基于dsp交通灯项目的设计和实现,我深入了解了tm320sf2812 gpio和定时器及其中断的具体操作,对其结构和相关寄存器,有了较好的掌握。同时对与c语言在dsp上进行编程的特点进行了了解,同时锻炼自己的逻辑思维能力。在此次设计过程中,遇到了许多实际当中没有遇到过的问题,例如进行发光二极管的焊接时,由于没有考虑到dsp gpio输出的高电平仅为3.3v而不是5v导致焊接完成进行测试时,发光二极管

16、总是亮的,后来在老师的指点下对电路进行了改进,将发光二极管改成了共阴极,才实现了最终的测试结果。另外由于本次设计是以小组为单位的,而且每个小组都是七个人左右,在设计的过程中大家团结协作,共同应对困难,并且积极交流,最终使得本次cdio项目设计取得圆满的成功。在这期间,我学会了如何融入到一个团队中,如何与团队中其他的成员进行有效地沟通,使得自己在人际交往和为人处事方面也有了一定得提高,变得更善于沟通和交流。dsp作为一种比较超前的科技知识,在此次cdio项目设计中让我对其产生了浓厚的兴趣,并且自己在完成小组任务的情况下,积极的寻找其他的变成实现方法,并且最终通过自己的努力以及在指导老师的帮助下,

17、自己有利用的新的方法实现了此次设计的任务。极大的丰富了自己的专业知识,也为以后的工作和进一步学习打下了坚实的基础。4、参考文献1 苏奎峰. tms320x281xdsp原理及c语言编程.m 北京航空航天大学出版社.20082 苏奎峰、吕强. tms320f2812原理与开发.m 电子工业出版社.20093 清源科技.tms320c28xdsp应用程序设计教程m.机械工业出版社,2004.1.4 戴明桢.tms320c54xdsp结构、原理及应用m.北京航空航天大学出版社,2001.8.5、附录:#include dsp281x_device.h #include dsp281x_example

18、s.h interrupt void cpu_timer0_isr(void);/定时器0中断服务程序生声明unsigned int led10=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09;int i=9;int flag=1;void main(void) / 该函数在后面的 dsp281x_sysctrl.c 文件中查找 initsysctrl();/ 初始化 gpio: 该函数在 dsp281x_gpio.c 文件中声明,将a,b口初始化位输出状态 initgpio(); / 清除所有终中断并初始化pie向量表,禁止所有cpu中断

19、dint;/ 初始化pie控制寄存器为其默认状态(所有pie中断被禁止并且标志被清除)/ 该函数在 dsp281x_piectrl.c 文件中声明 initpiectrl();/ 禁止所有cpu中断并清除所有中断标志 ier = 0x0000; ifr = 0x0000; /初始化中断向量表 该函数在 dsp281x_pievect.c文件中声明 initpievecttable();/将本程序中用到的中断向量重新映射,使其指向中断服务相应的程序 eallow; pievecttable.tint0 = &cpu_timer0_isr; edis; initcputimers(); /初始化c

20、pu定时器/配置cpu-timer0周期为1s,150m cpu频率,1s的中断周期 configcputimer(&cputimer0,150,1000000); startcputimer0(); /使能连接到cpu_timer 0的 cpu int1 ier|=m_int1;/ 使能pie内的 tint0:group 1 interrupt 7 piectrlregs.pieier1.bit.intx7 = 1; eint; / 全局中断使能 ertm; / 使能实施调试中断 dbgm / cputimer0regs.tcr.bit.tss=0; while(1) interrupt v

21、oid cpu_timer0_isr(void) / 响应中断并允许系统接收更多的中断 piectrlregs.pieack.all = pieack_group1; /cputimer0.interruptcount+; cputimer0regs.tcr.bit.tif = 1; cputimer0regs.tcr.bit.trb = 1; if(i=3) if(flag=1) gpiodataregs.gpadat.all=0x0024;/南北方向红灯亮,东西方向绿灯亮 else gpiodataregs.gpadat.all=0x0009;/南北方向绿灯亮,东西方向红灯亮 else g

22、piodataregs.gpadat.all=0x0012;/东西南北方向黄灯都亮 if(i=0) flag=0; i=10; i-; 文件名:dsp281x_cputimers.c/功能描述:dsp281x cpu 32位定时器初始化及其相关函数#include dsp281x_device.h / dsp281x headerfile include file#include dsp281x_examples.h / dsp281x examples include filestruct cputimer_vars cputimer0;/*initcputimers:*/将定时器初始化为一

23、个确定状态void initcputimers(void) / cpu timer 0/ 初始化各自定时器的寄存器指向相应的地址cputimer0.regsaddr = &cputimer0regs;/ 初始化定是周期为最大值cputimer0regs.prd.all = 0xffffffff;/ 初始化预定标计数器,分频系数为1(时钟:sysclkout)cputimer0regs.tpr.all = 0;cputimer0regs.tprh.all = 0;/确认计数器处于停止计数状态cputimer0regs.tcr.bit.tss = 1;/ 使用周期寄存器的值装载定时器计数寄存器cputimer0regs.tcr.bit.trb = 1;cputimer0regs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论