基于dsp交通信号灯详细设计 - 图文

更新时间:2024-03-28 23:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

信息与电气工程学院

DSP应用系统(三级)项目

设计说明书

(2013/2014学年第二学期)

题 目 :基于DSP设计的交通信号灯 专业班级 : 学生姓名 : 学 号: 指导教师 :

设计周数 : 2周 设计成绩 :

2014年 7月11日

目录

1. 需求分析 .................................................................................................................................... 1 2. 设计准备 .................................................................................................................................... 1

2.1. 芯片选择 ......................................................................................................................... 1 2.2. 七段码译码器CD4511 .................................................................................................. 2 2.3. Protel 99 SE软件 ........................................................................................................... 3 2.4. CCS软件 ........................................................................................................................ 3 3. 交通灯控制原理 ........................................................................................................................ 4 4. 程序流程设计 ............................................................................................................................ 5 5. 总体设计 .................................................................................................................................... 6

5.1. 硬件原理图 ..................................................................................................................... 7 5.2. 硬件设计 ......................................................................................................................... 7 5.3. 代码设计 ......................................................................................................................... 8 6. 测试结果及其分析 .................................................................................................................. 16 7. 项目设计总结 .......................................................................................................................... 16 参考文献 ........................................................................................................................................ 16

1. 需求分析

随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。如何采用合适的控制方法,最大限嚏利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规刘部门亟待解决的主要问题。而DSP是伴随着微电子学、数字信号处理技术和计算机技术等学科的发展而产生的,是体现这三个学科综合科研成果的器件。由于它特殊的结构设计,可以把数宁信号处理中的一些理论和算法实时实现,并逐步进入了控制器市场,而在计算机应用领域中得到了广泛的使用。所以本文提出了基于DSP的交通灯综合控制系统的设计。

2. 设计准备

2.1. 芯片选择

本系统所采用的是TI公司的TMS320VC5509A,TMS320VC5509A是TI公司推出的定点数字信号处理器C5000系列中的一种,TMS320VC5509A通过增加乘累加MAC单元,增强了DSP的运算能力,而且性能更好,功耗更低,是目前TMS320家族中最省电的芯片。该芯片上的资源有:16Mbitflash196k*16bitSRAM2500gateCPLD模块上留有JTAG插口,用户可以通过仿真器和CCS下载程序和进行实验; 其特点:

⑴ 其低功耗设计,比上一代C54XX器件功耗低30%左右; ⑵ 处理速度更快,双核结构,处理速度400MIPS; ⑶ 软件程序兼容C54XXDSP; ⑷ 片内存贮空间128K×16Bit; ⑸ 大容量SDRAM设计:4M×16Bit; ⑹ 2路10bit片上A/D接口;

⑺ 8Mbit扩展FLASH,存储大量固化程序和数据; ⑻ 设计有用户可以测试指示灯;

1

⑼ DSP扩展总线,包括数据、地址、I/O、控制; ⑽ 4组标准扩展连接器,为用户进行二次开发提供条件;

⑾ 具有IEEE1149.1相兼容的逻辑扫描电路,该电路仅用于测试和仿真;+5V电源输入,内部+3.3V、+1.6V电源管理;

⑿ 高保真语音接口设计,双路语音采集,每路48K/S;USB2.0接口设计;本实验实验使用实验箱上外围控制接口P0的GPIO(通用输入输出脚)来实现功能,同时使用U4四路用户可控状态开关来实现中断功能。

2.2.

七段码译码器CD4511

具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流。可直接驱动共阴LED数码管。其引脚图如图2-1,真值表如表2-1;

图2-1 CD4511引脚图

引脚功能:A0~A3:二进制数据输入端:/BI:输出消隐控制端:LE:数据锁定控制端;/LT:灯测试端;Ya~Yg:数据输出端。

表2-1 CD4511真值表

2

2.3. Protel 99 SE软件

Protel99SE是应用于Windows9X/2000/NT操作系统下的EDA设计软件,采用设计库管理模式,可以进行联网设计,具有很强的数据交换能力和开放性及3D模拟功能,是一个32位的设计软件,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作,可以设计32个信号层,16个电源--地层和16个机加工层。 功能特性:

⑴开放式集成化的设计管理体系 ⑵超强功能的、修改与编辑功能 ⑶强大的设计自动化功能 2.4.

CCS软件

CCS软件简介CCS(Code Composer Studio)代码调试器是一种合成开发环境。 它是一种针对标准TMS320调试器接口的交互式方法。CCS目前有CCS1.1, CCS1.2 和CCS2.0等三个不同时期的版本,又有CC2000 ( 针对C2XX ),CCS5000 ( 针对C54XX )和CCS6000 (针对C6X )三个不同的型号。我们所使用的是CCS50002.0的版本。 CCS5000具有以下特性: ⑴TI编译器的完全集成的环境:CCS5000目标管理系统,内建编辑器,所有的 调试和分析能力集成在一个Windows环境中。

