基于.DSP实现道路交通灯控制系统设计_第1页
基于.DSP实现道路交通灯控制系统设计_第2页
基于.DSP实现道路交通灯控制系统设计_第3页
基于.DSP实现道路交通灯控制系统设计_第4页
基于.DSP实现道路交通灯控制系统设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

...wd......wd......wd...1引言12工程设计实现功能22.1交通灯控制要求22.2液晶显示器控制33工程实现方案33.1工程设计整体思路33.2设计原理53.2.1CPU定时器原理53.2.2DSP外设中断扩展模块63.2.3发光二极原理63.2.4TMS320F28xDSP的I/O73.2.5液晶显示器控制原理84程序设计84.1程序总体设计84.2程序编写〔见附页〕95心得体会9附页10基于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/OTMS320F28xDSP的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程序总体设计根据设计要求,由于控制是由不同的各种状态按顺序发生的,我们可以采用状态机制控制方法来解决此问题。这种方法是:首先列举所有可能发生的状态;然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制,对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成。定时器的设定,VC5509A定时器是由一个4位的预定标值PSC和一个16位的减法计数的计数器TIM组成。在实际工作中首先是每经过一个周期PSC值减1,一直减到0后TIM开场减1,直到减到0后的第一个周期,计数器会向CPU发出中断请求。突发事件设置,在实际交通过程中会出现突发状况,比方说有救护车或者110紧急车要通过,此时就可以通过小键盘进展突发状况模拟。通过按键进入到中断服务子程序,相当于原来先要通过的车辆在突发状况来了以后就要先让紧急车辆通过。4.2程序编写〔见附页〕5心得体会随着信息技术的飞速开展,数字信号处理技术已逐渐开展成为一门主流技术,它在电子信息,通信,软件无线电,制动控制,仪表仪器,信息家电等高科技领域得到了越来越广泛的应用。数字信号处理器由于运算速度快,具有可编程特性和接口灵活的特点,使的它在许多电子产品的研制,开发与应用中,发挥着越来越重要的作用。采用DSP芯片来实现数字信号处理系统更是当前的开展趋势。通过做基于DSP的交通灯的设计,进一步熟悉DSP芯片及其开发环境CCS的功能。同时对当前交通控制的现状有了进一部的了解。为以后的学习打下了坚实的根基。随着科学技术的开展及各门学科的相互融合,DSP将有更为广阔的应用前景。交通控制也会更智能,为人们的出行提供更多的便利。附页#include"scancode.h"#defineSPSA0*(unsignedint*)0x38#defineSPSD0*(unsignedint*)0x39#defineREGISTERCLKMD(*(unsignedint*)0x58)#define TIM *(int*)0x24#define PRD*(int*)0x25#define TCR *(int*)0x26#define IMR *(int*)0x0#define IFR *(int*)0x1 #define PMST *(int*)0x1d #definenStatusNSGreenEWRed160#definenStatusNSFlashEWRed184#definenStatusNSYellowEWRed200#definenStatusNSRedEWYellow216#definenStatusNSRedEWGreen376#definenStatusNSRedEWFlash400#definenStatusNSRedEWYellow1416#definenStatusNSYellowEWRed1432#definenTotalTime448#definenStatusHold160#definestatusNSGreenEWRed0#definestatusNSFlashEWRed1#definestatusNSYellowEWRed2#definestatusNSRedEWYellow3#definestatusNSRedEWGreen4#definestatusNSRedEWFlash5#definestatusHold6#defineLCDDELAY1#defineLCDCMDTURNON0x3f#defineLCDCMDTURNOFF0x3e#defineLCDCMDSTARTLINE0xc0#defineLCDCMDPAGE0xb8#defineLCDCMDVERADDRESS0x40ioportunsignedintport3004;//CTR扩展存放器定义ioportunsignedintport8000;ioportunsignedintport8001;ioportunsignedintport8002;ioportunsignedintport8003;ioportunsignedintport8004;ioportunsignedintport8005;ioportunsignedintport8007;#defineCTRGRport8000#defineCTRLCDCMDRport8001#defineCTRKEYport8001#defineCTRCLKEYport8002#defineCTRLCDCRport8002#defineCTRLCDLCRport8003#defineCTRLCDRCRport8004#defineCTRLAport8005#defineCTRLRport8007voidInitDSP();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<nStatusNSYellowEWRed) nNowStatus=statusNSYellowEWRed; elseif(nTimeCount<nStatusNSRedEWYellow) nNowStatus=statusNSRedEWYellow; elseif(nTimeCount<nStatusNSRedEWGreen) nNowStatus=statusNSRedEWGreen; elseif(nTimeCount<nStatusNSRedEWFlash) nNowStatus=statusNSRedEWFlash; elseif(nTimeCount<nStatusNSRedEWYellow1) nNowStatus=statusNSRedEWYellow; elseif(nTimeCount<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>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(nWork2); } } break; casestatusNSRedEWGreen: nWork1=(nStatusNSRedEWGreen-nStatusNSRedEWYellow)/20; if(nWork1>0) { nWork2=20-(nTimeCount-nStatusNSRedEWYellow)/nWork1; if(bHold){ if(nWork2>10) { nTimeCount=nStatusNSRedEWYellow+nWork1*10; nWork2=10; } } if(nOldTimeCount!=nWork2) { nOldTimeCount=nWork2; SetLEDArray(nWork2); } } break; casestatusHold: nWork1=nStatusHold/20; if(nWork1>0) { nWork2=20-nTimeCount/nWork1; if(nOldTimeCount!=nWork2) { nOldTimeCount=nWork2; SetLEDArray(nWork2); } } break; } } else { if(bHold) { nSaveStatus=nNowStatus; nSaveTimeCount=nTimeCount; nNowStatus=statusHold; nTimeCount=0; if(nSaveStatus==statusNSFlashEWRed||nSaveStatus==statusNSYellowEWRed) { nSaveStatus=statusNSRedEWGreen; nSaveTimeCount=nStatusNSRedEWYellow; } elseif(nSaveStatus==statusNSRedEWFlash||nSaveStatus==statusNSRedEWYellow) { nSaveStatus=statusNSGreenEWRed; nSaveTimeCount=0; } } nOldStatus=nNowStatus; switch(nNowStatus) { casestatusNSGreenEWRed: uLightStatusEW=0x24;uLightStatusSN=0x49; SetLEDArray(20); break; casestatusNSFlashEWRed: uLightStatusEW=0x24;uLightStatusSN=0x49; SetLEDArray(0);break; casestatusNSYellowEWRed: uLightStatusEW=0x24;uLightStatusSN=0x52; SetLEDArray(20); break; casestatusNSRedEWYellow: uLightStatusEW=0x12;uLightStatusSN=0x64; SetLEDArray(20); break; casestatusNSRedEWGreen: uLightStatusEW=0x09;uLightStatusSN=0x64; SetLEDArray(20); break; casestatusNSRedEWFlash: uLightStatusEW=0x09;uLightStatusSN=0x64; SetLEDArray(0); break; casestatusHold: uLightStatusEW=0x24;uLightStatusSN=0x64; SetLEDArray(20); break; } } CTRLR=uLightStatusEW;CTRLR=uLightStatusSN; //设置交通灯状态 RefreshLEDArray(); //刷新发光二极管显示 nScanCode=port8001; //读键盘扫描码 nScanCode&=0x0ff; tKey=CTRCLKEY; if(nScanCode==SCANCODE_9) break; } EndICETEKCTR(); exit(0);}//定时器中断服务程序,进展时钟计数voidinterrupttime(void){ nTimeCount++; nTimeCount%=nTotalTime;}//设置发光二极管显示内容voidSetLEDArray(intnNumber){inti,ShowNumber;ShowNumber=nNumber/2;if(ShowNumber>9)ShowNumber=0; CTRLCDCMDR=LCDCMDPAGE; //设置操作页=0 Delay(LCDDELAY); CTRLCDCR=0; Delay(LCDDELAY); CTRLCDCMDR=LCDCMDVERADDRESS; //起始列=0 Delay(LCDDELAY); CTRLCDCR=0; Delay(LCDDELAY); for(i=0;i<8;i++) {CTRLCDLCR=ledkey[ShowNumber][i]; Delay(LCDDELAY); CTRLCDCR=0; Delay(LCDDELAY); }}//将缓存中点阵送发光二极管显示voidRefreshLEDArray(){ inti; for(i=0;i<8;i++) { CTRGR=ledx[i]; CTRLA=ledbuf[i]; }}//初始化DSP,设置运行速度=8MHzvoidInitDSP(){ REGISTERCLKMD=0; //复位PLL REGISTERCLKMD=0x1007; //速度设置=16MHz}//设置定时器参数、允许中断voidInitTimer(){ unsignedintk; asm(" ssbx INTM"); //关中断,进展关键设置时不许打搅 //设置通用定时器 k=PMST; //设置PMST存放器 PMST=k&0xff; //中断向量表起始地址=80H IMR=0x0c; //使能TINT TCR=0x41f; //预分频系数为16 TIM=0; //时钟计数器清0 PRD=0x0f423; //周期存放器为0ffH TCR=0x42f; //复位、启动 IFR=0x0c; //清中断标志位 port3004=0; //使能XINT2 asm(" rsbx INTM"); //开中断}//初始化ICETEK-CTR板上设备voidIn

温馨提示

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

评论

0/150

提交评论