基于某DSP实现道路交通灯控制系统设计Word下载.docx
- 文档编号:8649250
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:22
- 大小:245.62KB
基于某DSP实现道路交通灯控制系统设计Word下载.docx
《基于某DSP实现道路交通灯控制系统设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于某DSP实现道路交通灯控制系统设计Word下载.docx(22页珍藏版)》请在冰点文库上搜索。
事实上,由于交通系统是一个相当复杂的大系统,无论单独从车辆方面考虑还是从道路方面考虑,都很难从根本上解决问题。
道路交通系统是一个地区、一个城市的主要组成部份,这个系统的运行状况如何,直接反映了一个地区、一个城市的现代化管理水平。
在这一系统中,道路不仅仅是易变化的部分,而其它组成部分则存在着较大的可变性和随机性。
只有对这一系统的组成及其运行机理进行科学客观的分析研究,对能制定出科学有效的管理和控制对策,从而保障系统的有效运行。
2项目设计实现功能
2.1交通灯控制要求
交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通的控制:
绿灯信号表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。
计时显示:
液晶屏幕上8×
8点阵显示0-9计数。
正常交通控制信号顺序:
正常交通灯信号自动变换:
⑴南北方向绿灯,东西红灯(20秒)。
⑵南北方向绿灯闪烁。
⑶南北方向黄灯。
⑷南北方向红灯,东西方向黄灯。
⑸东西方向绿灯(20秒)。
⑹东西方向绿灯闪烁。
⑺东西方向黄灯。
⑻返回⑴循环控制。
紧急情况处理:
模仿紧急情况(重要车队通过、急救车通过等)发生时,交通警察手动控制
⑴当任意方向通行剩余时间多于10秒,将时间改成10秒。
⑵正常变换到四面红灯(20秒)。
⑶直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)。
2.2液晶显示器控制
本次设计使用ICETEK-F2812-A板,ICETEK-F2812-A是一块以TMS320F2812DSP为核心的DSP扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。
液晶显示模块的访问、控制是由2812DSP对扩展扩展接口的操作完成。
控制扩展口的寻址:
命令控制扩展接口的地址为0x108001,数据控制扩展接口的地址为0x108003和0x108004,辅助控制扩展接口的地址为0x108002。
可以观察到液晶显示从0到9的计数。
灵活使用控制字,可以实现复杂多变的显示。
当使用点阵图形显示时需要在DSP内存中建立图形存储缓冲;
适当更新显示可取得动画效果。
在实际生活中观察点阵显示的霓虹灯广告、交通指示牌、报站牌等领会这种控制的具体应用。
3项目实现方案
3.1项目设计整体思路
根据DSP的硬件中断、定时器、I/O访问原理。
用定时器定时。
用I/O口控制红绿黄灯的开关,用硬件中断模拟紧急情况发生(如:
急救车,消防车)。
有紧急情况发生,两向全红,以便让紧急车通过。
紧急车通过后,交通的恢复中断前的状态。
3.2设计原理
3.2.1CPU定时器原理
F2810/F2812芯片内部有3个32位CPU定时器(TIMER0/1/2),其中定时器1和定时器2预留给实时操作系统使用(如DSPBIOS),只有CPU定时器0用户可以在应用程序中使用。
定时器功能框图如下:
在F281x芯片中,向CPU申请中断的定时器中断信号(TINT0、TINT1及TINT2)连接方式如下图:
为保证定时器正常,需要进行一下操作:
首先将计数值写入32位计数寄存器(TIMH:
TIM)内,该计数值放在周期寄存器(PRDH:
PRD)中;
然后按SYSCLOCKOUT的频率对计数值进行减计数。
当计数器的值计到0时,定时器会产生一个中断脉冲输出。
3.2.2DSP外设中断扩展模块
2812的CPU为了能够及时有效的处理好各个外设的中断请求,设计了一个专门处理外设中断的扩展模块(thePeripheralInterruptExpansionblock),叫做外设中断控制器PIE,它能够对各种中断请求源(例如来自于外设或者其他外部引脚的请求)做出判断以及相应的决策。
PIE可以支持96个不同的中断,这些中断分成了12个组,每个组有8个中断,而且每个组都被反馈到CPU内核的12条中断线中的某一条上(INT1-INT12)。
PIE目前只使用了96个终端中的45个,其他的等待将来的功能扩展。
2812的中断是3级中断机制,分别是外设级,PIE级以及CPU级,对于某一个具体的外设中断请求,任意一级的不许可,CPU最终都不会执行该外设中断。
3.2.3发光二极原理
显示/控制模块上的发光二极管是由连接在F2812DSP扩展扩展接口上的寄存器EWR和SNR控制的。
这两个寄存器均为6位寄存器,其位定义见下表:
两个寄存器的地址均映射到F2812DSP的扩展空间,地址为108007H,DSP通过对扩展区域该地址的写操作来修改两个寄存器上各位的状态,当寄存器某位取‘1’值时,相应指示灯被点亮,取‘0’值则熄灭。
当写入108007H的数据(8位有效值)的高两位为‘00’时,数据的低6位将写入EWR寄存器;
当高两位的值为‘01’时,写入SNR寄存器。
3.2.4TMS320F28xDSP的I/O
TMS320F28xDSP的I/O空间大部分被保留用于外部扩展。
在扩展时一般将带有控制能的寄存器或分离地址访问的存储单元的地址映射到I/O空间,访问这部分的单元又称I/O端口访问。
例如:
可将控制指示灯组的寄存器或锁存器映射到一个I/O端口地址上;
A/D、D/A等专用芯片控制端和状态寄存器也常映射到I/O端口上。
总之,在I/O空间中扩展的设备一般重点用于控制,而使用大片连续存储空间的存储器单元一般映射到数据空间。
ICETEK-F2812-A板将指示灯、DIP开关、A/D和D/A的控制端等映射在I/O空间。
在程序中,访问I/O端口的语句较为简单。
3.2.5液晶显示器控制原理
显示开关:
0x3f打开显示;
0x3e关闭显示;
设置显示起始行:
0x0c0+起始行取值,其中起始行取值为0至63;
设置操作页:
0x0b8+页号,其中页号取值为0-7;
设置操作列:
0x40+列号,其中列号为取值为0-63;
写显示数据:
在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入液晶显示模块的缓存。
将数据发送到相应数据控制扩展接口即可。
液晶显示器与DSP的连接:
数据信号的传送:
由于液晶显示模块相对运行在8MHz主频下的DSP属于较为慢速设备,连接时需要考虑数据线上信号的等待问题;
电平转换:
由于DSP为3.3V设备,而液晶显示模块属于5V设备,所以在连接控制线、数据线时需要加电平隔离和转换设备。
4程序设计
4.1程序总体设计
1根据设计要求,由于控制是由不同的各种状态按顺序发生的,我们可以采用状态机制控制方法来解决此问题。
这种方法是:
首先列举所有可能发生的状态;
然后将这些状态编号,按顺序产生这些状态;
状态延续的时间用程序控制,对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成。
2定时器的设定,VC5509A定时器是由一个4位的预定标值PSC和一个16位的减法计数的计数器TIM组成。
在实际工作中首先是每经过一个周期PSC值减1,一直减到0后TIM开始减1,直到减到0后的第一个周期,计数器会向CPU发出中断请求。
3突发事件设置,在实际交通过程中会出现突发状况,比如说有救护车或者110紧急车要通过,此时就可以通过小键盘进行突发状况模拟。
通过按键进入到中断服务子程序,相当于原来先要通过的车辆在突发状况来了以后就要先让紧急车辆通过。
4.2程序编写(见附页)
5心得体会
随着信息技术的飞速发展,数字信号处理技术已逐渐发展成为一门主流技术,它在电子信息,通信,软件无线电,制动控制,仪表仪器,信息家电等高科技领域得到了越来越广泛的应用。
数字信号处理器由于运算速度快,具有可编程特性和接口灵活的特点,使的它在许多电子产品的研制,开发与应用中,发挥着越来越重要的作用。
采用DSP芯片来实现数字信号处理系统更是当前的发展趋势。
通过做基于DSP的交通灯的设计,进一步熟悉DSP芯片及其开发环境CCS的功能。
同时对当前交通控制的现状有了进一部的了解。
为以后的学习打下了坚实的基础。
随着科学技术的发展及各门学科的相互融合,DSP将有更为广阔的应用前景。
交通控制也会更智能,为人们的出行提供更多的便利。
附页
#include"
scancode.h"
#defineSPSA0*(unsignedint*)0x38
#defineSPSD0*(unsignedint*)0x39
#defineREGISTERCLKMD(*(unsignedint*)0x58)
#defineTIM*(int*)0x24
#definePRD*(int*)0x25
#defineTCR*(int*)0x26
#defineIMR*(int*)0x0
#defineIFR*(int*)0x1
#definePMST*(int*)0x1d
#definenStatusNSGreenEWRed160
#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;
ioportunsignedintport8002;
ioportunsignedintport8003;
ioportunsignedintport8004;
ioportunsignedintport8005;
ioportunsignedintport8007;
#defineCTRGRport8000
#defineCTRLCDCMDRport8001
#defineCTRKEYport8001
#defineCTRCLKEYport8002
#defineCTRLCDCRport8002
#defineCTRLCDLCRport8003
#defineCTRLCDRCRport8004
#defineCTRLAport8005
#defineCTRLRport8007
voidInitDSP();
voidInitTimer();
voidInitICETEKCTR();
voidinterrupttime(void);
voidinterruptxint2(void);
//XINT2中断服务程序
voidSetLEDArray(intnNumber);
//修改显示内容
voidRefreshLEDArray();
//刷新显示
voidEndICETEKCTR();
voidTurnOnLCD();
voidLCDCLS();
voidDelay(unsignedintnDelay);
unsignedintuWork,nTimeCount;
unsignedintuLightStatusEW,uLightStatusSN;
unsignedintbHold;
unsignedcharledbuf[8],ledx[8];
unsignedcharled[40]=
{
0x7E,0x81,0x81,0x7E,0x00,0x02,0xFF,0x00,
0xE2,0x91,0x91,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
};
unsignedcharledkey[10][8]=
{0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00},//0
{0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00},//1
{0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00},//2
{0x00,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()
intnWork1,nWork2,nWork3,nWork4,tKey;
intnNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus;
unsignedintnScanCode;
nTimeCount=0;
bHold=0;
uLightStatusEW=uLightStatusSN=0;
nNowStatus=0;
nOldStatus=1;
nOldTimeCount=0;
InitDSP();
//初始化DSP,设置运行速度
InitICETEKCTR();
//初始化显示/控制模块
InitTimer();
//设置定时器中断
//根据计时器计数切换状态
//根据状态设置计数和交通灯状态
while
(1)
{
if(bHold&
&
nNowStatus==statusHold)
{
if(nTimeCount>
=nStatusHold)
{
nNowStatus=nSaveStatus;
nTimeCount=nSaveTimeCount;
bHold=0;
}
}
elseif(nTimeCount<
nStatusNSGreenEWRed)nNowStatus=statusNSGreenEWRed;
nStatusNSFlashEWRed)nNowStatus=statusNSFlashEWRed;
nStatusNSYellowEWRed)nNowStatus=statusNSYellowEWRed;
nStatusNSRedEWYellow)nNowStatus=statusNSRedEWYellow;
nStatusNSRedEWGreen)nNowStatus=statusNSRedEWGreen;
nStatusNSRedEWFlash)nNowStatus=statusNSRedEWFlash;
nStatusNSRedEWYellow1)nNowStatus=statusNSRedEWYellow;
nStatusNSYellowEWRed1)nNowStatus=statusNSYellowEWRed;
if(nNowStatus==nOldStatus)
switch(nNowStatus)
casestatusNSFlashEWRed:
nWork1=nTimeCount-nStatusNSGreenEWRed;
nWork2=nStatusNSYellowEWRed-nStatusNSFlashEWRed;
nWork3=nWork2/3;
nWork4=nWork3/2;
if(nWork1>
=0&
nWork2>
0&
nWork3>
nWork4>
0)
uLightStatusSN=((nWork1%nWork3)<
=nWork4)?
(0x49):
(0x40);
break;
casestatusNSRedEWFlash:
nWork1=nTimeCount-nStatusNSRedEWGreen;
nWork2=nStatusNSRedEWYellow1-nStatusNSRedEWFlash;
uLightStatusEW=((nWork1%nWork3)<
(0x09):
(0x00);
casestatusNSGreenEWRed:
nWork1=nStatusNSGreenEWRed/20;
{
nWork2=20-nTimeCount/nWork1;
if(bHold)
{
if(nWork2>
10)
{
nTimeCount=nWork1*10;
nWork2=10;
}
}
if(nOldTimeCount!
=nWork2)
nOldTimeCount=nWork2;
SetLEDA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DSP 实现 道路 交通灯 控制系统 设计