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

下载本文档

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

文档简介

1、1/ 18DSP原理及应用课程设计交通灯综合控制学院电气信息工程专业电子信息工程班级_学号_分组成员_指导教师_2018年6月I2/ 18目录1引言32课程设计的目标42.1课程设计的背景42.2设计要求42.3设计思路简介42.4交通灯控制要求52.5交通灯模拟52.6计时62.7紧急情况62.8程序设计63DSP定时器的算法原理83.1CPU定时器的原理83.2CPU定时寄存器原理84系统程序设计94.1流程图9 4. 2实验程序10 5心得体会211/ 181引言随右计算机和信息技术的E竦发展 数字信甘处炷孩术得到迅速的发展。DSP (Digital Sig nal Process in

2、 g 滉一门涉及许多学科和领域的新兴学科。数字信需处理是一种通过数字信号处埠器来处理现实信甘的方法 这些信兮1数字庁 列表小c在过去的二十彩年时K里数宁信号处赠已经在通信等领域得到极为 广泛的应用。本次设计是基于 DSP 来实规交泄灯的控创 利用以匕一级育汽模拟交逋信号 利用数偲管显小倒计时时间 利用TMS320VC5416DSP 片上定时 器定时产生时钟计数来模拟实际生活中十字路口交通灯。b5E2RGbCAP关键词:DSPTMS320VC5416 ;交通灯;笈朮一极等2课程设计的目标2.1课程设计的背景DSP 是一种将处理器的计算核心和一定的外部设备集成在一个单片芯片上血构成的类似 单片机的

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

4、的DSP 系统的组成与原理用到具体的实际系统中,加深对 DSP 系统的理解,是将该门课程与实际 问题相连接的关键步骤。通过课程设计,能够提高学生分析问题,解决问题, 从而运用所学知识解决实际问题的能力,并培养基本的、良好的软硬件射进能 力。DXDiTa9E3d2.2设计要求利用 C 语言在 CCS 环境中编写一个交通灯综合控制程序,并能通过硬件仿真对所编写的程序及其应用性、可行性进行验证。RTCrpUDGiT2/ 182.3设计思路简介在 TMS320C54x 系统开发环境 CCSCode Composer Studio ) 下对交通灯综 合控制的实现原理进行讨论。通过实验仿真,可以在硬件实验

