ARM交通灯模拟控制程序设计.docx
- 文档编号:24710371
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:24
- 大小:171.37KB
ARM交通灯模拟控制程序设计.docx
《ARM交通灯模拟控制程序设计.docx》由会员分享,可在线阅读,更多相关《ARM交通灯模拟控制程序设计.docx(24页珍藏版)》请在冰豆网上搜索。
ARM交通灯模拟控制程序设计
目录
1选题背景1
2相关内容及原理1
3设计方案2
3.1设计思路2
3.2总体设计框图2
4硬件设计3
4.1LPC2103芯片介绍及设计3
4.2LPC2103芯片最小系统硬件设计4
4.3系统电源电路设计4
4.4晶振与复位电路4
4.5LED循环显示设计5
4.6数码管倒计时显示硬件设计6
4.7蜂鸣器设计7
5软件设计7
5.1交通灯控制软件流程图7
5.2ARM交通灯模拟控制程序设计8
6运行测试结果9
7设计心得体会及总结10
参考文献12
附录13
1选题背景
交通信号灯指挥着人和各种车辆的安全运行,实现红、黄、绿灯的自动指挥是城乡交通管理现代化的重要课题。
在城乡街道的十字交叉路口,为了保证交通秩序和行人安全,在每条道路上各有一组红、黄、绿交通信号灯,其中红灯亮,表示该条道路禁止通行;黄灯亮,表示该条道路上未过停车线的车辆停止通行,已过停车线的车辆继续通行;绿灯亮,表示该条道路允许通行。
交通灯控制电路自动控制十字路口两组红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行,实现十字路口城乡交通管理自动化。
随着移动设备的流行和发展,嵌入式系统已经成为一个热点。
它并不是最近出现的新技术,只是随着微电子技术和计算机技术的发展,微控制芯片功能越来越大,而嵌入微控制芯片的设备和系统越来越多,从而使得这种技术越来越引人注目。
它对软硬件的体积大小、成本、功耗和可靠性都提出了严格的要求。
嵌入式系统的功能越来越强大,实现也越来越复杂,随之出现的就是可靠性大大降低。
最近的一种趋势是一个功能强大的嵌入式系统通常需要一种操作系统来给予支持,这种操作系统是已经成熟并且稳定的,可以是嵌入式的Linux,WINCE等等。
本文为了实现交通道路的管理,力求交通管理先进性、科学化。
分析应用了嵌入式实现智能交通灯管制的控制系统,以及该系统软、硬件设计方法,实验证明该系统实现简单、经济,能够有效地疏导交通,提高交通路口的通行能力。
本文所要研究的就是基于ARM嵌入式系统的交通灯系统的设计与实现。
本设计采用了32位ARM微处理器LPC2103作为核心处理器。
2相关内容及原理
通过设计,培养自己综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练,加深对ARM芯片的了解;熟悉ARM芯片各个引脚的功能,工作方式,计数/定时,I/O口,中断等相关原理,巩固学习嵌入式的相关内容知识。
利用ARM芯片模拟实现交通灯控制。
自行选择所需ARM芯片,查阅相关文献资料,熟悉所选ARM芯片,了解所选ARM芯片各个引脚功能,工作方式,计数/定时,I/O口,中断等相关原理,通过软硬件设计实现利用ARM芯片完成交通灯的模拟控制。
3设计方案
3.1设计思路
利用LPC2103ARM芯片实现单路交通灯的控制:
a实现红、绿、黄灯的循环控制。
使用红、黄、绿三种不同颜色的LED灯实现此功能,由南往北方向红、黄、绿三个灯依次接在P1.18、P1.19、P1.20上,由北往南方向的红、黄、绿三个灯依次接在P1.21、P1.22、P1.23上,人行道用红、绿两个灯控制,依次接在P1.24、P1.25上,用软件控制灯的亮与灭来控制车辆和行人的通行。
b用数码管显示倒计时。
可以利用动态显示或静态显示,串行并出或者并行并出实现。
c南北方向控制车辆的绿灯熄灭的同时,控制蜂鸣器响2秒来作为警报。
蜂鸣器接P0.7引脚。
交通路口示意图如图3-1车辆遇到红灯停绿灯行的行走情况,红绿灯时间均为60s,切换时间为10s,最后5s为黄灯闪烁。
图3-1交通路口示意图
3.2总体设计框图
用ARM7系列芯片LPC2103作为系统的主控芯片,控制交通灯的循环点亮并显示灯亮时间(采用倒计时显示),当定时时间到的时候控制蜂鸣器响来提醒人们注意红绿灯的状态。
图3-2交通灯总体设计框图
4硬件设计
根据设计任务要求,自行选择电子元件,画出电气原理图,并调试。
一个完整的系统除了主控芯片以外,还需配上电源系统、时钟电路、复位电路等。
独立的芯片是不能工作的。
4.1LPC2103芯片介绍及设计
LPC2103是基于一个支持实时仿真的32位ARM7TDMI-SCPU的微控制器,并带有32kB嵌入的高速Flash存储器。
128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。
对中断服务程序和DSP算法中性能要求严格的应用,这增加的性能比在Thumb模式下的性能超出多达30%。
对代码规模有严格控制的应用,使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。
较小的封装和很低的功耗使LPC2103特别适用于访问控制和POS机等小型应用中;由于内置了宽范围的串行通信接口(范围从多个UART、SPI和SSP到两条I2C总线)和8kB的片内SRAM,它们也非常适合于通信网关和协议转换器。
高级性能还使这些器件适合用作数学协处理器。
多个32位和16位定时器、1个改良的10位ADC、所有定时器上输出匹配的PWM特性、以及具有多达13个边沿或电平触发的外部中断管脚的32条高速GPIO线,使这些微控制器特别适用于工业控制和医疗系统中。
其中用到lcp2103特性,LPC2103特性如下所示:
*32位ARM7TDMI-S微控制器,超小LQFP48封装。
*8kB的片内静态RAM和32kB的片内Flash程序存储器。
128位宽度接口/加速器可实现高达70MHz工作频率。
*通过片内boot装载程序实现在系统/在应用编程(ISP/IAP)。
单个Flash扇区或整片擦除时间为100ms。
256字节编程时间为1ms。
*嵌入式ICERT通过片内RealMonitor软件提供实时调试。
*10位A/D转换器提供8路模拟输入(每个通道的转换时间低至2.44us),以及特定的结果寄存器来最大限度地减少中断开销。
*2个32位定时器/外部事件计数器(带7路捕获和7路比较通道)。
*2个16位定时器/外部事件计数器(带3路捕获和7路比较通道)。
*低功耗实时时钟(RTC)具有独立的电源和特定的32kHz时钟输入。
*多个串行接口,包括2个UART(16C550)、2个高速I2C总线(400kbit/s)、SPI和具有缓冲作用和数据长度可变功能的SSP。
*向量中断控制器(VIC),可配置优先级和向量地址。
*多达32个通用I/O口(可承受5V电压)。
*多达13个边沿或电平触发的外部中断管脚。
*通过一个可编程的片内PLL(100us的设置时间)可实现最大为70MHz的CPU操作频率,其具有10MHz-25MHz的输入频率。
*片内集成振荡器与外部晶体的操作频率范围为1-25MHz。
*低功耗模式包括空闲模式、掉电模式和带有效RTC的掉电模式。
*通过外部中断或RTC将处理器从掉电模式中唤醒。
*通过外设功能的单独功能/禁止和调节外设时钟来实现功能最优化。
4.2LPC2103芯片最小系统硬件设计
图4-1为LPC2103芯片的原理图,64个引脚,采用3.3V电源供电,设计所需外接器件的网络名已经标出。
图4-1LPC2103芯片的原理图`
4.3系统电源电路设计
本电源运用5V的直流电源(图4-2所示)。
通过DS2434芯片将5V电压转换为3.3V电压,为LPC2103芯片供电,LPC2103芯片所能承受的电压范围是3V-3.6V。
图4-2直流电源电路设计
4.4晶振与复位电路
系统的晶振电路如图4-3所示LPC2103芯片采用11.0592MHz的晶振作为振荡时钟源,通过对芯片的进行软件设计可以将晶体振荡器的频率分频为所需的频率;系统的复位电路如图4-4所示,SP708S芯片的7号引脚连接到主控芯片的复位引脚(nRST)上,按下复位键S2时,系统将会复位到初始的状态。
因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才会撤除,微机电路开始正常工作。
因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才会撤除。
图4-3系统的晶振电路图图4-4系统的复位电路图
4.5LED循环显示设计
由南向北和由北向南车道各用一组红、绿、黄三色的指示灯,指挥车辆通行。
绿灯是通行信号,面对绿灯的车辆可以直行,红灯是禁止通行信号,面对红灯的车辆必须在路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停线而不能安全停车时可以继续行进。
具体红绿灯时间分配时间如表所示:
红绿灯时间分配时间如表
50s
5s
5s
50s
5s
5s
南北通道
绿灯亮
绿灯闪
黄灯闪
红灯亮
红灯闪
黄灯闪
人行道
红灯亮
红灯亮
红灯亮
绿灯亮
红灯亮
红灯亮
上表说明南北通道绿灯亮、绿灯闪黄灯闪时人行道都是红灯亮,只有车道红灯亮(车辆完全停下来)时人行道绿灯才亮,这样保证了过马路的行人人身安全,避免了不必要的交通事故。
硬件电路连接图如图4-5所示:
图4-5硬件电路连接图
交通灯LED的发光和熄灭的控制,是通过控制GPIO寄存器组来完成的,须先将引脚P1.18~P1.25通过引脚功能选择寄存器PINSEL1,设置为GPIO方式;再设置GPIO方向寄存器1(IO1DIR),对应的引脚设置为输出方向。
要点亮LED1-LED8需要使用GPIO清零寄存器1(IO1CLR)的对应位设置为1,即在引脚P1.18-P1.25上加逻辑低电平,即可点亮这些灯。
与之相反,要熄灭这些灯,则要用GPIO输出置位寄存器1(IO1SET)将对应的位置位即可。
上拉电阻作用在于,当GPIO引脚处于第三种状态时候,既不是输出高电平,也不是输出低电平。
而是呈现高阻态,相当于没有接芯片。
它的电平状态由上下拉电阻决定。
4.6数码管倒计时显示硬件设计
数码管是一种很普遍的显示器件,数码管的主要部分是七段发光二极管;数码管分为共阴极和共阳极两种,为了保护各段LED,需外加限流电阻。
有的产品还附加有一个小数点,因此有人也称之为八段式发光二极管。
图4-6数码管外形图及阴阳两极连接示意图
如图4-6所示,数码管由8个发光段(第八段表示小数点)的不同组合,从而实现十六进制数的显示。
通过段选端可以控制数码管显示内容,位选端用于控制整个数码管是否工作:
对于共阴极数码管,位选端要接低电平,对于共阳极数码管,位选端接高电平。
数码管有两种显示方式:
动态显示和静态显示。
静态显示让数码管要点亮的数码管同时持续点亮;动态显示则利用了人眼的视觉暂留原理,在一个时间内只点亮一个数码管。
透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
每位元数码管的点亮时间为1-2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮。
本次设计采用2位一体的数码管,数码管的2条位选线连接ARM的通用I/O口;数码管的8个段选端连接74HC595芯片的并行I/O输出接口,74HC595再与ARM的SPI0模式进行通信,接受ARM发送过来的数据。
数码管硬件电路连接图如图4-7所示:
图4-7数码管硬件电路连接图
4.7蜂鸣器设计
将蜂鸣器正极端接电源,负极端通过三极管接地,三极管基极通过电阻接到LPC2103芯片的P0.8引脚上。
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,由于其引脚电流较小,无法驱动蜂鸣器,因此需要增加一个电流放大的电路。
通过一个三极管C8550来放大驱动蜂鸣器。
具体硬件
电路连接图如图4-8所示:
图4-8蜂鸣器硬件电路连接图
5软件设计
5.1交通灯控制软件流程图
图5-1为ARM模拟交通灯控制程序流程图,主程序主要完成倒计时显示及控制蜂鸣器,中断服务程序主要控制那些灯亮以及亮的时间。
本系统结构简单,操作方便;既可现场控制,又可远程控制;拥有手动和自动两种控制模式,具有一定的智能性;能根据现场状况,合理地调节车流,对优化城市交通具有一定的意义。
另外,利用RTX51实时操作系统提供的系统特征,可以简化多任务程序设计,满足多个任务的时间特性要求,可完成前后台编程方法难以完成的编程任务。
同时基于实时多任务操作系统,可以将各任务进行细分包装,使各任务保持相对独立;能有效改善程序结构,便于模块化处理,使程序的可读性、可维护性和可移植性都得到进一步的提高。
通信任务当某一下位机因绿灯时间到而触发串行口中断后,该取该下位机的当前车流量Vi,并触发控制下一车道组合的下位机进行绿灯显示;同时,将更新的绿灯窗口时间ti赋给各下位机,从而实现对车流量的动态调节。
由于该任务时间特性要求较高,将其优先级设为1。
紧急通行任务当紧急通告键被按下时,该任务被创建。
任务首先保存当前各车道组合的绿灯窗口时间,然后强制有紧急情况的车道组合绿灯显示、其它车道组合红灯显示,以保障紧一辆顺序通行。
延时10s后,恢复以前的顺序显示。
由于该任务时间特性要求很高,所以应将其优先级设为2,高于通信任务。
最后删除自身。
同时基于实时多任务操作系统,可以将各任务进行细分包装,使各任务保持相对独立;手动/自动切换任务当切换到自动操作模式时,创建任务5,并发出信号使任务3中“主车道绿灯窗口时间调节”功能项不可选。
当切换到手动操作模式时,删除任务5,并解除时间调节功能项的限制。
时间手动调节任务每按一下“+键”,将当前车道组合的绿灯窗口时间加1,按“-键”则减1。
当按确定键后,则当前设定时间被保存到变量Ti中。
显示任务当键盘扫描任务在一定的时间内没有检测到输入信号时,将LCD转入睡眠状态,面板显示各车道组合的当前绿灯窗口时间。
能有效改善程序结构,便于模块化处理,使程序的可读性、可维护性和可移植性都得到进一步的提高。
若该窗口时间由于任务5被更新,当有按键被按下时,则根据按键情况作相应的辅助显示。
图5-1ARM模拟交通灯控制程序流程图
5.2ARM交通灯模拟控制程序设计
定时器控制原理:
定时器对外设时钟Fpclk周期进行计数,根据4个匹配寄存器的设定可设置为匹配(即达到匹配寄存器指定的定时值)时产生中断或执行其他操作。
ARMLPC2103有两个32位定时器,定时器0和定时器1,本次设计仅适用定时器0,选定定时器0中断为向量IRQ。
设置P0、P1口为GPIO输出状态,初始化定时器,选定定时器0中断为向量IRQ,对VICIntEnable、VICIntSelect、VICvectCntl进行设置,初始化SPI接口,根据设计要求编写软件程序。
根据事先画好的程序流程图,用C语言编写程序,在主程序中对需要用到的I/O口进行定义,并设置相应的I/O口,比如要求P1.18~P1.25引脚为GPIO功能,则通过对引脚功能选择寄存器PINSEL1将对应的引脚设置为GPIO方式并设置GPIO方向,在GPIO方向寄存器IO1DIR里设置,之后对定时器0进行初始化,并开相应的中断。
然后进入大循环进行倒计时显示、控制蜂鸣器的蜂鸣与否并判断flag是否加到设定值,对flag加到设定值后进行清零,让flag重新计数。
中断服务程序的设计,每隔一秒钟定时器中断一次,每中断一次flag加1根据LED点亮的先后顺序以及点亮的时间,分别编写。
6运行测试结果
车道红灯、马路绿灯,一位数码管50秒倒计时显示如下图6-1所示:
图6-1车道红灯、马路绿灯50秒倒计时显示
车道红灯、马路绿灯,一位数码管50秒倒计时显示,倒计时5秒,马路方向亮黄灯,以提示即将亮红灯,设计为系统上电即点亮车道红灯以及马路绿灯,倒计时50s红灯开始闪烁,同时马路红灯亮,红灯闪5s接着转为黄灯闪5s,然后车辆通道转为绿灯亮,50s后绿灯闪5s,黄灯再闪5s之后又回到红灯亮,人行道只在车辆通道红灯时才亮绿灯。
如下图6-2所示:
图6-2东西方向亮黄灯提示即将亮红灯显示
这主要靠在中断服务程序中对计数值flag的判断来对正在点亮的灯进行定时实现程序详细清单见附录。
7设计心得体会及总结
课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程。
”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。
我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
通过这次交通灯设计,本人在多方面都有所提高。
通过这次交通灯设计,培养综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练。
了解所选择的ARM芯片各个引脚功能,工作方式,计数/定时,I/O口,中断等相关原理,并巩固学习嵌入式的相关内容知识。
通过软硬件设计实现利用ARM芯片完成交通灯控制功能。
首先查阅相关文献资料,熟悉所选ARM芯片。
第二步总体设计方案规划,设计车辆遇到红灯停绿灯行情况,红绿灯时间均为60s,切换时间为10s,最后5s为黄灯闪烁。
接下来的系统硬件设计,熟悉I/O接口,定时器计数器工作原理。
最后系统软件设计,包括交通信号灯的工作流程软件实现,用C语言编程。
提高了计算能力,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。
在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
参考文献
[1]周立功.ARM嵌入式系统基础教程[M].北京航空航天大学出版社.2011
[2]张崙.32位嵌入式系统硬件设计与调试[M].机械工业出版社.2011
[3]马洪连.嵌入式系统设计教程[M].电子工业出版社.2012
[4]王田苗.嵌入式系统设计与实例开发[M].清华大学出版社.2011
[5]符意德编著.嵌入式系统设计原理及应用[M].清华大学出版社.2012
附录:
#include"config.h"
#defineLED11<<18//P1.18南北红灯
#defineLED21<<19//P1.19南北绿灯
#defineLED31<<20//P1.20南北黄灯
#defineLED41<<21//P1.21南北红灯
#defineLED51<<22//P1.22南北绿灯
#defineLED61<<23//P1.23南北黄灯
#defineLED71<<24//P1.24马路红灯
#defineLED81<<25//P1.25马路绿灯
#defineY0x00900000
#defineR0x00240000
#defineG0x00480000
#defineSEL11<<26//数码管位选1
#defineSEL21<<27//数码管位选2
#defineHC595_CS0x00000200//P0.9
#defineBEEP0x00000100//P0.8为蜂鸣器控制
unsignedintdat,nb,h,flag;
unsignedchartab[]={0XC0,0XF9,0XA4,0XB0,0X99,
0X92,0X82,0XF8,0X80,0X90};
/************************************************************
定时器0中断服务子程序重装初值,计数增减
************************************************************/
void__irqIRQ_Time0(void)
{
unsignedinti;
if(flag<=50)
{if(flag==0)nb=55;
IO1CLR=LED1|LED4|LED8;//车道红马路绿
IO1SET=~(LED1|LED4|LED8);
nb--;//南北红灯时间秒减1
}
if((flag>50)&&(flag<55))
{
i=IO1PIN;
if((i&R)==0)
IO1SET=R;
else
IO1CLR=R;//红灯每秒闪烁一次
nb--;//红灯时间减1
}
if(flag==55)
{
IO1CLR=LED3|LED6|LED7;//车道黄马路红
IO1SET=~(LED3|LED6|LED7);
h=5;
}
if((55 { i=IO1SET; if((i&Y)==0) IO1SET=Y; else { IO1CLR=Y; }//黄灯闪烁 h--;//黄灯时间秒减1 } if((60<=flag)&&(flag<110)) { if(flag==60)nb=51; IO1CLR=LED2|LED5|LED7;//车道绿马路红 IO1SET=~(LED2|LED5|LED7); nb--;//绿灯时间减1 } if((110<=flag)&&(flag<115))//计数慢一个周期后重新开始计数 { i=IO1SET; if((i&G)==0) IO1SET=G; else { IO1CLR=G; }//绿灯闪烁 nb--;//绿灯时间减1 } if(flag==115) { h=5; IO1CLR=LED3|LED6|LED7;//车道黄马路红 IO1SET=~(LED3|LED6|LED7); } if((115 { i=IO1SET; if((i&Y)==0) IO1SET=Y; else { IO1CLR=Y; }//黄灯闪烁 h--;//黄灯时间减1 } flag++; T0IR=0x01;//清除中断标志 VICVectAddr=0x00;//通知VIC中断处理结束 } /************************************************************ **Time0Init()定时器0定时中断初始化 *************************************************************/ voidTi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 交通灯 模拟 控制程序 设计