基于ARM的交通灯设计说明书.docx

上传人:b****7 文档编号:15761464 上传时间:2023-07-07 格式:DOCX 页数:15 大小:217.70KB
下载 相关 举报
基于ARM的交通灯设计说明书.docx_第1页
第1页 / 共15页
基于ARM的交通灯设计说明书.docx_第2页
第2页 / 共15页
基于ARM的交通灯设计说明书.docx_第3页
第3页 / 共15页
基于ARM的交通灯设计说明书.docx_第4页
第4页 / 共15页
基于ARM的交通灯设计说明书.docx_第5页
第5页 / 共15页
基于ARM的交通灯设计说明书.docx_第6页
第6页 / 共15页
基于ARM的交通灯设计说明书.docx_第7页
第7页 / 共15页
基于ARM的交通灯设计说明书.docx_第8页
第8页 / 共15页
基于ARM的交通灯设计说明书.docx_第9页
第9页 / 共15页
基于ARM的交通灯设计说明书.docx_第10页
第10页 / 共15页
基于ARM的交通灯设计说明书.docx_第11页
第11页 / 共15页
基于ARM的交通灯设计说明书.docx_第12页
第12页 / 共15页
基于ARM的交通灯设计说明书.docx_第13页
第13页 / 共15页
基于ARM的交通灯设计说明书.docx_第14页
第14页 / 共15页
基于ARM的交通灯设计说明书.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于ARM的交通灯设计说明书.docx

《基于ARM的交通灯设计说明书.docx》由会员分享,可在线阅读,更多相关《基于ARM的交通灯设计说明书.docx(15页珍藏版)》请在冰点文库上搜索。

基于ARM的交通灯设计说明书.docx

基于ARM的交通灯设计说明书

\\

\\\\\\\\\sfe

攀枝花学院本科课程设计

基于ARM的交通灯设计

 

学生姓名:

学生学号:

院(系):

电气信息工程学院

年级专业:

指导教师:

 

二〇一四年十二月

摘要

本设计是基于STM32微控制器进行的交通灯设计.STM32是意法半导体以ARM为核心的微控制器。

交通灯通常指由红、黄、绿三种颜色灯组成用来指挥交通的信号灯。

绿灯亮时.准许车辆通行.黄灯亮时.已越过停止线的车辆可以继续通行;红灯亮时.禁止车辆通行。

交通灯的硬件设计主要由三部分组成:

微控制器最小系统.交通灯的信号灯.显示时间的数码管。

软件部分由三部分组成:

数码管显示函数.交通灯切换函数.时间计时函数。

交通灯工作的流程是计数器每秒钟减一.减到零时切换信号灯.在主函数中调用数码管显示函数.以便快速扫描显示。

交通灯设计的关键问题是实现信号灯切换、计数器自减、数码管扫描显示等功能。

同时该设计具有设计方法合理.简单易行.成本低.安全实用等特点.具有推广价值。

 

关键词微控制器.交通灯.数码管.STM32.ARM

 

1绪论

1.1本课题研究的背景及意义

随着社会的发展.人们不断地从农村涌入城市.城市人口越来越多.现在中国的千万级人口的城市越来越多。

人口多伴随的是车辆越来越多.而且我们的生活越来越好.私家车越来越多.如果没有一个良好的交通规则.那么城市的交通系统必然会瘫痪。

交通警察是有限的.这种情况下永不下岗的“交通警察”交通灯就派上大用场了。

现在的交通灯已经是城市中不可缺少的基础设施。

交通灯通常指由红、黄、绿三种颜色灯组成用来指挥交通的信号灯。

绿灯亮时.准许车辆通行.黄灯亮时.已越过停止线的车辆可以继续通行;红灯亮时.禁止车辆通行。

1.2国内外研究现状、水平

目前设计交通灯的方案有很多.西方国家已经有应用CPLD设计实现交通信号灯控制器方法;有应用PLC实现对交通灯控制系统的设计;有应用单片机实现对交通信号灯设计的方法。

目前.国内的交通灯一般设在十字路门.在醒目位置用红、绿、黄三种颜色的指示灯。

加上一个倒计时的显示计时器来控制行车。

对于一般情况下的安全行车.车辆分流尚能发挥作用.但根据实际行车过程中出现的情况.还存在以下缺点:

