1、 嵌入式系统课程设计报告 十字路口交通灯控制系统学 院: 电子与信息工程学院 专业班级: 电子1102班 摘要随着移动设备的流行和发展,嵌入式系统已经成为一个热点。它并不是最近出现的新技术,只是随着微电子技术和计算机技术的发展,微控制芯片功能越来越大,而嵌入微控制芯片的设备和系统越来越多,从而使得这种技术越来越引人注目。它对软硬件的体积大小、成本、功耗和可靠性都提出了严格的要求。嵌入式系统的功能越来越强大,实现也越来越复杂,随之出现的就是可靠性大大降低。最近的一种趋势是一个功能强大的嵌入式系统通常需要一种操作系统来给予支持,这种操作系统是已经成熟并且稳定的,可以是嵌入式的Linux,WINCE
2、等等。本文所要研究的就是基于ARM嵌入式系统的交通灯系统的设计与实现。本设计采用了ARM32位的Cortex-M3 CPU的内核的STM32作为核心处理器。 关键词:嵌入式 交通灯 STM32f103 ARMAbstract With the popularity and development of mobile devices, embedded system has become a hotspot. It is not a new technique appeared recently, only with the development of microelectronics and
3、 computer technology, micro chip control functions more and more, more and more equipment and systems and embedded micro control chip, making the technology more attract sb.s attention. Hardware and software of its size, cost, power consumption and reliability have made stringent requirements. The f
4、unction of embedded system is more and more powerful, and more and more complicated, the reliability appears is greatly reduced. A recent trend is a powerful embedded systems usually require an operating system to support, the operating system is already mature and stable, can be embedded Linux, WIN
5、CE and so on. This paper is to study the design and Realization of the traffic light system based on ARM embedded system. This design uses the ARM32 bit Cortex-M3 CPU kernel STM32 as the core processor. Keywords: embedded STM32f103 traffic lights ARM目 录一 引言1二 相关内容和原理1三 作品设计要求1四 作品方案设计24.1设计思路24.2总体设
6、计框图34.3总体方案设计参数计算4五 系统硬件电路设计及分析45.1STM32f103芯片介绍及选用45.2单片机电路原理图及分析45.3电源电路模块原理图及分析55.4晶振与复位电路模块原理图55.5LED交通灯电路原理图及分析6六 系统软件设计及其分析76.1软件设计流程图86.2ARM交通灯控制软件设计8七 系统软件代码9 7.1 软件设计流程图 9 7.2 部分程序代码10八 Keil软件的运用与调试 16九 实物演示照片17 十 作品电路的PCB图 19十一 设计心得及体会20十二 参考文献 21 1引言交通信号灯指挥着人和各种车辆的安全运行,实现红、黄、绿灯的自动指挥是城乡交通管
7、理现代化的重要课题。在城乡街道的十字交叉路口,为了保证交通秩序和行人安全,一般在每条道路上各有一组红、黄、绿交通信号灯,其中红灯亮,表示该条道路禁止通行; 黄灯亮,表示该条道路上未过停车线的车辆停止通行,已过停车线的车辆继续通行;绿灯亮,表示该条道路允许通行。交通灯控制电路自动控制十字路口两组红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行,实现十字路口城乡交通管理自动化。 本文为了实现交通道路的管理,力求交通管理先进性、科学化。 分析应用了单片机实现智能交通灯管制的控制系统,以及该系统软、硬件设计方法,实验证明该系统实现简单、经济,能够有效地疏导交通,提高交通路口的通行能力。2 相关内
8、容及原理通过设计,培养自己综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练,加深对ARM芯片的了解;熟悉ARM芯片各个引脚的功能,工作方式,计数/定时,I/O口,中断等相关原理,巩固学习嵌入式的相关内容知识。利用ARM芯片模拟实现交通灯控制,自行选择所需ARM芯片,查阅相关文献资料,熟悉所选ARM芯片,了解所选ARM芯片各个引脚功能,工作方式,计数/定时,I/O口,中断等相关原理,通过软硬件设计实现利用ARM芯片完成交通灯的模拟控制。3 作品设计要求要求基于Cortex系列单片机设计一具有模拟道路路口交通灯相应功能的交通灯模拟系统。具体要求如下:
9、(1)具有三种颜色显示:红色、绿色和黄色,分别代表路口交通灯的三种颜色。 (2)所设计的系统应至少能够模拟两个路口的功能,具有直行和左转的功能。 (3)如果能力和时间允许,可以加入操作系统。 (4)适当加入一些其他元素,使其更加具有人性化设计。4 作品方案设计4.1 设计思路利用STM32F103芯片实现单路交通灯的控制: a 实现红、绿、黄灯的循环控制。使用红、黄、绿三种不同颜色的LED灯实现此功能,主干道正前方方向的LED灯,编号分别为1、2、3,分别接在单片机的PB8、PB6、PB9的引脚上;主干道右方的LED灯,编号分别为4、5、6,分别接在单片机的PA14、PA10、PA8的引脚上;
10、主干道后侧的LED灯,编号分别为7、8、9,分别接在单片机的PD10、PD12、PD14引脚上。主干道左方的LED灯,编号分别为10、11、12,分别接在单片机的PE7、PE11、PE15引脚上。以此实现四个路口的交通灯模拟系统。用软件控制灯的亮与灭来控制车辆和行人的通行。交通路口示意图如图4.1车辆遇到红灯停绿灯行的行走情况,红绿灯时间均为2000ms,切换时间为2000ms,最后2000ms为黄灯闪烁。道路道路 图4.1 交通路口示意图4.2 总体设计框图用ARM系列芯片STM32F103作为系统的主控芯片,控制交通灯的循环点亮并显示灯亮时间(采用倒计时显示),当定时时间到的时候通过灯的状
11、态来提醒人们注意红绿灯的状态。交通灯循环态状换切STM32F103倒计时显示图4.2 交通灯总体设计框图5 硬件电路模块设计及其分析根据设计任务要求,自行选择电子元件,画出电气原理图,并调试。一个完整的系统除了主控芯片以外,还需配上电源系统、时钟电路、复位电路等。独立的芯片是不能工作的。5.1 STM32F103芯片介绍 STM32F103是基于一个支持实时仿真和嵌入式跟踪的32 位 CPU 的微控制器,STM32F1系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、
12、中容量(64K和128K)、大容量(256K、384K和512K)。芯片集成定时器,CAN,ADC,SPI,I2C,USB,UART,等多种功能。具有以下一些特性: ARM 32位的Cortex-M3 最高72MHz工作频率,在存储器的0等待周期访问时可达1.25DMips/MHZ(DhrystONe2.1),从32K到512K字节的闪存程序存储器,最大64K字节SRAM 2.0-3.6V供电和I/O引脚 上电/断电复位(POR/PDR)、可编程电压监测器(PVD) 4-16MHZ晶振振荡器 内嵌经出厂调教的8MHz的RC振荡器 2个12位模数转换器,1us转换时间(多达16个输入通道),转换
13、范围:0至3.6V,双采样和保持功能 2个DMA控制器,共12个DMA通道:DMA1有7个通道,DMA2有5个通道 片内晶振频率范围:130 MHz。 通过片内PLL可实现最大为60MHz的CPU操作频率,PLL的稳定时间为100us 支持的外设:定时器、ADC、SPI、USB、IIC和UART 多达112个快速I/O端口(仅Z系列有超过100个引脚) 3个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入 1个16位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时器 ECOPACK封装5.2 STM32F103主电路原理图图5.1为STM3
14、2F103芯片的原理图,多达100个引脚,采用3.3V或者5V电源供电,设计所需外接器件的网络名已经标出。图5.1 STM32F103芯片的原理图5.3 系统电源电路设计本电源运用5V的直流电源(图5.2所示)。通过LM78系列芯片将5V电压转换为电压,为STM32F103芯片供电,STM32F103芯片所能承受的电压范围是2V3.6V。 图5.2 直流电源电路设计5.4 晶振与复位电路模块系统的晶振电路如图5.4所示STM32f103芯片采用8MHz的晶振作为振荡时钟源,外部是倍频72MHz晶振。通过对芯片的进行软件设计可以将晶体振荡器的频率分频为所需的频率;系统的复位电路如图5.5所示,S
15、TM32F103芯片的14号引脚连接到主控芯片的复位引脚(nRST)上,按下复位键S2时,系统将会复位到初始的状态。 图5.4 系统的晶振电路图 图5.5 系统的复位电路图5.5 LED循环显示设计 由南向北和由北向南车道各用一组红、绿、黄三色的指示灯,左右两侧也是各三个灯,指挥车辆通行。绿灯是通行信号,面对绿灯的车辆可以直行,红灯是禁止通行信号,面对红灯的车辆必须在路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以继续行进。具体红绿灯时间分配时间如表5.1所示。表51:红绿灯时间分配时间如表1000ms1000ms1000ms1000
16、ms1000ms1000ms主干通道绿灯亮黄灯闪红灯亮黄灯闪红灯亮黄灯闪左右道路红灯亮红灯亮绿灯亮绿灯亮红灯亮红灯亮 上表说明主干通道绿灯亮、黄灯闪时人行道都是红灯亮,只有车道红灯亮(车辆完全停下来)时人行道绿灯才亮,这样保证了过马路的行人人身安全,避免了不必要的交通事故。硬件电路连接图如图5.6所示图5.6 硬件电路连接图交通灯LED的发光和熄灭的控制,是通过控制GPIO寄存器组来完成的,须先将引脚PA、PB、PD、PE等通过引脚功能选择寄存器PINSEL1,设置为GPIO方式;再设置GPIO方向寄存器1(IO1DIR),对应的引脚设置为输出方向。要点亮LED1LED12需要使用GPIO清零
17、寄存器1(IO1CLR)的对应位设置为1,即在引脚PA、PB、PD、PE上加逻辑低电平,即可点亮这些灯。与之相反,要熄灭这些灯,则要用GPIO输出置位寄存器1(IO1SET)将对应的位置位即可。6 系统软件设计及其分析6.1 软件设计流程图图6.1为ARM模拟交通灯控制程序流程图,主程序主要完成倒计时显示及控制蜂鸣器,中断服务程序主要控制那些灯亮以及亮的时间。开始定时器0初始化初始化中断,开中断倒计时显示中断服务程序流程图系统保护现场车道红灯计数变量-1车道绿灯闪烁计数-1车道红灯闪烁计数-1黄灯闪烁计数-1车道闪烁黄灯计数-1车道绿灯计数-10=Flag50115=flag120110=fl
18、ag11560=flag11050=flag55中断返回55flag60flag=120flag=0,清零计数变量NYNNNNNYYYYYNflag=55or115交换状态NY主程序流程图图6.1 ARM模拟交通灯控制程序流程图6.2 ARM交通灯模拟控制程序设计定时器控制原理:定时器对外设时钟Fpclk周期进行计数,根据4个匹配寄存器的设定可设置为匹配(即达到匹配寄存器指定的定时值)时产生中断或执行其他操作。设置P0、P1口为GPIO输出状态,初始化定时器,选定定时器0中断为向量IRQ,对VICIntEnable、VICIntSelect、VICvectCntl进行设置,初始化SPI接口,根
19、据设计要求编写软件程序。根据事先画好的程序流程图,用C语言编写程序,在主程序中对需要用到的I/O口进行定义,并设置相应的I/O口,比如要求P1。18P1。25引脚为GPIO功能,则通过对引脚功能选择 寄存器PINSEL1将对应的引脚设置为GPIO方式并设置GPIO方向,在GPIO方向寄存器IO1DIR里设置,之后对定时器0进行初始化,并开相应的中断。然后进入大循环进行倒计时显示、控制蜂鸣器的蜂鸣与否并判断flag是否加到设定值,对flag加到设定值后进行清零,让flag重新计数。中断服务程序的设计,每隔一秒钟定时器中断一次,每中断一次flag加1根据LED点亮的先后顺序以及点亮的时间,分别编写
20、相应的程序。7 系统软件代码7.1 软件设计流程图 图7.1 软件设计流程图7.2 系统软件代码主程序部分:#include stm32f10x.h#include led.h#includetimer.hu32 time=0;/Ms级延时变量int i;int main(void)LED_GPIO_Configuration();TIM2_Config1();TIM2_NVIC_Config1();TIM_Cmd(TIM2,ENABLE);/开启TIM2while(1) i=0; Delay_MS(2000);LED2(ON);LED4(ON);LED7(ON);LED10(ON);/直行灯
21、亮Delay_MS(2000);/延时LED2(OFF);/直行灯灭while(i10)/黄灯闪烁 LED3(ON); Delay_MS(100);LED3(OFF); Delay_MS(100); i+; LED2(OFF);LED4(OFF);LED7(OFF);LED10(OFF);/直行灯结束 LED1(ON);LED7(ON);LED10(ON);LED5(ON);/右行灯亮Delay_MS(3000);LED5(OFF);/右行灯灭i=0;while(i10) LED6(ON); Delay_MS(100);LED6(OFF); Delay_MS(100); i+; LED5(OF
22、F);LED1(OFF);LED7(OFF);LED10(OFF);/右行灯结束 LED1(ON);LED7(ON);LED4(ON);LED11(ON);/左行灯亮 Delay_MS(3000);LED11(OFF);/左行灯灭i=0;while(i10) LED12(ON); Delay_MS(100);LED12(OFF); Delay_MS(100); i+; LED11(OFF);LED1(OFF);LED7(OFF);LED4(OFF);/左行灯结束 LED1(ON);LED4(ON);LED10(ON);LED8(ON);/后行灯 Delay_MS(3000);LED1(OFF)
23、;LED4(OFF);LED10(OFF);LED8(OFF);/后行灯灭 底层寄存器配置部分:void LED_GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; /*开启GPIOC&GPIOE的时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE); /* Configure PB.04, PB.06 and PB.08*/ GPIO_
24、InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_6 | GPIO_Pin_8 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/输出上拉 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Configure PA.08, PA.10 and PA.12 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_10
25、 | GPIO_Pin_12 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/输出上拉 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure PD.10, PD.12 and PD.08 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_12 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode =
26、 GPIO_Mode_Out_PP;/输出上拉 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); /* Configure PE.07, PE.11 and PE.15 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_11 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/输出上拉 GPIO_InitStructure.GPIO_
27、Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); LED1(OFF);LED2(OFF);LED3(OFF);LED4(OFF);LED5(OFF);LED6(OFF);LED7(OFF);LED8(OFF);LED9(OFF);LED10(OFF);LED11(OFF);LED12(OFF);内联函数定义LED函数部分:#ifndef _LED_H#define _LED_H#includestm32f10x.h#defineON 0#define OFF 1/*内联函数定义LED函数*/#define LED1
28、(a)if (a)GPIO_SetBits(GPIOB,GPIO_Pin_8);elseGPIO_ResetBits(GPIOB,GPIO_Pin_8)#define LED4(a)if (a)GPIO_SetBits(GPIOA,GPIO_Pin_12);elseGPIO_ResetBits(GPIOA,GPIO_Pin_12)#define LED7(a)if (a)GPIO_SetBits(GPIOD,GPIO_Pin_10);elseGPIO_ResetBits(GPIOD,GPIO_Pin_10)#define LED10(a)if (a)GPIO_SetBits(GPIOE,GPI
29、O_Pin_15);elseGPIO_ResetBits(GPIOE,GPIO_Pin_15)#define LED2(a)if (a)GPIO_SetBits(GPIOB,GPIO_Pin_6);elseGPIO_ResetBits(GPIOB,GPIO_Pin_6)#define LED5(a)if (a)GPIO_SetBits(GPIOA,GPIO_Pin_10);elseGPIO_ResetBits(GPIOA,GPIO_Pin_10)#define LED8(a)if (a)GPIO_SetBits(GPIOD,GPIO_Pin_12);elseGPIO_ResetBits(GPI
30、OD,GPIO_Pin_12)#define LED11(a)if (a)GPIO_SetBits(GPIOE,GPIO_Pin_11);elseGPIO_ResetBits(GPIOE,GPIO_Pin_11)#define LED3(a)if (a)GPIO_SetBits(GPIOB,GPIO_Pin_9);elseGPIO_ResetBits(GPIOB,GPIO_Pin_9)#define LED6(a)if (a)GPIO_SetBits(GPIOA,GPIO_Pin_8);elseGPIO_ResetBits(GPIOA,GPIO_Pin_8)#define LED9(a)if
31、(a)GPIO_SetBits(GPIOD,GPIO_Pin_15);elseGPIO_ResetBits(GPIOD,GPIO_Pin_15)#define LED12(a)if (a)GPIO_SetBits(GPIOE,GPIO_Pin_7);elseGPIO_ResetBits(GPIOE,GPIO_Pin_7)void LED_GPIO_Configuration(void);#endif8 Keil软件的运用与调试根据事先画好的程序流程图,用C语言编写程序,并成功生成HEX文件,利用keil软件编译结果如图8.1 所示。图8.1 编译结果示意图调试过程截图:设计为系统上电即点亮车道
32、红灯以及马路绿灯,倒计时1000ms红灯开始闪烁,同时马路红灯亮,红灯闪1000ms接着转为黄灯闪1000ms,然后车辆通道转为绿灯亮,1000ms后绿灯闪1000ms,黄灯再闪1000ms之后又回到红灯亮,人行道只在车辆通道红灯时才亮绿灯。这主要靠在中断服务程序中对计数值flag的判断来对正在点亮的灯进行定时实现程序详细清单见附录。9 实物演示照片10 作品电路的PCB图在设计好软件流程图以及焊接好硬件电路后,用Altium Designer软件进行电路的PCB设计,下图是主电路芯片的PCB: 11 设计心得体会及总结1、因为设计中所用的一些工具,平时虽然接触过,但研究不够深入,所以此次课程
33、设计在选好题目之后对设计所需资料进行了系统查询和整理,其中包括了我们学习过程中用到的课本和网上搜索的期刊文献等;2、此次嵌入式实验是比较全面的一个实验,所涉及的内容十分广泛,包括底层硬件结构以及上层操作系统、驱动程序等方面,在实验过程中虽然遇到了各种各样的问题,但解决问题的同时也锻炼了我们分析问题的能力以及动手能力,做完后感觉获益匪浅;3、回顾此次ARM课程设计,我感慨很多,在这几星期里,可以说苦多于甜,但是确实又学到了很多东西,不仅巩固了以前所学的知识,而且学到了很多书本上没有的新的知识。在设计调试的过程中遇到了各种各样的问题,同时也发现了自己的不足之处;4、在编译和调试的过程中,由进一步加
34、强了自己编程和改错的能力,通过研究这方面的课题,可以更深刻地理解交通信号灯的整个过程,同时也加强了嵌入式学习的技巧。由于时间的关系,只能做到这些功能,我知道想要实现功能更强大的交通信号灯,还有大量的工作要做,希望以后还可以进一步接触此类设计。参考书目1周立功等编著.ARM微控制器基础与实战. 北京:北京航空航天大学出版社,2003.2曹东源,高爱坤,田小平.智能交通与城市交通缓堵.中国期刊网,2006,第23卷第四期3王田苗主编.嵌入式系统设计与实例开发. 北京:清华大学出版社,2002.4符意德主编.嵌入式系统设计原理及应用. 北京:清华大学出版社,2004.5王勇编著.嵌入式系统原理与设计. 杭州:浙江大学出版社,2007.6马忠梅.ARM嵌入式处理器结构与应用. 北京:北京航空航天大学出版社,200221