⑵对C和DSP汇编文件的目标管理:目标编辑器保持对所有文件及相关内容的跟踪。它只对最近一次编译中改变过的文件重新编译,以节省编译时间。

⑶高集成的编辑器调整C和DSP汇编代码:CCS5000的内建编辑器支持C和汇编文件的动态语法加亮显示。使用户能很容易地阅读代码和当场发现语法错误。

⑷编辑和调试时的后台编辑:用户在使用编译器和汇编器时没有必要退出系统到DOS环境中,因为CCS5000会自动将这些工具装载在它的环境中。在其窗口中,错误会加亮显示只要双击错误就可以直接到达出错处。

⑸在含有浮点并行调试管理器(PDM)的原有的MS窗口下支持多处理器CCS5000

在 Windows95和Windows-me中支持多处理。PDM允许将命令传播给所有的或所选择的处理器。

⑹ 在任何算法点观察信号的图形窗口探针:

图形显示窗口使用户能够观察时域或频域内的信号。对于频域图,FFT在主机内执行这样就

3

可以观察所感兴趣的部分而无须改变它的DSP代码。图显示也可以同探针连接,当前显示窗口被更新时,探针被指定,这样当代码执行到达该点时,就可以迅速地观察到信号。 ⑺文件探针在算法处通过文件提取或加入信号或数据:

CCS5000允许用户从PC机读或写信号流。而不是实时的读信号,这就可以用已知的例子来仿真算法。 ⑻图形分析:

CCS5000的图形分析能力在其环境中是集成的。 ⑼在后台(系统命令)执行用户的DOS程序:

用户可以执行CCS5000中的DOS程序,并将其输出以流水方式送到CCS5000的输出 窗口。且允许用户将应用程序集成到CCS5000。 ⑽技术状态观察窗口:

CCS5000的可视窗口允许用户进入C表达式及相关变量。结构、数组、指针都能很简单地递归扩展和减少,以便进入复杂结构。 ⑾代数分解窗口

允许用户选择查看写成代数表达式的C格式,提高可读性 。 ⑿目标DSP上的帮助:

DSP结构和寄存器上的在线帮助可以使用户不必查看技术手册。 ⒀用户扩展:

扩展语言(GEL)使得用户可以将自己的菜单项加到CCS5000的菜单栏中。

3. 交通灯控制原理

交通灯分为红绿三色,东、南、两、北各一组,用灯光信号实现对交通的控制:绿灯信号表示通行,红灯禁止通行,灯光闪烁表示信号即将改变。正常的交通控制信号顺序如下:

(1)南北方向绿灯,东两红灯(20秒) (2)南北方向绿灯闪烁 (3)南北方向红灯 (4)东西方向绿灯(20秒) (5)东西方向绿灯闪烁

4

(6)返回(1)循环控制

紧急情况处理:当重要车队通过、急救车通过时,交通警察手动控制: (1)当任意方向通行剩余时间多于1秒,将时间改或10秒 (2)正常变换到四面红灯(20秒)

(3)直接返回正常信号倾序的下一个通行信号(跳过闪烁绿灯)

4. 程序流程设计

(1)根据设计要求,由于控制是由不同的各种状态按顺序发生的,我们可以采用状态机制控制方法来解决此问题。这种方法是:首先列举所有可能发生的状态;然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制,对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成。

(2)定时器的设定,VC5509A定时器是由一个4位的预定标值PSC和一个16位的减法计数的计数器TIM组成。在实际工作中首先是每经过一个周期PSC值减1,一直减到0后TIM开始减1,直到减到0后的第一个周期,计数器会向CPU发出中断请求。

(3)突发事件设置在实际交通过程中会出现突发状况,比如说有救护车或者110紧急车要通过,此时就可以通过小键盘进行突发状况模拟。通过按键进入到中断服务子程序,相当于原来先要通过的车辆在突发状况来了以后就要先让紧急车辆通过。

程序流程图如图4-1,图4-2和图4-3所示:

定时器中断服务程序入口 计数工作变量值在原基础上加键盘中断服务程序入口 设置突发事件标志 1 退出定时器中断服务程序 退出键盘中断服务程序 图4-2定时中断 图4-3 外部中断

5

开始 初始化:EMIF、CPU频率、ICKTEK—CTR、 定时器、中断控制寄存器、工作变量 根据定时器计数确定当前状态 根据当前状态设置指示灯根据当前状态设置放光二极管读取键盘输入 结束

结束

图4-1 交通灯流程图

Y N

5. 总体设计

通过外部可控开关设置外部中断,如图4-3

4-3 键盘原理图

6

5.1. 硬件原理图