1.两车道的车辆轮流放行时间相同.在十字路口.经常一个车道为主干道.车辆较多.放行时间应该长些;另一车道为副干道.车辆较少.放行时间应该短些。

2.两条干道的红绿时间不能随时间的改变而修改。

1.3本课题的发展趋势

随着智能时代的到来.让交通灯也智能的想法已经不是难事.智能的表现方式主要是拥有自动调整亮灯时间长短的功能。

譬如说.它能自动感应该地区的交通情况.如果塞车的话该交通灯能自行控制红、黄与绿等的亮灯时间长短。

而这个检测道路车辆数量的方案有很多种.技术上比较难施工上比较容易的是在交通的上加上摄像头.运用数字图像处理技术来识别车辆的数量。

另一种方法是可以在公路下面埋上压力传感器.这种方法技术上没什么难度.但施工比较麻烦。

1.4本课题的研究内容

本设计是基于STM32F407的交通灯设计.交通灯的硬件设计主要由三部分组成:

微控制器最小系统.最小系统的构建有主控芯片STM32.晶振.滤波电容.复位电路;交通灯的信号灯.信号灯由超低功耗的LED组成.LED的正极接电源正极.负极连接STM32I/O口.并且要串联一个限流电阻;显示时间的数码管数码管用以显示倒计时.倒计时只有几十秒.所以只用2个数码管就够了.数码管采用动态扫描显示方式.所以在程序中需要不断的刷新显示.给程序增加了难度。

软件部分由三部分组成:

数码管显示函数.函数输入一个数字.数码管就可以显示该数字;交通灯切换函数.倒计时为0时.就要执行该函数.实现红绿灯的切换;时间计时函数.该函数实现倒计时.是本设计的核心。

交通灯工作的流程是计数器每秒钟减一.减到零时切换信号灯.在主函数中调用数码管显示函数.以便快速扫描显示。

ARM处理器是Acorn计算机有限公司面向低预算市场设计的第一款RISC微处理器。

更早称作AcornRISCMachine。

ARM处理器本身是32位设计.但也配备16位指令集.一般来讲比等价32位代码节省达35%.却能保留32位系统的所有优势。

早期的ARM以ARM7、ARM9等命名.在推出了ARM11之后的ARM核心采用了不同的命名方式.这就是新型的Cortex内核.分为三个系列.A系主打高端市场.R系用于实时性要求很高的领域.M系是面向控制的内核.与单片机一样.Cortex-M核目前有M0、M3、M4.前不久ARM推出了最新的ARM7.为可穿戴设备设计。

STM32是意法半导体基于ARM核心加上外围模块构成的新型微控制器。

STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M内核.STM32F1等基于Cortex-M3.STM32F4等基于Cortex-M4。

STM32F407采用了90纳米的NVM工艺和ART.ART技术使得程序零等待执行.提升了程序执行的效率.将Cortex-M4的性能发挥到了极致.该芯片最高工作频率可达到168MHz.运行速度接近低端微处理器.STM32F407集成了单周期DSP指令和FPU(浮点单元).提升了计算能力.可以进行一些复杂的计算和控制。

 

2方案设计

2.1微控制器选择

ARM体系是一个很大的体系.基于ARM设计的微控制器、微处理器很多.由于交通灯设计主要是控制而非处理.所以我们选择微控制器作为主控芯片

基于ARM的微控制器有很多.主要有意法半导体的STM32系列.飞思卡尔公司的K系列.以及爱特梅尔、TI等公司都在做基于ARM的微控制器。

由于意法半导体的STM32性价比非常高且容易买到.所以我们选择STM32作为本次设计的主控芯片。

STM32也是一个家族.有F1系列、F2系列、F3及F4系列.其中F4系列基于ARMCortex-M4内核.比Cortex-M3要先进.而且具有学习价值.所以我们选择STM32F407作为主控芯片。

2.2显示设备的选择

显示设备有很多种.有LED、LCD、OLED、数码管、TFT等。

由于本设计中显示设备只用显示数字.所以用高级显示设备就会造成资源浪费.增加设计成本。

所以我们这里选择地端的显示设备.低端的显示设备主要有LED和数码管。

