DSP交通灯综合控制_第1页
DSP交通灯综合控制_第2页
DSP交通灯综合控制_第3页
DSP交通灯综合控制_第4页
DSP交通灯综合控制_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、dsp原理及应用课程设计交通灯综合控制学 院 电气信息工程专 业 电子信息工程 班 级学 号分组成员指导教师2013年6 月1 引言 12 课程设计的目标 22.1 课程设计的背景2.2.2 设计要求 2.2.3 设计思路简介2.2.4 交通灯控制要求3.2.5 交通灯模拟 3.2.6 计时 4.2.7 紧急情况 4.2.8 程序设计 4.3 dspt时器的算法原理 63.1 cpu 定时器的原理6.3.2 cpu 定时寄存器原理6.4 系统程序设计 74.1 流程图 7.4.2 试验程序 7.5 心得体会 181引言随着计算机和信息技术的飞速发展数字信号处理技术得到迅速的发展。dsp (di

2、gital signal processing走一门涉及许多学科和领域的新兴学科。 数字信号 处理是一种通过数字信号处理器来处理现实信号的方法这些信号由数字序列表示。在过去的二十多年时间里数字信号处理已经在通信等领域得到极为广泛的应用。本次设计是基于 dsp来实现交通灯的控制利用发光二级管来模拟交通信号 利用数码管显示倒计时时间利用tms320vc5416dsp片上定时器定时产生时钟计数来模拟实际生活中十字路口交通灯。关键词:dsptms320vc5416;交通灯;发光二极管18 / 202课程设计的目标2.1 课程设计的背景dsp是一种将处理器的计算核心和一定的外部设备集成在一个单片芯片上

3、而构成的类似于单片机的一种处理器芯片。不同于一般单片机的是由于dsp采用了特殊的总线结构和体系因此它在执行数字信号处理计算方面具有更高的性能。数字信号处理已经在通信、信号处理等领域得到极为广泛的应用。十字 路口交通灯在我们的日常生活中随处可见它为繁忙的道路交通及人们的安全提供了较好的保障。然而 我们只知道交通灯在红、黄、绿三色之间交替更换来 控制人车流量去对其内部的工作原理及软硬件的设计了解很少因此要通过此次简单道路交通灯控制系统软硬件设计来进一步研究交通灯的内部结构。最重要的是将学习到的dsp系统的组成与原理应用到交通灯的设计当中。通过dsp技术及应用课程设计,是学生能够将学到的 dsp系统

4、的组成 与原理用到具体的实际系统中,加深对 dsp系统的理解,是将该门课程与实际 问题相连接的关键步骤。通过课程设计,能够提高学生分析问题,解决问题,从 而运用所学知识解决实际问题的能力,并培养基本的、良好的软硬件射进能力。2.2 设计要求利用c语言在ccs环境中编写一个交通灯综合控制程序,并能通过硬件仿 真对所编写的程序及其应用性、可行性进行验证。2.3 设计思路简介在tms320c54x系统开发环境 ccs (code composer studio下对交通灯综 合控制的实现原理进行讨论。通过实验仿真,可以在硬件实验箱上看到对交通灯 的模拟控制。交通等综合控制的控制原理2.4 交通灯控制要

5、求利用 icetek-s60 实验箱提供的设备,设计模拟实际生活中十字路口交通灯控制的程序。要求如下:- 交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通的控制:绿灯信号表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。- 计时显示:液晶屏幕上8x8点阵显示0-9计数。- 正常交通控制信号顺序:正常交通灯信号自动变换: 南北方向绿灯,东西红灯 (20 秒 )。 南北方向绿灯闪烁。 南北方向黄灯。 南北方向红灯,东西方向黄灯。 东西方向绿灯 (20 秒)。 东西方向绿灯闪烁。 东西方向黄灯。 返回循环控制。- 紧急情况处理:模仿紧急情况(重要车队通过、急救车通过等)发

6、生时,交通警察手动控制 当任意方向通行剩余时间多于 10 秒,将时间改成10 秒。 正常变换到四面红灯 (20 秒)。 直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态) 。2.5 交通灯模拟利用 icetek-ctr 上的一组发光二极管(共 12 只,分为东西南北四组、红黄绿三色 )的亮灭实现交通信号的模拟。发光二极管的控制方法可参见第二部分、第二章、二、 2。2.6 计时使用tms320vc5416dsp片上定时器,定时产生时钟计数,再利用此计数 对应具体时间。定时器控制及中断编程可参考实验 3.3程序。2.7 紧急情况利用icetek-ctr上键盘产生外中断,中断正常信号顺序

7、,模拟突发情况。外中断编程控制可参考实验 3.4程序。2.8 程序设计根据设计要求,由于控制是由不同的各种状态按顺序发生的,我们可以采用状态机制控制方法来解决此问题。这种方法是:首先列举所有可能发生的状态;然后将这 些状态编号,按顺序产生这些状态;状态延续的时间用程序控制。对于突发情况,可采用在正 常顺序的控制中插入特殊控制序列的方式完成。时钟计数:采用250ms 一次中断进行累加计数。表格1状态编号信号灯状态状态定义保持时间(计数值,起始时间,结束时间)计数显示1南北绿灯,东西红灯statusnsgreenewred20 秒(160, 0, 159)20-02南北绿灯闪烁,东西红灯statu

8、snsflashewred6 秒(24, 160, 183)03南北黄灯,东西红灯statusnsyellowewred4 秒(16, 184, 199)204南北红灯,东西黄灯statusnsredewyellow4 秒(16, 200, 215)205南北红灯,东西绿灯statusnsredewgreen20 秒(160, 216, 375)20-16南北红灯,东西绿灯闪烁statusnsredewflash6 秒(24, 376, 399)07南北红灯,东西黄灯statusnsredewyellow4 秒(16, 400, 415)208南北黄灯,东西红灯statusnsyellowew

9、red4 秒(16, 416, 431)20*南北红灯,东西红灯statushold20 秒(160, 0, 159)20-1其中,正常顺序每112秒(计数值448)为一个循环,状态 为非顺序状态。这样,只要根据计数值就可确定当前状态,根据状态再分情况处理。对于计数显示,当处于状态1、5、*中时需要进行倒计时,需要计算在此状 态中的计数值增量,根据增量判断是否更新计数显示。3 dsp定时器的算法原理3.1 cpu定时器的原理本次设计主要用的是f2812器件上的3个32位cpu定时器(timer0/1/2 )。其中定时器 1和定时器 2预留给实时操作系统使用(如dsp-bios),只有定时器0用

10、户可以在应用程序中使用。定时器功能框图如下:clcr.4 rsvsclkot jt i借位 lzliyr3.2 cpu定时寄存器原理定时器在工作过程中,首先把周期寄存器(prdhprd)的值装入32位 计数寄存器。计数寄存器根据 sysclkout时钟递减计数。当计数寄存器等于 0时,定时器中断输出产生一个中断脉冲。(1)定时器计数寄存器(timerxtim 和timerxtimh )(2)定时器控制寄存器(timerxtcr):使能中断,定时功能;(3)定时器周期寄存器(timerxprd):符合条件则周期性重新装载并 保存周期值(4)定时器预定标寄存器(timerxtpr 和timerxt

11、prh ):控制多久减1。4系统程序设计4.1 流程图图4-1实验程序流程图图4-2设计总流程图设计总流程图4.2试验程序#include scancode.h#define spsa0 (unsigned int *)0x38#define spsd0 (unsigned int *)0x39#define registerclkmd (unsigned int *)0x58)#definetim*(int *)0x24#defineprd*(int *)0x25#definetcr*(int *)0x26#defineimr*(int *)0x0/im r中断屏蔽寄存器#defineifr

12、*(int *)0x1 /ifr中断标志寄存器#define pmst *(int *)0x1d /pmst 处理器模式状态寄存器 (地址1dh)#define nstatusnsgreenewred 160 /状态 1 计数结束时间#define nstatusnsflashewred 184#define nstatusnsyellowewred 200#define nstatusnsredewyellow 216#define nstatusnsredewgreen 376#define nstatusnsredewflash 400#define nstatusnsredewyell

13、ow1 416#define nstatusnsyellowewred1 432#define ntotaltime 448#define nstatushold 160# define statusnsgreenewred 0# define statusnsflashewred 1# define statusnsyellowewred 2# define statusnsredewyellow 3# define statusnsredewgreen 4# define statusnsredewflash 5# define statushold 6# define lcddelay

14、1# define lcdcmdturnon 0x3f# define lcdcmdturnoff 0x3e#define lcdcmdstartline 0xc0#define lcdcmdpage 0xb8#define lcdcmdveraddress 0x40ioport unsigned int port3004;/ ctr 扩展寄存器定义ioport unsigned int port8000;ioport unsigned int port8001; /8001:读键盘扫描值,写液晶控制寄存器地址ioport unsigned int port8002; /8002:液晶控制寄存

15、器地址ioport unsigned int port8003; /8003,8004:液晶显示数据寄存器地址ioport unsigned int port8004; /ioport unsigned int port8005; /8005: 发光二极管显示阵列控制寄存器地址ioport unsigned int port8007; /8007: 发光二极管显示阵列控制寄存器地址#define ctrgr port8000#define ctrlcdcmdr port8001#define ctrkeyport8001#define ctrclkeyport8002#define ctrlc

16、dcrport8002#define ctrlcdlcrport8003#define ctrlcdrcrport8004#define ctrlaport8005#define ctrlrport8007void initdsp(); /void 表示此函数为空类型, 执行此函数后不产生函数值void inittimer();void initicetekctr();void interrupt time(void);void interrupt xint2(void); / xint2 中断服务程序void setledarray(int nnumber); / 修改显示内容void re

17、freshledarray();/ 刷新显示void endicetekctr();void turnonlcd();void lcdcls();void delay(unsigned int ndelay);unsigned int uwork,ntimecount;unsigned int ulightstatusew,ulightstatussn;unsigned int bhold;unsigned char ledbuf8,ledx8;unsigned char led40=0x7e,0x81,0x81,0x7e,0x00,0x02,0xff,0x00,0xe2,0x91,0x91,

18、0x8e,0x42,0x89,0x89,0x76,0x38,0x24,0x22,0xff,0x4f,0x89,0x89,0x71,0x7e,0x89,0x89,0x72,0x01,0xf1,0x09,0x07,0x76,0x89,0x89,0x76,0x4e,0x91,0x91,0x7e;unsigned char ledkey108=0x00,0x00,0x7c,0x82,0x82,0x82,0x7c,0x00,/00x00,0x00,0x00,0x84,0xfe,0x80,0x00,0x00, /10x00,0x00,0x84,0xc2,0xa2,0x92,0x8c,0x00,/20x00

19、,0x00,0x44,0x92,0x92,0x92,0x6c,0x00, 0x00,0x00,0x30,0x28,0x24,0xfe,0x20,0x00,0x00,0x00,0x4e,0x92,0x92,0x92,0x62,0x00, 0x00,0x00,0x7c,0x92,0x92,0x92,0x64,0x00, 0x00,0x00,0x02,0xc2,0x32,0x0a,0x06,0x00, 0x00,0x00,0x6c,0x92,0x92,0x92,0x6c,0x00, 0x00,0x00,0x4c,0x92,0x92,0x92,0x7c,0x00;main()int nwork1,nw

20、ork2,nwork3,nwork4,tkey;int nnowstatus,noldstatus,noldtimecount,nsavetimecount,nsavestatus;unsigned int nscancode;ntimecount=0; bhold=0;ulightstatusew=ulightstatussn=0;nnowstatus=0; noldstatus=1; noldtimecount=0;initdsp();/初始化dsp,设置运行速度initicetekctr(); / 初始化显示/控制模块inittimer(); / 设置定时器中断/ 根据计时器计数切换状态

21、/ 根据状态设置计数和交通灯状态while ( 1 )if ( bhold & nnowstatus=statushold )if ( ntimecount=nstatushold )nnowstatus=nsavestatus;ntimecount=nsavetimecount;bhold=0;elseif(ntimecountnstatusnsgreenewred)nnowstatus=statusnsgreenewred;elseif(ntimecountnstatusnsflashewred)nnowstatus=statusnsflashewred;elseif(ntimecount

22、nstatusnsyellowewred)nnowstatus=statusnsyellowewred;elseif(ntimecountnstatusnsredewyellow)nnowstatus=statusnsredewyellow;elseif(ntimecountnstatusnsredewgreen)nnowstatus=statusnsredewgreen;elseif(ntimecountnstatusnsredewflash)nnowstatus=statusnsredewflash;elseif(ntimecountnstatusnsredewyellow1)nnowst

23、atus=statusnsredewyellow;elseif(ntimecount=0 & nwork20 & nwork30 & nwork40 )ulightstatussn=( (nwork1%nwork3)=0 & nwork20 & nwork30 & nwork40 )ulightstatusew=( (nwork1%nwork3)0 )nwork2=20-ntimecount/nwork1;if ( bhold )if ( nwork210 )ntimecount=nwork1*10;nwork2=10;if ( noldtimecount!=nwork2 )noldtimec

24、ount=nwork2;setledarray(nwork2);break;case statusnsredewgreen:nwork1=(nstatusnsredewgreen-nstatusnsredewyellow)/20;if ( nwork10 )nwork2=20-(ntimecount-nstatusnsredewyellow)/nwork1;if ( bhold ) if ( nwork210 )ntimecount=nstatusnsredewyellow+nwork1*10;nwork2=10;if ( noldtimecount!=nwork2 )noldtimecoun

25、t=nwork2;setledarray(nwork2); break;case statushold:nwork1=nstatushold/20;if ( nwork10 )nwork2=20-ntimecount/nwork1;if ( noldtimecount!=nwork2 ) noldtimecount=nwork2;setledarray(nwork2); break;elseif ( bhold )nsavestatus=nnowstatus; nsavetimecount=ntimecount;nnowstatus=statushold;|ntimecount=0;if (

26、nsavestatus=statusnsflashewred nsavestatus=statusnsyellowewred )nsavestatus=statusnsredewgreen;nsavetimecount=nstatusnsredewyellow;else if ( nsavestatus=statusnsredewflash | nsavestatus=statusnsredewyellow )nsavestatus=statusnsgreenewred;nsavetimecount=0;noldstatus=nnowstatus;switch ( nnowstatus ) c

27、ase statusnsgreenewred:ulightstatusew=0x24; ulightstatussn=0x49;setledarray(20);break;case statusnsflashewred:ulightstatusew=0x24; ulightstatussn=0x49;setledarray(0);break;case statusnsyellowewred:ulightstatusew=0x24; ulightstatussn=0x52;setledarray(20);break;case statusnsredewyellow:ulightstatusew=

28、0x12; ulightstatussn=0x64;setledarray(20);break;case statusnsredewgreen:ulightstatusew=0x09; ulightstatussn=0x64;setledarray(20);break;case statusnsredewflash:ulightstatusew=0x09; ulightstatussn=0x64;setledarray(0);break;case statushold:ulightstatusew=0x24; ulightstatussn=0x64;setledarray(20);break;

29、ctrlr=ulightstatusew; ctrlr=ulightstatussn; / 设置交通灯状态refreshledarray(); / 刷新发光二极管显示 nscancode=port8001; / 读键盘扫描码 nscancode&=0x0ff;tkey=ctrclkey;if ( nscancode=scancode_9 ) break;endicetekctr();exit(0);/ 定时器中断服务程序,进行时钟计数void interrupt time(void)ntimecount+;ntimecount%=ntotaltime;/ 设置发光二极管显示内容void set

30、ledarray(int nnumber)int i,shownumber;shownumber=nnumber/2;if(shownumber9) shownumber=0;ctrlcdcmdr=lcdcmdpage; / 设置操作页=0delay(lcddelay);ctrlcdcr=0;delay(lcddelay);ctrlcdcmdr=lcdcmdveraddress; / 起始列 =0delay(lcddelay);ctrlcdcr=0;delay(lcddelay);for ( i=0;i8;i+ )ctrlcdlcr=ledkeyshownumberi;delay(lcddel

31、ay);ctrlcdcr=0;delay(lcddelay);/ 将缓存中点阵送发光二极管显示void refreshledarray()int i;for ( i=0;i8;i+ )ctrgr=ledxi;ctrla=ledbufi;/初始化dsp,设置运行速度=8mhzvoid initdsp()registerclkmd=0; / 复位 pllregisterclkmd=0x1007; / 速度设置 =16mhz/ 设置定时器参数、允许中断void inittimer()unsigned int k;asm( ssbx intm); / 关中断,进行关键设置时不许打扰/ 设置通用定时器k

32、=pmst;/ 设置 pmst 寄存器pmst =k&0xff; / 中断向量表起始地址=80himr = 0x0c;/ 使能 tinttcr = 0x41f;/ 预分频系数为16tim = 0;/ 时钟计数器清0prd = 0x0f423; / 周期寄存器为0ffhtcr = 0x42f;/ 复位、启动ifr = 0x0c;/ 清中断标志位port3004=0;/ 使能 xint2asm( rsbxi ntm); / 开中断/ 初始化 icetek-ctr 板上设备void initicetekctr()int k;ctrgr=0; / 初始化 icetek-ctrctrgr=0x80;ct

33、rgr=0;ctrlr=0; / 关闭东西方向的交通灯ctrlr=0x40; / 关闭南北方向的交通灯ctrlr=0x0c1; / 开启发光二极管显示阵列ctrlr=0xc8; /使能外部中断for ( k=0;k8;k+ )ledbufk=0x0ff; / 显示为空白ledxk=(k4); / 生成显示列控制字k=ctrclkey; / 清除键盘缓冲区turnonlcd();/ 打开显示lcdcls();/ 清除显示内存ctrlcdcmdr=lcdcmdstartline; / 设置显示起始行 ctrlcdcr=0;void interrupt xint2(void) / xint2 中断服务程序bhold=1;void endicetekctr()

温馨提示

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

评论

0/150

提交评论