使用protel 99 SE绘制原理图,如图4-4,双电源见图4-5

图4-4 主原理图

5.2.

硬件设计

图4-5 双电源原理图

通过原理图然后选择元器件,统计元器件并记录,如表4-1

表4-1 元器件表

元器件名称 红色LED灯 黄色LED灯 绿色LED灯 电阻 CD4511 共阴数码管 万用板 杜邦线 排插 数量 2个 2个 2个 13个 1个 1个 1块 20根 一排 规格 500欧姆 基座一个 不同颜色

7

利用电烙铁焊接,实际设计实物如图4-5

图4-5 焊接电路图

5.3.

代码设计

#include #include #include #include #include \

#define nStatusNSGreenEWRed 140 #define nStatusNSFlashEWRed 200 #define nStatusNSRedEWGreen 340 #define nStatusNSRedEWFlash 400 #define nTotalTime 380

//南北绿灯7s //南北闪烁3s //南北红灯7s //东西闪烁3s

8

#define statusNSGreenEWRed 0 #define statusNSFlashEWRed 1 #define statusNSRedEWGreen 2 #define statusNSRedEWFlash 3 #define statusHold 4

#define LBDS (*((unsigned int *)0x400001))

//定义LBDS的地址

#define DIPS (*(unsigned int *)0x400002) //定义拨码按键的地址

void delay(Uint32 z);

void LEDFlash(int num1,int num2); void LEDShow(int num); void INTR_init( void ); void TIMER_init(void); void LEDBuf(int num);

/*锁相环的设置*/

PLL_Config myConfig = {

0, //IAI: the PLL locks using the same process that was underway //before the idle mode was entered 1, //IOB: If the PLL indicates a break in the phase lock,

//it switches to its bypass mode and restarts the PLL phase-locking //sequence

10, //PLL multiply value; multiply 10 times

1 //Divide by 2 PLL divide value; it can be either PLL divide value //(when PLL is enabled), or Bypass-mode divide value //(PLL in bypass mode, if PLL multiply value is set to 1) };

unsigned int nTimeCount,nTimeMS,nLed,nLedMS,nOldTimeCount;

9

main() {

int nNowStatus;

ioport unsigned int *tcr0;

tcr0 = (unsigned int *)0x1002;

nTimeCount=nTimeMS=nLedMS=nLed=0; nNowStatus=0; nOldTimeCount=0;

/*初始化CSL库*/ CSL_init(); SDRAM_init();

//初始化EMIF接口

/*设置系统的运行速度为60MHz*/ PLL_config(&myConfig); /*确定方向为输出*/

GPIO_RSET(IODIR,0xFF);//1为输出 INTR_init(); TIMER_init(); while(1) {

nNowStatus=statusNSGreenEWRed;

if ( nTimeCount

else if ( nTimeCount

case statusNSGreenEWRed:

LEDShow(0x1e); //南北显示绿灯,东西显示红灯

10

break;

case statusNSFlashEWRed:

LEDFlash(0xfe); //南北绿灯闪烁显示,东西显示红灯 break;

case statusNSRedEWGreen:

LEDShow(0x53); //南北显示红灯,东西显示绿灯 break;

case statusNSRedEWFlash:

LEDFlash(0x57); //南北显示红灯,东西绿灯闪烁显示 break;

case statusHold: }

LEDShow(0x00); //当拨动按钮时显示紧急情况 break;

} }

//灯闪烁函数,num1是灯亮参数 void LEDFlash(int num1) {

int i=0,d=num1&0x40; ioport unsigned int *tcr0;

tcr0 = (unsigned int *)0x1002; for(i=0;i<3;i++) {

//当拨码拨动的时候,在闪烁的时候进入while循环,这时进入紧急状态 while((DIPS&0x01)==0) {

*tcr0=0x00f0;

11

}

LEDShow(0x00);

*tcr0 = 0x00e0;

GPIO_pinWrite(GPIO_PIN0,num1&0x1); //取传过来的数据的第一位,给东西红灯 GPIO_pinWrite(GPIO_PIN1,num1&0x4); //取传过来的数据的第三位,给东西绿灯GPIO_pinWrite(GPIO_PIN2,num1&0x8); //取传过来的数据的第四位,给南北红灯 if(d==0x40) asm(\

//判断传过来的数据的第六位。如果是

0x40,则把XF位置1;如果不是0x40则把XF位置0,给南北绿灯 }

//灯显示函数,num1是显示参数 void LEDShow(int num) {

}