LED只能显示点.要显示数字的话就得用很多LED组成点阵.所以我们选择数码管作为本设计的显示设备.在实际运用中.数码管的大小以及亮度达不到实际要求.所以可以采用大量LED组成的点阵来显示。

实验中采用数码管显示是为了降低成本。

2.3信号灯的选择

由于信号灯需要红、黄、绿三种颜色.而且是一天24小时显示.不能选择功率大的信号灯.信号灯的亮度不能太低.不然司机看不清楚.基于以上情况我们选择超低功耗的LED作为信号灯。

实验中我们采用一个LED.在实际中为了增加亮度可以采用很多LED组成LED群.以此增加显示亮度。

2.4系统设计思路

由于采用了高性能的STM32作为主控芯片.所以在资源上不必担心.芯片得有一个最小系统才能运作。

交通灯有一个倒计时器.所以必须有一个定时器作为时钟。

还有显示倒计时的设备.这里用数码管代替.实际中得用LED做成的显示面板。

信号灯用单个LED灯代替.实际中要用大量LED同时显示.LED的颜色要有红、黄。

绿三种。

定时器一上电就不断地运行.为交通灯提供时间信息.在定时器中会控制2个计数变量.一个变量代表一组信号灯的时间.当计数变量倒计时为0时.就执行信号灯切换函数.实现红黄绿灯的切换。

另外外需要实时显示时间.所以每当计数变量减一时数码管就要变化。

2.5方案框图

 

 

图2.2方案框图

2.6方案论证

本方案简单易行.且性价比高.高性能STM32芯片能稳定地运行.而且由于设计中所用的LED、数码管、STM32都是低功耗器件.所以整个系统的功耗都很低。

3硬件设计与实现

3.1电路设计框图

本设计主要由ARM微控制器STM32F407、LED灯、数码管等部分组成。

其中STM32F407是主控芯片.是整个硬件电路的核心.主要完成LED灯、数码管的控制。

其系统原理框图如图3.1所示。

 

 

图3.1系统原理框图

 

3.2最小系统设计

STM32有众多系列和型号.我们选择STM32F407作为主控芯片.因为这款芯片是基于最新的Cortex-M4,具有比较高的学习价值和代表性。

对于STM32这种高级的微控制器来说.最小系统比较复杂.不像51单片机那样简单.因为其速度非常快.可以达到168MHz.速度快就对信号的稳定和抗干扰有较高的要求.又由于现在的集成电路工艺技术并不能集成较大的电容.所以SOC设计者们将需要电容的电路接上引脚.在芯片外部接上电容.这样就解决了上面的问题.不过使最小系统变复杂了。

由于STM32内部集成了震荡源.所以没有外部晶振也可以工作。

不过内部震荡源有着不精确地缺点.在高精度场合我们还是有必要接上外部晶振.一般为8M或16M.晶振需要接上2个电容帮助其起振。

3.3LED模块

LED模块比较简单.STM32的IO口足以驱动LED.为了有更大的电流.我们采用灌电流输出方式.LED负极接IO口.正极接电源.中间还要加上限流电阻。

本设计中总共有2组信号灯.一组信号灯有红、黄、绿三颗LED.所以总共需要6颗LED。

3.4数码管模块

本设计中采用的数码管功率比较大.所以不能像LED模块那样直接接在IO口上.需要加上驱动电路.我们有两套驱动方案.方案一是用三极管驱动.这样需要4个三极管。

方案二是用锁存器。

鉴于三极管便宜且容易找到.所以我们采用三极管驱动方案。

3.5系统总电路图

图3.5系统总图

 

4软件设计

4.1软件的设计架构

yes

no

图4.1程序流程图

4.2软件设计过程

STM32的C语言开发思想与51有重大差别.51只需要一个reg52.h和一个C文件就可以开发。

STM32芯片非常复杂.而且是32位芯片.内部的寄存器数量巨大.我们不能像开发51那样直接操作寄存器.51的寄存器比较少且是8位机。

所以工程师们引入了一种新的开发方式-库开发.ST公司为每一款STM32开发了一个固件库.开放给开发人员免费使用.我们只需建好工程.然后添加这个库.在用户文件中直接调用这些库函数就可以了.这种开发方式非常方便.我们不必去记那么多寄存器或者翻数据手册。

加快了开发速度.减小了开发成本。

