DSP交通灯综合控制.docx
《DSP交通灯综合控制.docx》由会员分享,可在线阅读,更多相关《DSP交通灯综合控制.docx(20页珍藏版)》请在冰豆网上搜索。
![DSP交通灯综合控制.docx](https://file1.bdocx.com/fileroot1/2022-11/16/10d78afd-ff87-416c-ad06-ad67afe8bcb6/10d78afd-ff87-416c-ad06-ad67afe8bcb61.gif)
DSP交通灯综合控制
DSP原理及应用
课程设计
交通灯综合控制
学院
电气信息工程
专业
电子信息工程
班级
学号
分组成员
指导教师
2013年6月
引言
随着计算机与信息技术得飞速发展数字信号处理技术得到迅速得发展。
DSP(DigitalSignalProcessing)就是一门涉及许多学科与领域得新兴学科。
数字信号处理就是一种通过数字信号处理器来处理现实信号得方法这些信号由数字序列表示。
在过去得二十多年时间里数字信号处理已经在通信等领域得到极为广泛得应用。
本次设计就是基于DSP来实现交通灯得控制利用发光二级管来模拟交通信号利用数码管显示倒计时时间利用TMS320VC5416DSP片上定时器定时产生时钟计数来模拟实际生活中十字路口交通灯。
关键词:
DSPTMS320VC5416;交通灯;发光二极管
课程设计得目标
1.1课程设计得背景
DSP就是一种将处理器得计算核心与一定得外部设备集成在一个单片芯片上而构成得类似于单片机得一种处理器芯片。
不同于一般单片机得就是由于DSP采用了特殊得总线结构与体系因此它在执行数字信号处理计算方面具有更高得性能。
数字信号处理已经在通信、信号处理等领域得到极为广泛得应用。
十字路口交通灯在我们得日常生活中随处可见它为繁忙得道路交通及人们得安全提供了较好得保障。
然而我们只知道交通灯在红、黄、绿三色之间交替更换来控制人车流量去对其内部得工作原理及软硬件得设计了解很少因此要通过此次简单道路交通灯控制系统软硬件设计来进一步研究交通灯得内部结构。
最重要得就是将学习到得DSP系统得组成与原理应用到交通灯得设计当中。
通过《DSP技术及应用》课程设计,就是学生能够将学到得DSP系统得组成与原理用到具体得实际系统中,加深对DSP系统得理解,就是将该门课程与实际问题相连接得关键步骤。
通过课程设计,能够提高学生分析问题,解决问题,从而运用所学知识解决实际问题得能力,并培养基本得、良好得软硬件射进能力。
1.2设计要求
利用C语言在CCS环境中编写一个交通灯综合控制程序,并能通过硬件仿真对所编写得程序及其应用性、可行性进行验证。
1.3设计思路简介
在TMS320C54x系统开发环境CCS(CodeposerStudio)下对交通灯综合控制得实现原理进行讨论。
通过实验仿真,可以在硬件实验箱上瞧到对交通灯得模拟控制。
交通等综合控制得控制原理
1.4交通灯控制要求
利用ICETEK-S60实验箱提供得设备,设计模拟实际生活中十字路口交通灯控制得程序。
要
求如下:
-交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通得控制:
绿灯信号
表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。
-计时显示:
液晶屏幕上8×8点阵显示0-9计数。
-正常交通控制信号顺序:
正常交通灯信号自动变换:
⑴南北方向绿灯,东西红灯(20秒)。
⑵南北方向绿灯闪烁。
⑶南北方向黄灯。
⑷南北方向红灯,东西方向黄灯。
⑸东西方向绿灯(20秒)。
⑹东西方向绿灯闪烁。
⑺东西方向黄灯。
⑻返回⑴循环控制。
-紧急情况处理:
模仿紧急情况(重要车队通过、急救车通过等)发生时,交通警察手动控制
⑴当任意方向通行剩余时间多于10秒,将时间改成10秒。
⑵正常变换到四面红灯(20秒)。
⑶直接返回正常信号顺序得下一个通行信号(跳过闪烁绿灯、黄灯状态)。
1.5交通灯模拟
利用ICETEK-CTR上得一组发光二极管(共12只,分为东西南北四组、红黄绿三色)得亮
灭实现交通信号得模拟。
发光二极管得控制方法可参见第二部分、第二章、二、2。
1.6计时
使用TMS320VC5416DSP片上定时器,定时产生时钟计数,再利用此计数对应具体时间。
定时器控制及中断编程可参考实验3、3程序。
1.7紧急情况
利用ICETEK-CTR上键盘产生外中断,中断正常信号顺序,模拟突发情况。
外中断编程控制可参考实验3、4程序。
1.8程序设计
根据设计要求,由于控制就是由不同得各种状态按顺序发生得,我们可以采用状态机制控制
方法来解决此问题。
这种方法就是:
首先列举所有可能发生得状态;然后将这些状态编号,按顺
序产生这些状态;状态延续得时间用程序控制。
对于突发情况,可采用在正常顺序得控制中插
入特殊控制序列得方式完成。
时钟计数:
采用250ms一次中断进行累加计数。
表格1
状态编号
信号灯状态
状态定义
保持时间(计数值,起始时间,结束时间)
计数显示
1
南北绿灯,东西红灯
statusNSGreenEWRed
20秒(160,0,159)
20-0
2
南北绿灯闪烁,东西红灯
statusNSFlashEWRed
6秒(24,160,183)
0
3
南北黄灯,东西红灯
statusNSYellowEWRed
4秒(16,184,199)
20
4
南北红灯,东西黄灯
statusNSRedEWYellow
4秒(16,200,215)
20
5
南北红灯,东西绿灯
statusNSRedEWGreen
20秒(160,216,375)
20-1
6
南北红灯,东西绿灯闪烁
statusNSRedEWFlash
6秒(24,376,399)
0
7
南北红灯,东西黄灯
statusNSRedEWYellow
4秒(16,400,415)
20
8
南北黄灯,东西红灯
statusNSYellowEWRed
4秒(16,416,431)
20
*
南北红灯,东西红灯
StatusHold
20秒(160,0,159)
20-1
其中,正常顺序每112秒(计数值448)为一个循环,状态“*”为非顺序状态。
这样,只要根据计数值就可确定当前状态,根据状态再分情况处理。
对于计数显示,当处于状态1、5、*中时需要进行倒计时,需要计算在此状态中得计数值
增量,根据增量判断就是否更新计数显示。
DSP定时器得算法原理
1.9CPU定时器得原理
本次设计主要用得就是F2812器件上得3个32位CPU定时器(TIMER0/1/2)。
其中定时器1与定时器2预留给实时操作系统使用(如DSP-BIOS),只有定时器0用户可以在应用程序中使用。
定时器功能框图如下:
1.10CPU定时寄存器原理
定时器在工作过程中,首先把周期寄存器(PRDH:
PRD)得值装入32位计数寄存器。
计数寄存器根据SYSCLKOUT时钟递减计数。
当计数寄存器等于0时,定时器中断输出产生一个中断脉冲。
(1)定时器计数寄存器(TIMERxTIM与TIMERxTIMH)
(2)定时器控制寄存器(TIMERxTCR):
使能中断,定时功能;
(3)定时器周期寄存器(TIMERxPRD):
符合条件则周期性重新装载并保存周期值
(4)定时器预定标寄存器(TIMERxTPR与TIMERxTPRH):
控制多久减1。
系统程序设计
1.11流程图
图51实验程序流程图
图52设计总流程图
设计总流程图
1.12试验程序
#include"scancode、h"
#defineSPSA0*(unsignedint*)0x38
#defineSPSD0*(unsignedint*)0x39
#defineREGISTERCLKMD(*(unsignedint*)0x58)
#defineTIM*(int*)0x24
#definePRD*(int*)0x25
#defineTCR*(int*)0x26
#defineIMR*(int*)0x0//IMR中断屏蔽寄存器
#defineIFR*(int*)0x1//IFR中断标志寄存器
#definePMST*(int*)0x1d//PMST处理器模式状态寄存器(地址1dh)
#definenStatusNSGreenEWRed160//状态1计数结束时间
#definenStatusNSFlashEWRed184
#definenStatusNSYellowEWRed200
#definenStatusNSRedEWYellow216
#definenStatusNSRedEWGreen376
#definenStatusNSRedEWFlash400
#definenStatusNSRedEWYellow1416
#definenStatusNSYellowEWRed1432
#definenTotalTime448
#definenStatusHold160
#definestatusNSGreenEWRed0
#definestatusNSFlashEWRed1
#definestatusNSYellowEWRed2
#definestatusNSRedEWYellow3
#definestatusNSRedEWGreen4
#definestatusNSRedEWFlash5
#definestatusHold6
#defineLCDDELAY1
#defineLCDCMDTURNON0x3f
#defineLCDCMDTURNOFF0x3e
#defineLCDCMDSTARTLINE0xc0
#defineLCDCMDPAGE0xb8
#defineLCDCMDVERADDRESS0x40
ioportunsignedintport3004;
//CTR扩展寄存器定义
ioportunsignedintport8000;
ioportunsignedintport8001;//8001:
读键盘扫描值,写液晶控制寄存器地址
ioportunsignedintport8002;//8002:
液晶控制寄存器地址
ioportunsignedintport8003;//8003,8004:
液晶显示数据寄存器地址
ioportunsignedintport8004;//
ioportunsignedintport8005;//8005:
发光二极管显示阵列控制寄存器地址
ioportunsignedintport8007;//8007:
发光二极管显示阵列控制寄存器地址
#defineCTRGRport8000
#defineCTRLCDCMDRport8001
#defineCTRKEYport8001
#defineCTRCLKEYport8002
#defineCTRLCDCRport8002
#defineCTRLCDLCRport8003
#defineCTRLCDRCRport8004
#defineCTRLAport8005
#defineCTRLRport8007
voidInitDSP();//void表示此函数为空类型,执行此函数后不产生函数值
voidInitTimer();
voidInitICETEKCTR();
voidinterrupttime(void);
voidinterruptxint2(void);//XINT2中断服务程序
voidSetLEDArray(intnNumber);//修改显示内容
voidRefreshLEDA