else asm(\LEDBuf(12); delay(54);

GPIO_pinWrite(GPIO_PIN0,num2&0x1); GPIO_pinWrite(GPIO_PIN1,num2&0x4); GPIO_pinWrite(GPIO_PIN2,num2&0x8); if(~d==0x40) asm(\else asm(\LEDBuf(9-nLed); delay(54);

TIMER_init();

int a,b,c,d; a=num&0x1; b=num&0x4;

12

c=num&0x8; d=num&0x40;

GPIO_pinWrite(GPIO_PIN0,a); GPIO_pinWrite(GPIO_PIN1,b); GPIO_pinWrite(GPIO_PIN2,c); if(d==0x40) asm(\

else asm(\

//当把拨码的最低位向上拨动时,进入紧急状态,并且所对应的LED

LBDS=~DIPS;

灯亮 }

//数码管显示函数 void LEDBuf(int num) { }

//延迟函数,如果z=1,延迟为0.9ms void delay(Uint32 z) {

13

int a0,a1,a2,a3;

a3=num/8%2;//num取出最高位 a2=num/4%2;//num第三位 a1=num/2%2;//num第二位 a0=num%2;//num最地位

GPIO_pinWrite(GPIO_PIN7,a3);//CD4511的A3口 GPIO_pinWrite(GPIO_PIN6,a2);//CD4511的A2口 GPIO_pinWrite(GPIO_PIN4,a1);//CD4511的A1口 GPIO_pinWrite(GPIO_PIN3,a0);//CD4511的A0口

}

Uint32 k = 0,j; for(j = z;j>0;j--) { }

for(k= 0;k<0xffff;k++);

//定时器中断服务子程序 void interrupt Timer() { }

14

nTimeMS++; nLedMS++;

if ( nTimeMS>=8 )//为8时每50ms运行一次 { }

if(nLedMS==160)//为160时每1s运行一次 { }

if((9-nLed)>=3) LEDBuf(9-nLed);

nLedMS=0; nLed++; if(nLed==10)

nLed=0; nTimeMS=0; nTimeCount++; if(nTimeCount==400)

nTimeCount=0;

//中断使能初始化 void INTR_init( void ) { IVPD=0xd0; IVPH=0xd0; IER0=0x10; DBIER0 =0x10; IFR0=0xffff; asm(\

}

//定时器中断初始化 void TIMER_init(void) { ioport unsigned int *tim0; ioport unsigned int *prd0; ioport unsigned int *tcr0; ioport unsigned int *prsc0; tim0 = (unsigned int *)0x1000; prd0 = (unsigned int *)0x1001; tcr0 = (unsigned int *)0x1002; prsc0 = (unsigned int *)0x1003; *tcr0 = 0x04f0; *tim0 =0 ; *prd0 = 49999;

*prsc0 = 11; //定时6ms *tcr0=0x00e0; //开启定时中断

}

15

6. 测试结果及其分析

通过在TMS320VC5509A实验箱上进行测试,安装试验箱驱动并设置为emulator启动软件,将对应引脚连接到LED灯及CD4511引脚上面,编译并构建后,如果有错误修改后再rebuild,最后load program!验证程序的顺序是否达到实验要求,最后根据要求可以将实验板上的用户可控开关打开,变成紧急通信状态再验证程序可行性。该系统的优点在于利用了DSP的快速处理能力,同时在程序中运用中断来进行控制交通灯的工作顺序及时间,从而很好的实现了交通灯的功能。

7. 项目设计总结

通过本次CDIO三级设计dsp交通信号灯,了解到dsp设计的方法及器件选择的重要性。每一个程序的设计都离不开分析过程,只有好的分析过程才有好的程序,流程图的设计过程尤为重要,完全决定了后面程序设计的好坏和整个程序的逻辑思路。同时,也为下次课程设计打下好的基础,更加明白和单片机之间的区别,将书本上不明白的知识,经过此次设计后更加融会贯通。

整个课程设计中团队合作的重要性尤为重要,再总体的要求下有时大家分工合作,自己完成自己的部分,比如设计原理,电路焊接,软件编译等都需要不止一个人才能完成的任务。而有时碰见难题时大家可以集中在一起商讨解决方案,毕竟每个人的思路都不一致,这样总有解决的方案,三个臭皮匠也定个诸葛亮。

整个项目的重点就是关于c程序的编写,其中尤为重要的是定时中断的设计,这是和单片机完全不一样的设计方法,时钟中断和外部中断的地址、asm和cmd文件配置好尤为重要。其次要有个清晰的思路,这一步完成之后下一步需要做什么,都很重要。

参考文献

[1]汪春梅,孙洪波,任冶刚.T M S320C 5000 系列 D SP 系统设计与开发实 [M].北京:电子工业出版社 ,2004.

[2],J IC E T EK —V C 5509一A 评估板硬件使用指导[M].

[3],戴明桢,周建江. TMS320C54X DSP 结构、原理及应用[M]. 北京:北京航空航天大学出版社,2002,3

16

项目设 计评语 项目设 计成绩

指导教师 (签字) 年 月 日 17

本文来源:https://www.bwwdw.com/article/gokr.html

Top