基于Cortex-M3的STM32的嵌入式十字路口交通灯系统设计_第1页
基于Cortex-M3的STM32的嵌入式十字路口交通灯系统设计_第2页
基于Cortex-M3的STM32的嵌入式十字路口交通灯系统设计_第3页
基于Cortex-M3的STM32的嵌入式十字路口交通灯系统设计_第4页
基于Cortex-M3的STM32的嵌入式十字路口交通灯系统设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

天津工业大学 嵌入式系统课程设计报告 十字路口交通灯控制系统 学 院: 电子与信息工程学院 专业班级: 电子 1102 班 姓 名: 刘楠楠 学 号: 时 间: 2014 年 11 月 30 号 指导教师: 高华老师 摘要摘要 随着移动设备的流行和发展,嵌入式系统已经成为一个热点。它并不是最 近出现的新技术,只是随着微电子技术和计算机技术的发展,微控制芯片功能 越来越大,而嵌入微控制芯片的设备和系统越来越多,从而使得这种技术越来 越引人注目。它对软硬件的体积大小、成本、功耗和可靠性都提出了严格的要 求。嵌入式系统的功能越来越强大,实现也越来越复杂,随之出现的就是可靠 性大大降低。最近的一种趋势是一个功能强大的嵌入式系统通常需要一种操作 系统来给予支持,这种操作系统是已经成熟并且稳定的,可以是嵌入式的 Linux,WINCE 等等。本文所要研究的就是基于 ARM 嵌入式系统的交通灯系 统的设计与实现。本设计采用了 ARM32 位的 Cortex-M3 CPU 的内核的 STM32 作为核心处理器。 关键词:嵌入式 交通灯 STM32f103 ARM AbstractAbstract 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 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 function 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, WINCE 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 四四 作品方案设计作品方案设计.2 4.1设计思路 .2 4.2总体设计框图 .3 4.3总体方案设计参数计算 .4 五五 系统硬件电路设计及分析系统硬件电路设计及分析.4 5.1STM32f103 芯片介绍及选用 .4 5.2单片机电路原理图及分析 .4 5.3电源电路模块原理图及分析 .5 5.4晶振与复位电路模块原理图 .5 5.5LED 交通灯电路原理图及分析 .6 六六 系统软件设计及其分析系统软件设计及其分析.7 6.1软件设计流程图 .8 6.2ARM 交通灯控制软件设计 .8 七七 系统系统软件代码软件代码.9 7.1 软件设计流程图 9 7.2 部分程序代码10 八八 KeilKeil 软件的运用与调试软件的运用与调试 16 九九 实物演示照片实物演示照片17 十十 作品电路的作品电路的PCBPCB 图图 19 十一十一 设计心得及体会设计心得及体会20 十二十二 参考文献参考文献 21 1 1 引言引言 交通信号灯指挥着人和各种车辆的安全运行,实现红、黄、绿灯的自动指 挥是城乡交通管理现代化的重要课题。在城乡街道的十字交叉路口,为了保证 交通秩序和行人安全,一般在每条道路上各有一组红、黄、绿交通信号灯,其 中红灯亮,表示该条道路禁止通行; 黄灯亮,表示该条道路上未过停车线的车 辆停止通行,已过停车线的车辆继续通行;绿灯亮,表示该条道路允许通行。 交通灯控制电路自动控制十字路口两组红、黄、绿交通灯的状态转换,指挥各 种车辆和行人安全通行,实现十字路口城乡交通管理自动化。 本文为了实现交通道路的管理,力求交通管理先进性、科学化。 分析应用 了单片机实现智能交通灯管制的控制系统,以及该系统软、硬件设计方法,实 验证明该系统实现简单、经济,能够有效地疏导交通,提高交通路口的通行能 力。 2 相关内容及原理相关内容及原理 通过设计,培养自己综合运用所学知识、独立分析和解决实际问题的能力, 培养创新意识和创新能力,并获得科学研究的基础训练,加深对 ARM 芯片的 了解;熟悉 ARM 芯片各个引脚的功能,工作方式,计数/定时,I/O 口,中断 等相关原理,巩固学习嵌入式的相关内容知识。 利用 ARM 芯片模拟实现交通灯控制,自行选择所需 ARM 芯片,查阅相关 文献资料,熟悉所选 ARM 芯片,了解所选 ARM 芯片各个引脚功能,工作方式, 计数/定时,I/O 口,中断等相关原理,通过软硬件设计实现利用 ARM 芯片完 成交通灯的模拟控制。 3 作品设计要求作品设计要求 要求基于 Cortex 系列单片机设计一具有模拟道路路口交通灯相应功能的交 通灯模拟系统。具体要求如下: 2 (1)具有三种颜色显示:红色、绿色和黄色,分别代表路口交通灯的三种 颜色。 (2)所设计的系统应至少能够模拟两个路口的功能,具有直行和左转的功 能。 (3)如果能力和时间允许,可以加入操作系统。 (4)适当加入一些其他元素,使其更加具有人性化设计。 4 作品作品方案设计方案设计 4.1 设计思路设计思路 利用 STM32F103 芯片实现单路交通灯的控制: a 实现红、绿、黄灯 的循环控制。使用红、黄、绿三种不同颜色的 LED 灯实现此功能,主干道正前 方方向的 LED 灯,编号分别为 1、2、3,分别接在单片机的 PB8、PB6、PB9 的 引脚上;主干道右方的 LED 灯,编号分别为 4、5、6,分别接在单片机的 PA14、PA10、PA8 的引脚上;主干道后侧的 LED 灯,编号分别为 7、8、9,分别 接在单片机的 PD10、PD12、PD14 引脚上。主干道左方的 LED 灯,编号分别为 10、11、12,分别接在单片机的 PE7、PE11、PE15 引脚上。以此实现四个路口 的交通灯模拟系统。用软件控制灯的亮与灭来控制车辆和行人的通行。 交通路口示意图如图 4.1 车辆遇到红灯停绿灯行的行走情况,红绿灯时 间均为 2000ms,切换时间为 2000ms,最后 2000ms 为黄灯闪烁。 道 路 道 路 3 图 4.1 交通路口示意图 4.2 总体设计框图总体设计框图 用 ARM 系列芯片 STM32F103 作为系统的主控芯片,控制交通灯的循环点亮 并显示灯亮时间(采用倒计时显示),当定时时间到的时候通过灯的状态来提 醒人们注意红绿灯的状态。 交 通 灯 循 环 态 状 换 切 STM32F103 倒 计 时 显 示图 4.2 交通灯总体设计框图 5 硬件电路模块设计硬件电路模块设计及其分析及其分析 根据设计任务要求,自行选择电子元件,画出电气原理图,并调试。一个 完整的系统除了主控芯片以外,还需配上电源系统、时钟电路、复位电路等。 独立的芯片是不能工作的。 5.1 STM32F103 芯片介绍芯片介绍 STM32F103 是基于一个支持实时仿真和嵌入式跟踪的 32 位 CPU 的微控制 器,STM32F1 系列属于中低端的 32 位 ARM 微控制器,该系列芯片是意法半导体 (ST)公司出品,其内核是 Cortex-M3。该系列芯片按片内 Flash 的大小可分 为三大类:小容量(16K 和 32K)、中容量(64K 和 128K)、大容量 (256K、384K 和 512K)。芯片集成定时器, CAN,ADC,SPI,I2C,USB,UART,等多种功能。 具有以下一些特性: ARM 32 位的 Cortex-M3 4 最高 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 个输入通道),转换范 围: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 为 STM32F103 芯片的原理图,多达 100 个引脚,采用 3.3V 或者 5V 电源供电,设计所需外接器件的网络名已经标出。 5 图 5.1 STM32F103 芯片的原理图 5.3 系统电源电路设计系统电源电路设计 本电源运用 5V 的直流电源(图 5.2 所示)。通过 LM78 系列芯片将 5V 电压 转换为电压,为 STM32F103 芯片供电,STM32F103 芯片所能承受的电压范围 是 2V3.6V。 图 5.2 直流电源电路设计 6 5.4 晶振与复位电路晶振与复位电路模块模块 系统的晶振电路如图 5.4 所示 STM32f103 芯片采用 8MHz 的晶振作为振荡时 钟源,外部是倍频 72MHz 晶振。通过对芯片的进行软件设计可以将晶体振荡器 的频率分频为所需的频率;系统的复位电路如图 5.5 所示,STM32F103 芯片的 14 号引脚连接到主控芯片的复位引脚(nRST)上,按下复位键 S2 时,系统将 会复位到初始的状态。 图 5.4 系统的晶振电路图 图 5.5 系统的复位电路图 5.5 LED 循环显示设计循环显示设计 由南向北和由北向南车道各用一组红、绿、黄三色的指示灯,左右两侧也 是各三个灯,指挥车辆通行。绿灯是通行信号,面对绿灯的车辆可以直行,红 灯是禁止通行信号,面对红灯的车辆必须在路口的停车线后停车。黄灯是警告 信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全 停车时可以继续行进。具体红绿灯时间分配时间如表 5.1 所示。 表 51:红绿灯时间分配时间如表 1000ms1000ms1000ms1000ms1000ms1000ms 主干通道绿灯亮黄灯闪红灯亮黄灯闪红灯亮黄灯闪 左右道路红灯亮红灯亮绿灯亮绿灯亮红灯亮红灯亮 上表说明主干通道绿灯亮、黄灯闪时人行道都是红灯亮,只有车道 红灯亮(车辆完全停下来)时人行道绿灯才亮,这样保证了过马路的行人人身 7 安全,避免了不必要的交通事故。硬件电路连接图如图 5.6 所示 D1 D2 D3 D4 D5 D6 D7 D8 VDD3.3 100R1470 100R2470 100R3470 100R5470 100R4470 100R6470 100R7470 100R8470 P1.18 P1.19 P1.20 P1.21 P1.22 P1.23 P1.24 P1.25 LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED8 图 5.6 硬件电路连接图 交通灯 LED 的发光和熄灭的控制,是通过控制 GPIO 寄存器组来完成的,须 先将引脚 PA、PB、PD、PE 等通过引脚功能选择寄存器 PINSEL1,设置为 GPIO 方式;再设置 GPIO 方向寄存器 1(IO1DIR),对应的引脚设置为输出方向。要 点亮 LED1LED12 需要使用 GPIO 清零寄存器 1(IO1CLR)的对应位设置为 1, 即在引脚 PA、PB、PD、PE 上加逻辑低电平,即可点亮这些灯。与之相反,要熄 灭这些灯,则要用 GPIO 输出置位寄存器 1(IO1SET)将对应的位置位即可。 6 系统软件设计系统软件设计及其分析及其分析 6.1 软件设计流程图软件设计流程图 图 6.1 为 ARM 模拟交通灯控制程序流程图,主程序主要完成倒计时显示及 控制蜂鸣器,中断服务程序主要控制那些灯亮以及亮的时间。 8 开始 定时器 0 初始化 初始化中断,开 中断 倒计 时显示 中断服务程序流程图 系统保护现场 车道红灯计 数变量-1 车道绿灯闪 烁计数-1 车道红灯闪 烁计数-1 黄灯闪烁计 数-1 车道闪烁黄 灯计数-1 车道绿灯计 数-1 0=Flag 50 115=flag 120 110=flag 115 60=flag 110 50=flag 55 中断返回 55flag6 0 flag=1 20 flag=0,清零计 数变量 N Y N N N N N Y Y Y Y Y N flag=5 5or115 交换状态 N Y 主程序流程图 图 6.1 ARM 模拟交通灯控制程序流程图 6.2 ARM 交通灯模拟控制程序设计交通灯模拟控制程序设计 定时器控制原理:定时器对外设时钟 Fpclk 周期进行计数,根据 4 个匹配 寄存器的设定可设置为匹配(即达到匹配寄存器指定的定时值)时产生中断或 执行其他操作。 设置 P0、P1 口为 GPIO 输出状态,初始化定时器,选定定时器 0 中断为向 9 量 IRQ,对 VICIntEnable、VICIntSelect、VICvectCntl 进行设置,初始化 SPI 接口,根据设计要求编写软件程序。根据事先画好的程序流程图,用 C 语言编 写程序,在主程序中对需要用到的 I/O 口进行定义,并设置相应的 I/O 口,比 如要求 P1。18P1。25 引脚为 GPIO 功能,则通过对引脚功能选择 寄存器 PINSEL1 将对应的引脚设置为 GPIO 方式并设置 GPIO 方向,在 GPIO 方向寄存器 IO1DIR 里设置,之后对定时器 0 进行初始化,并开相应的中断。然后进入大循 环进行倒计时显示、控制蜂鸣器的蜂鸣与否并判断 flag 是否加到设定值,对 flag 加到设定值后进行清零,让 flag 重新计数。中断服务程序的设计,每隔 一秒钟定时器中断一次,每中断一次 flag 加 1 根据 LED 点亮的先后顺序以及点 亮的时间,分别编写相应的程序。 7 系统软件代码系统软件代码 7.1 软件设计流程图软件设计流程图 10 开始 直行灯亮 结束? 否 黄灯闪烁 是 结束? 否 右行灯亮 是 结束? 否 黄灯闪烁 是 结束? 否 是 左行灯亮 图 7.1 软件设计流程图 7.2 系统软件代码系统软件代码 主程序部分:主程序部分: #include stm32f10 x.h #include led.h #includetimer.h u32 time=0;/Ms 级延时变量 int i; int main(void) 11 LED_GPIO_Configuration(); TIM2_Config1(); TIM2_NVIC_Config1(); TIM_Cmd(TIM2,ENABLE);/开启 TIM2 while(1) i=0; Delay_MS(2000); LED2(ON);LED4(ON);LED7(ON);LED10(ON);/直行灯亮 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+; 12 LED5(OFF);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);LED4(OFF);LED10(OFF);LED8(OFF);/后行灯灭 底层寄存器配置部分:底层寄存器配置部分: void LED_GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; /*开启 GPIOC /* Configure PB.04, PB.06 and PB.08*/ 13 GPIO_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, /* Configure PA.08, PA.10 and PA.12 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_12 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/输出上拉 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, /* 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 = GPIO_Mode_Out_PP;/输出上拉 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, /* 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_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, LED1(OFF);LED2(OFF);LED3(OFF);LED4(OFF);LED5(OFF);LED6(OFF);LED7(OFF);L ED8(OFF);LED9(OFF);LED10(OFF);LED11(OFF);LED12(OFF); 14 内联函数定义内联函数定义 LEDLED 函数部分:函数部分: #ifndef _LED_H #define _LED_H #includestm32f10 x.h #defineON 0 #define OFF 1 /*内联函数定义 LED 函数*/ #define LED1(a)if (a) GPIO_SetBits(GPIOB,GPIO_Pin_8); else GPIO_ResetBits(GPIOB,GPIO_Pin_8) #define LED4(a)if (a) GPIO_SetBits(GPIOA,GPIO_Pin_12); else GPIO_ResetBits(GPIOA,GPIO_Pin_12) #define LED7(a)if (a) GPIO_SetBits(GPIOD,GPIO_Pin_10); else GPIO_ResetBits(GPIOD,GPIO_Pin_10) #define LED10(a) if (a) GPIO_SetBits(GPIOE,GPIO_Pin_15); else GPIO_ResetBits(GPIOE,GPIO_Pin_15) #define LED2(a)if (a) GPIO_SetBits(GPIOB,GPIO_Pin_6); else GPIO_ResetBits(GPIOB,GPIO_Pin_6) #define LED5(a)if (a) GPIO_SetBits(GPIOA,GPIO_Pin_10); 15 else GPIO_ResetBits(GPIOA,GPIO_Pin_10) #define LED8(a)if (a) GPIO_SetBits(GPIOD,GPIO_Pin_12); else GPIO_ResetBits(GPIOD,GPIO_Pin_12) #define LED11(a) if (a) GPIO_SetBits(GPIOE,GPIO_Pin_11); else GPIO_ResetBits(GPIOE,GPIO_Pin_11) #define LED3(a)if (a) GPIO_SetBits(GPIOB,GPIO_Pin_9); else GPIO_ResetBits(GPIOB,GPIO_Pin_9) #define LED6(a)if (a) GPIO_SetBits(GPIOA,GPIO_Pin_8); else GPIO_ResetBits(GPIOA,GPIO_Pin_8) #define LED9(a)if (a) GPIO_SetBits(GPIOD,GPIO_Pin_15); else GPIO_ResetBits(GPIOD,GPIO_Pin_15) #define LED12(a) if (a) GPIO_SetBits(GPIOE,GPIO_Pin_7); else GPIO_ResetBits(GPIOE,GPIO_Pin_7) void LED_GPIO_Configuration(void); #endif 16 8 Keil 软件的运用与调试软件的运用与调试 根据事先画好的程序流程图,

温馨提示

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

评论

0/150

提交评论