在主函数中.我们需要对外设进行初始化.首先要定义一个GPIO初始化函数GPIO_init(void).在函数中调用库函数对IO口进行初始化。

函数定义好后就在主函数中首先调用它.然后调用定时器初始化函数SysTick_Config(168000).并开启定时中断.至此初始化完成。

接下来进入一个死循环.在循环中主要检测倒计时是否为0.如果为0则进行红黄绿灯的切换.另外循环中还调用显示函数.不断的刷新显示.一是由于数码管采用的是动态扫描显示方式.需要不断地刷新.二是显示需要一定的实时性。

在定时中断服务函数中主要完成计数变量的自减。

4.3MDK工程建立及配置

建立STM32的工程很麻烦.需要将库函数移植到工程中.但是一旦移植好后.以后就不用再做同样的工作.只需将该工程拷贝就行.然后在里面修改代码。

我们这里就是用的工程模板.固件库有很多版本.我们用的是1.1版本。

一个完整的工程框架如图4.3.1所示。

图4.3.1工程框架

图4.3.1中DEMO是工程名.user里面放的是用户文件.CMISI里面放的是启动代码.FWlib里面放的是外设驱动与配置函数.它占据了整个库的大部分。

建立好工程后就要对其进行配置.鼠标右键点击工程名.选择Options选项.出现工程配置界面.如图4.3.2。

图4.3.2工程配置

配置界面有很多选项.Device选项是选择工程的目标芯片.我们选的是STM32F407.Output选项是选择工程输出文件的目录.C/C++选项是选择头文件的查询目录。

Bebug选项是选择仿真模式.我们有一个硬件仿真器STlink.所以这里选择硬件仿真.仿真器选STlink.如图4.3.3。

图4.3.3仿真模式

工程配置完成后就进行程序编写.编写程序是一个漫长的过程.本设计的核心内容就是编写程序.程序主要有3个函数.main函数实现信号灯的切换.定时器中断服务函数实现倒计时.显示函数实现数码管的动态扫描显示。

具体程序在后面列出。

编写好程序后就可以进行编译了.依次点击

后就完成了编译—汇编—链接.出现如图4.3.4的情况就编译完成了。

图4.3.4编译完成

4.4主要函数代码

/******************************************************************************

*主函数

*说明:

本函数中主要完成系统初始化、信号灯切换和显示刷新

******************************************************************************/

intmain()

{

unsignedcharlight_1=YELLOW,light_2=RED;

SysTick_Config(168000);//滴答定时器初始化,周期1毫秒

GPIO_init();//GPIO初始化

GPIO_Write(GPIOE,0xff);//关闭全部LED灯

while

(1)

{

if(time_1==0)//如果1组倒计时为0

{

if(light_1==RED)//如果1组为红灯

{

time_1=54;//绿灯倒计时55秒

light_1=GREEN;//红灯转换成绿灯

GPIO_Write(GPIOE,0xf6);

}

elseif(light_1==GREEN)//如果1组为绿灯

{

time_1=4;//黄灯倒计时5秒

light_1=YELLOW;//绿灯转换为黄灯

GPIO_Write(GPIOE,0xf5);

}

elseif(light_1==YELLOW)//如果1组为黄灯

{

time_1=59;//红灯倒计时60秒

light_1=RED;//转换为红灯

GPIO_Write(GPIOE,0xde);

}

}

if(time_2==0)//如果2组倒计时为0

{

if(light_2==RED)//如果2组为红灯

{

time_2=54;//绿灯倒计时55秒

light_2=GREEN;//转换为绿灯

GPIO_Write(GPIOE,0xde);

}

elseif(light_2==GREEN)//如果2组为绿灯

{

time_2=4;//黄灯倒计时5秒

light_2=YELLOW;//转换为黄灯

GPIO_Write(GPIOE,0xee);

}

elseif(light_2==YELLOW)//如果2组为黄灯

{

time_2=59;//红灯倒计时60秒

light_2=RED;//转换为红灯

GPIO_Write(GPIOE,0xf3);

}

}

Display(time_1,time_2);//调用显示函数.刷新数码管显示

}

}

/*******************************************************************************定时中断服务函数

*说明:

本函数主要完成倒计时减一

******************************************************************************/

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2