基于DSP实现道路交通灯控制系统设计.docx

上传人:b****6 文档编号:3312864 上传时间:2022-11-21 格式:DOCX 页数:24 大小:199.33KB
下载 相关 举报
基于DSP实现道路交通灯控制系统设计.docx_第1页
第1页 / 共24页
基于DSP实现道路交通灯控制系统设计.docx_第2页
第2页 / 共24页
基于DSP实现道路交通灯控制系统设计.docx_第3页
第3页 / 共24页
基于DSP实现道路交通灯控制系统设计.docx_第4页
第4页 / 共24页
基于DSP实现道路交通灯控制系统设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

基于DSP实现道路交通灯控制系统设计.docx

《基于DSP实现道路交通灯控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于DSP实现道路交通灯控制系统设计.docx(24页珍藏版)》请在冰豆网上搜索。

基于DSP实现道路交通灯控制系统设计.docx

基于DSP实现道路交通灯控制系统设计

 

基于DSP实现道路交通灯控制系统设计

摘要:

DSP数字信号处理,是一门涉及多学科而又广泛应用于许多领域的新兴学科。

随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速发展.数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法。

本次设计是基于dsp原理设计交通灯控制系统软硬件系统,利用发光二极管亮灭模拟交通信号,数码管倒计时时间,利用TMS320F2812DSP片上定时器产生时钟计数,设计模拟实际生活中的十字路口交通灯.

关键字:

DSP;TMS320F2812;发光二极管;交通灯;

Abstract:

DSPdigitalsignalprocessing,isamultidisciplinaryandwidelyappliedinmanyfieldsoftheemergingdiscipline.Alongwiththecomputerandtherapiddevelopmentofinformationtechnology,digitalsignalprocessingtechnologytoemergeasthetimesrequireanddeveloprapidly。

Digitalsignalprocessingisthroughtheuseofamathematicalskillstoperformtheconversionorextractionofinformation,todealwithrealsignalmethod.ThedesignisbasedontheprincipleofDSPdesignoftrafficlightcontrolsystemsoftwareandhardwaresystem,usinglight—emittingdiodestoeliminatesimulatedtrafficsignalcountdowntime,digitaltube,theuseofTMS320F2812DSPon—chiptimergeneratesaclockcounting,designedtosimulatetheactuallifeofthecrossroadstrafficlights。

Keyword:

DSP;TMS320F2812;lightemittingdiode;trafficlights;

1引言

交通是经济、社会发展的基础性产业,是社会、经济活动中人流、物流、资金流和信息

流的主要流动方式.现代社会中,如果没有高效运转的交通运输体系,就不可能有经济的持续发展.然而,随着社会经济的发展,机动车辆迅速增加,人们在赚取由机动车辆所带来的巨额利润以及充分享受汽车带来的巨大便利的同时,越来越被交通拥堵、交通事故频发、环境污染加剧和燃油损耗上升等诸多问题所困扰。

随着交通的不断发展和汽车化进程的加快,交通拥挤加剧,交通事故频发,交通环境恶化,已经成为引人注目的城市问题之一。

交通问题不仅在发展中国家,就在发达国家也是一个令人困扰的严重问题。

众所周知,缓解交通拥挤的最直接和最有效办法是提高路网的通信能力.但无论哪个国家的大城市,不可能无限制地修建道路,不论是资金因素还是土地因素,都限制了道路的无节制增长.因此,无限制地修建道路难满足日益增长的交通需求。

与此同时,通过限制车辆增加削减交通需求也受到客观因素的制约而无法取得满意的结果。

事实上,由于交通系统是一个相当复杂的大系统,无论单独从车辆方面考虑还是从道路方面考虑,都很难从根本上解决问题.

道路交通系统是一个地区、一个城市的主要组成部份,这个系统的运行状况如何,直接反映了一个地区、一个城市的现代化管理水平.在这一系统中,道路不仅仅是易变化的部分,而其它组成部分则存在着较大的可变性和随机性.只有对这一系统的组成及其运行机理进行科学客观的分析研究,对能制定出科学有效的管理和控制对策,从而保障系统的有效运行。

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;

elseif(nTimeCount〈nStatusNSFlashEWRed)nNowStatus=statusNSFlashEWRed;

elseif(nTimeCount

elseif(nTimeCount〈nStatusNSRedEWYellow)nNowStatus=statusNSRedEWYellow;

elseif(nTimeCount〈nStatusNSRedEWGreen)nNowStatus=statusNSRedEWGreen;

elseif(nTimeCount〈nStatusNSRedEWFlash)nNowStatus=statusNSRedEWFlash;

elseif(nTimeCount

elseif(nTimeCount

if(nNowStatus==nOldStatus)

switch(nNowStatus)

{

casestatusNSFlashEWRed:

nWork1=nTimeCount—nStatusNSGreenEWRed;

nWork2=nStatusNSYellowEWRed—nStatusNSFlashEWRed;

nWork3=nWork2/3;

nWork4=nWork3/2;

if(nWork1>=0&&nWork2〉0&&nWork3〉0&&nWork4〉0)

uLightStatusSN=((nWork1%nWork3)<=nWork4)?

(0x49):

(0x40);

break;

casestatusNSRedEWFlash:

nWork1=nTimeCount—nStatusNSRedEWGreen;

nWork2=nStatusNSRedEWYellow1-nStatusNSRedEWFlash;

nWork3=nWork2/3;

nWork4=nWork3/2;

if(nWork1〉=0&&nWork2>0&&nWork3〉0&&nWork4〉0)

uLightStatusEW=((nWork1%nWork3)〈=nWork4)?

(0x09):

(0x00);

break;

casestatusNSGreenEWRed:

nWork1=nStatusNSGreenEWRed/20;

if(nWork1>0)

nWork2=20-nTimeCount/nWork1;

if(bHold)

if(nWork2〉10)

nTimeCount=nWork1*10;

nWork2=10;

if(nOldTimeCount!

=nWork2)

nOldTimeCount=nWork2;

SetLEDArray(nWo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1