5、箱上看到对交通 灯的模拟控制。5PCzVD7HxA交通等综合控制的控制原理2.4交通灯控制要求利用 ICETEK-S60 实验箱提供的设备,设计模拟实际生活中十字路口交通 灯控制的程序。要求如下:- 交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通的 控制:绿灯信号表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。-计时显示:液晶屏幕上 8X8 点阵显示 0-9 计数。- 正常交通控制信号顺序:正常交通灯信号自动变换:南北方向绿灯,东西红灯(20 秒。南北方向绿灯闪烁。南北方向黄灯。南北方向红灯,东西方向黄灯。 东西方向绿灯 (20 秒。东西方向绿灯闪烁。东西方向黄

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

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

8、NSGreenEWRed20 秒(160,0,15920-02南北绿灯闪烁,东西红灯statusNSFIashEWRed6 秒(24,160,18303南北黄灯,东西红灯statusNSYellowEWRed4 秒(16,184,199204南北红灯,东西黄灯statusNSRedEWYellow4 秒(16,200,215205南北红灯,东西绿灯statusNSRedEWGreen20 秒(160,216,37520-16南北红灯,东西绿灯闪烁statusNSRedEWFIash6 秒(24, 376, 39907南北红灯,东西黄灯statusNSRedEWYellow4 秒(16,400,

9、415208南北黄灯,东西红灯statusNSYellowEWRed4 秒(16,416,43120*南北红灯,东西红灯StatusHold20 秒(160,0,15920-1其中,正常顺序每 112 秒(计数值 448为一个循环,状态“*”为非顺序状4/ 18态0这样,只要根据计数值就可确定当前状态,根据状态再分情况处理。对于计数显示,当处于状态1、5、*中时需要进行倒计时,需要计算在此状态中的计数值增量,根据增量判断是否更新计数显示。3 DSP定时器的算法原理3.1CPU 定时器的原理本次设计主要用的是 F2812 器件上的 3 个 32 位 CPU 定时器 vTIMERO/1/2 )。其

10、中定时器 1 和定时器 2 预留给实时操作系统使用 如 DSP- BIOS),只有定时器 0用户可以在应用程序中使用。定时器功能框图如下:jLBHrnAILg3.2CPU 定时寄存器原理定时器在工作过程中,首先把周期寄存器 PRDH:PRD)的值装入 32 位计 数寄存器。计数寄存器根据 SYSCLKOUT 时钟递减计数。当计数寄存器等于 0 时,定时器中断输出产生一个中断脉冲。XHAQX74J0X1)定时器计数寄存器 vTIMERxTIM 和 TIMERxTIMH)2)定时器控制寄存器 vTIMERxTCR ):使能中断,定时功能;3)定时器周期寄存器 vTIMERxPRD):符合条件则周期

11、性重新装载并保5/ 18存周期值0 x38#defi ne SPSD0 *(u nsig ned int *0 x39#defi ne REGISTERCLKMD (*(u nsig ned int *0 x58#defi ne TIM*(i nt *0 x246/ 18#define PRD *(int *0 x25#define TCR*(int *0 x26#define IMR*(int *0 x0 /IM R 中断屏蔽寄存器#define IFR *(int *0 x1 /IFR 中断标志寄存器#define PMST *(int *0 x1d /PMST 处理器模式状态寄存器 。值

12、port8005port8007/void 表示此函数为空类型,执行此函数后不产生函数void InitTimer( 。void InitICETEKCTR( 。void interrupt time(void 。void interrupt xint2(void 。 / XINT2 中断服务程序void SetLEDArray(int nNumber 。/ 修改显示内容void RefreshLEDArray( 。/ 刷新显示void EndICETEKCTR( 。void TurnOnLCD( 。void LCDCLS( 。void Delay(unsigned int nDelay。un

13、signed int uWork,nTimeCount。unsigned int uLightStatusEW,uLightStatusSN。unsigned int bHold。unsigned char ledbuf8,ledx8。unsigned char led40=0 x7E,0 x81,0 x81,0 x7E,0 x00,0 x02,0 xFF,0 x00,0 xE2,0 x91,0 x91,0 x8E,0 x42,0 x89,0 x89,0 x76,0 x38,0 x24,0 x22,0 xFF,0 x4F,0 x89,0 x89,0 x71,0 x7E,0 x89,0 x89,

14、0 x72,0 x01,0 xF1,0 x09,0 x07,0 x76,0 x89,0 x89,0 x76,0 x4E,0 x91,0 x91,0 x7E。unsigned char ledkey108=0 x00,0 x00,0 x7C,0 x82,0 x82,0 x82,0 x7C,0 x00, /00 x00,0 x00,0 x00,0 x84,0 xFE,0 x80,0 x00,0 x00, /10 x00,0 x00,0 x84,0 xC2,0 xA2,0 x92,0 x8C,0 x00, /20 x00,0 x00,0 x44,0 x92,0 x92,0 x92,0 x6C,0 x

15、00,0 x00,0 x00,0 x30,0 x28,0 x24,0 xFE,0 x20,0 x00,0 x00,0 x00,0 x4E,0 x92,0 x92,0 x92,0 x62,0 x00,0 x00,0 x00,0 x7C,0 x92,0 x92,0 x92,0 x64,0 x00,0 x00,0 x00,0 x02,0 xC2,0 x32,0 x0A,0 x06,0 x00,0 x00,0 x00,0 x6C,0 x92,0 x92,0 x92,0 x6C,0 x00,0 x00,0 x00,0 x4C,0 x92,0 x92,0 x92,0 x7C,0 x00。main(int

16、nWork1,nWork2,nWork3,nWork4,tKey。int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatusSixE2yXPq58/ 18unsigned int nScanCode。nTimeCount=0。 bHold=0。 uLightStatusEW=uLightStatusSN=0。nNowStatus=0。 nOldStatus=1。 nOldTimeCount=0。InitDSP(。/初始化 DSP,设置运行速度InitICETEKCTR( 。 / 初始化显示 /控制模块InitTimer(

17、。/ 设置定时器中断/ 根据计时器计数切换状态/ 根据状态设置计数和交通灯状态while ( 1 if ( bHold & nNowStatus=statusHold if ( nTimeCount=nStatusHold nNowStatus=nSaveStatusnTimeCount=nSaveTimeCount。 bHold=0。elseif(nTimeCountnNowStatus=statusNSGreenEWRed6ewMyirQFLelseif(nTimeCountnNowStatus=statusNSFIashEWRedkavU42VRUselseif(nTimeCou

18、ntnNowStatus=statusNSYellowEWRedy6v3ALoS89elseif(nTimeCountnNowStatus=statusNSRedEWYellowM2ub6vSTnPelseif(nTimeCountnNowStatus=statusNSRedEWGreen0YujCfmUCwelseif(nTimeCountnNowStatus=statusNSRedEWFlasheUts8ZQVRdelseif(nTimeCountnNowStatus=statusNSRedEWYellowsQsAEjkW5Telseif(nTimeCountnN owStatus=sta

19、tusNSYellowEWRedGMsIasNXkAif ( nNowStatus=nOldStatus switch ( nNowStatus case statusNSFlashEWRed:nWork1=nTimeCount-nStatusNSGreenEWRed。nWork2=nStatusNSYellowEWRed-nStatusNSFlashEWRed。nWork3=nWork2/3。nWork4=nWork3/2。if ( nWork1=0 & nWork20 & nWork30& nWork40 TIrRGchYzg9/ 18uLightStatusSN=

20、( (nWork1%nWork3?(0 x49:(0 x40。/ 满足 条件,取 0 x49 地址的值,否则,取 0 x48 的值7EqZcWLZNXbreak。case statusNSRedEWFlash:nWork1=nTimeCount-nStatusNSRedEWGreen。nWork2=nStatusNSRedEWYellow1-nStatusNSRedEWFlash。nWork3=nWork2/3。nWork4=nWork3/2。if ( nWork1=0 & nWork20 & nWork30& nWork40 lzq7IGf02EuLightStatu

21、sEW=( (nWork1%nWork3?(0 x09:(0 x00 。zvpgeqJ1hkbreak。case statusNSGreenEWRed:nWork1=nStatusNSGreenEWRed/20。if ( nWork10 nWork2=20-nTimeCount/nWork1。if ( bHold if ( nWork210 nTimeCount=nWork1*10。nWork2=10。i0 / i8if ( nOldTimeCount!=nWork2 nOldTimeCount=nWork2。SetLEDArray(nWork2。break。case statusNSRedE

22、WGreen:nWork1=(nStatusNSRedEWGreen- nStatusNSRedEWYellow/20。NrpoJac3v1if ( nWork10 nWork2=20-(nTimeCount-nStatusNSRedEWYellow/nWork1。inowfTG4Kiif ( bHold if ( nWork2i0 nTimeCount=nStatusNSRedEWYellow+nWorki*i0。nWork2=i0。if ( nOldTimeCount!=nWork2 nOldTimeCount=nWork2。SetLEDArray(nWork2 。break。 case

23、statusHold:nWorki=nStatusHold/20。 if ( nWorki0 nWork2=20-nTimeCount/nWorki。 if( nOldTimeCount!=nWork2 nOldTimeCount=nWork2。 SetLEDArray(nWork2 。break。11/ 18elseif ( bHold n SaveStatus=nN owStatusnSaveTimeCount=nTimeCount。nNowStatus=statusHold。 nTimeCount=0。if ( nSaveStatus=statusNSFlashEWRed |nSaveS

24、tatus=statusNSYellowEWRed fjnFLDa5Zon SaveStatus=statusNSRedEWGree nnSaveTimeCount=nStatusNSRedEWYellow。else if ( nSaveStatus=statusNSRedEWFlash |nSaveStatus=statusNSRedEWYellow tfnNhnE6e5n SaveStatus=statusNSGree nEWRednSaveTimeCount=0。nOldStatus=nNowStatus。switch ( nNowStatus case statusNSGreenEWR

25、ed:uLightStatusEW=0 x24。uLightStatusSN=0 x49。SetLEDArray(20。break。case statusNSFlashEWRed:uLightStatusEW=0 x24。uLightStatusSN=0 x49。SetLEDArray(0。break。case statusNSYellowEWRed:uLightStatusEW=0 x24。uLightStatusSN=0 x52。SetLEDArray(20。break。case statusNSRedEWYellow:uLightStatusEW=0 x12。uLightStatusSN

26、=0 x64。SetLEDArray(20 。break。case statusNSRedEWGreen:uLightStatusEW=0 x09 。uLightStatusSN=0 x64。SetLEDArray(20 。12/ 18break。case statusNSRedEWFlash:uLightStatusEW=0 x09 。uLightStatusSN=0 x64。SetLEDArray(0 。 break。 case statusHold:uLightStatusEW=0 x24 。uLightStatusSN=0 x64。SetLEDArray(20 。 break。CTRL

27、R=uLightStatusEW 。 CTRLR=uLightStatusSN 。 / 设 置 交 通灯状态HbmVN777sLRefreshLEDArray( 。/ 刷新发光二极管显示nScanCode=port8001。/ 读键盘扫描码nScanCode&=0 x0ff。tKey=CTRCLKEY 。if ( nScanCode=SCANCODE_9 break。EndICETEKCTR( 。exit(0。/ 定时器中断服务程序,进行时钟计数void interrupt time(voidnTimeCount+。 nTimeCount%=nTotalTime。/ 设置发光二极管显示

28、内容void SetLEDArray(int nNumberint 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=0oiCTRLCDLCR=ledkeyShowNumberi 。Del

29、ay(LCDDELAY 。CTRLCDCR=0 。Delay(LCDDELAY 。/ 将缓存中点阵送发光二极管显示void RefreshLEDArray(int i。for ( i=0。 i13/ 18CTRGR=ledxi 。CTRLA=ledbufi 。/初始化 DSP,设置运行速度=8MHzvoid InitDSP(REGISTERCLKMD=0 。/ 复位 PLLREGISTERCLKMD=0 x1007。/ 速度设置=16MHz/ 设置定时器参数、允许中断void InitTimer(unsigned int k。asm( ssbx INTM 。/ 关中断,进行关键设置时不许打扰/

30、 设置通用定时器k=PMST。 PMST=k&0 xff 。 IMR =0 x0c 。 TCR =0 x41f。TIM = 0。PRD = 0 x0f423。/设置 PMST 寄存器/ 中断向量表起始地址 =80H/ 使能 TINT/ 预分频系数为 16/ 时钟计数器清 0/ 周期寄存器为 0ffH14/ 18TCR = 0 x42f 。IFR = 0 x0c。/ 复位、启动/ 清中断标志位port3004=0。/ 使能 XINT2asm( rsbx INTM 。 / 开中断/ 初始化 ICETEK-CTR 板上设备void InitICETEKCTR(int k 。CTRGR=0。/

31、 初始化 ICETEK-CTRCTRGR=0 x80。CTRGR=0。CTRLR=0 。/ 关闭东西方向的交通灯CTRLR=0 x40。/ 关闭南北方向的交通灯CTRLR=0 x0c1。/ 开启发光二极管显示阵列CTRLR=0 xc8 。/ 使能外部中断for ( k=0okledbufk=0 x0ff 。/ 显示为空白ledxk=(k 。 / 生成显示列控制字k=CTRCLKEY 。 / 清除键盘缓冲区 TurnOnLCD( 。/ 打开显示LCDCLS( 。/ 清除显示内存CTRLCDCMDR=LCDCMDSTARTLINE 。行CTRLCDCR=0 。void interrupt xint2(void/ XINT2 中断服务程序bHold=1。void EndICETEKCTR(int k 。CTRLR=0 。CTRLR=0 x40。CTRLR=0 x0c0。k=CTRCLKEY 。void TurnOnLCD(CTRL

温馨提示

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

最新文档

评论

0/150

提交评论