基于STM32单片机的交通灯控制系统设计

摘 要

     随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术本模拟交通灯系统利用单片机STM32F103C6作为核心元件,实现了通过信号灯对路面状况的智能控制。从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广泛的应用前景。 

  本模拟系统由单片机硬/软件系统,位8段数码管和LED灯显示系统等组成,较好的模拟了交通路面的控制。 

关键词:交通灯,单片机 ,数码管 ,LED灯

引 言

    当今,红绿灯安装在个个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这个技术在19世纪就已经出现了。 

    1858年,在英国伦敦主要街头安装了以燃煤气为光源的红、蓝两色的机械般手势信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的会议大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转方式玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,是警察受伤,遂被取消。

    电气启动的红绿灯出现在美国,这种红绿灯由红黄绿三色圆形的投光器组成,1914年始装于纽约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行”。 

    信号灯的出现,使得交通得以有效的管理,对于疏导交通流量、提高道路通行能力、减少交通事故有明显效果。1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。绿灯时通行信号灯,面对绿灯的车辆可以直行,左转弯和右转弯,除非两一种标志禁止某一种转向。左右转弯车辆必需让合法的正在路口内行驶的车辆和过人行横线的行人优先通行。红灯是禁行信号灯,面对红灯的车辆必需在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已经十分接近停车线而不能安全停车的可以进入交叉路口。

1.设计背景

1.1课题背景

随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术本交通灯控制系统利用单片机STM32F103C6作为核心元件,实现了通过信号灯对路面状况的智能控制。从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广泛的应用前景。

1.2设计内容

本设计主要是介绍了单片机控制下的交通灯控制系统,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下

    东西、南北两干道交于十字路口,各干道有一组红、绿、黄三个指示灯,指挥车辆和行人安全通行。南北方向为主干道,通行时间为9秒;东西方向为支干道,通行时间为15秒。通行时间最后2秒,绿灯灭,黄灯常亮,黄灯完变更通行车道。通行时间由数字显示器显示


2交通灯控制系统系统简介

2.1方案选择

    方案一:利用PLC实现对交通灯控制,其可靠性高,抗干扰能力强。对于交通灯这种特殊装置,其可靠性是至关重要的,因为交通灯控制系统中途若发生什么意外,其后果是不堪设想。而且PLC系统的设计、制造工作量小,维护方便,体积小、重量轻、能耗低,还可以进行智能化控制以更有效、合理地控制交通。但是使用PLC控制也有缺点,因为PLC比起其它控制系统,其价格较贵,一般一台小型的PLC价格最便宜的也在二三千元以上。  

    方案二:运用单片机对交通灯系统进行实现,使用51单片机为主控核心,通过软件来控制过往车辆的正常运作。同时它也具有如下的优点: 

(1)单片机体积小巧、使用灵活、成本低,易于真正产品化。组装各种智能式控制设备和仪器,能做到机电仪一体化。 

(2)面向控制。能有针对性地解决各种从简单到复杂的各类控制任务,因而能获得最佳的性能价格比。 

(3)抗干扰能力强,适应温度范围宽,在各种恶劣的环境下都能可靠的工作。这是其它微机集中无法比拟的。 

(4)可以方便的实现多机、分布式的集散控制,使整个控制系统的效率大大地提高。 

(5)单片机应用产品的研制周期短,所开发出来的样机就是以后批量生产的产品,可以避免不必要的二次开发过程。 

综上所述,比较5种交通灯控制装置的优点与缺点,根据交通灯所工作的特殊环境,体积小巧、使用灵活、成本低,易于真正产品化面向控制抗干扰能力强,适应温度范围宽可以方便的实现多机、分布式的集散控制便等特点,现在拟采用单片机来控制交通灯。

本设计研究的是基于STM32F103C6单片机的交通灯智能控制系统。根据交通控制系统的设计原理,阐述了硬件和软件方面开发的整个过程。主控系统采用STM32F103C6单片机作为控制器,控制通行倒计时及右拐、右拐、直行,占用端口少,耗电也最小。,有各种成熟电路可供选用,使此方案可靠稳定。该设计可直接在I/O口上接按键开关,精简并优化了电路。结合实际情况,显示界面采用LED提示和数码管计时的方法,满足了倒计时的时间显示输出和状态灯提示信息输出的要求,减少系统的复杂度。

2.2系统设计原理

开机上电便处于正常运行状态,南北方向通行9秒后变为东西方向通行12秒,如此循环一次,使得东西方向和南北方向交替通行。 

显示系统则显示到下一次改变通行方向所剩的时间,利于司机调整车辆状况。每到通行方向转换时,正在通行的方向绿灯熄灭,变为黄灯常亮,提醒司机注意通行方向的改变,避免不必要的危险。 

延时方法可以有两种,一种是利用内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。本程序的倒计时采用软件延时。


3.系统硬件设计

    根据上面的功能要求,硬件系统主要有单片机模块、指示灯模块和倒计时显示模块。各模块选择如下

3.1主控制器选择

主控芯片采用STM32F103C6单片机,其管脚图下图所示。 

图3.1  STM32F103C6引脚图

STM32F103C6是STM32系列单片机的典型产品,STM32单片机有很多个系列,其中包括基本型、USB基本型、增强型以及互联型几大系列,这写系列的STM32单片机都是具有性能高、功耗低、成本低等特点。其内部结构图如图 3.2所示:

图 3.2  STM32内部结构图

本课题采用的是STM32F103C6单片机芯片,这是是一款ARM M3内核的增强型微控制器,这款内核的工作频率是能够达到72MHz的,它拥有着128K字节的闪存和极其丰富的外设,如GPIO口,串口,定时器,中断,数模转换,实时时钟,看门狗,SPI,IIC,CAN总线等部分组成。STM32F103系列单片机的性能在同一个类别的产品中是最高的,它能够在-40°C -85°C温度下正常地进行工作,工作的电压范围为2V-3.6V,具有低功耗的节能工作模式,闪存存储器的容量为64K字节。

图3.3  系统硬件结构图

电源电路:本课题电源由USB接口提供5V直流电。

复位电路:按键SW1接入高电平到STM32内部NRST引脚,NRST上脉冲只要持续大于300ns的即可触发单片机复位。

晶振电路:外接8M晶振,通过倍频产生最高72MHz工作频率。

下载电路:本课题选用SWD下载电路,只需要引出SWDIO、SWCLK、VCC3.3V、GND,在MDK下载选项中选择SWD即可下载程序到单片机上。

3.3 指示灯及倒计时模块

    (1)指示灯模块: 

    设计电路中每个路口的控制信号灯应有三个,即红灯、黄灯、绿灯各一个。因此,本电路的设计中应用到红灯、黄灯、绿灯个四个。同一方向的两个路口的同一颜色指示灯是同时亮灭,为简化电路,可让这两个灯接同一引脚。这样可用P1口控制所有的指示灯。 

按照设计,指示灯采用红/绿/黄三种发光二极管。该组件及其与单片机引脚的接法如下:

表3.1  引脚接口

东西方向

南北方向

指示灯

绿

绿

引脚

PA12

PA14

PA13

PA9

PA11

PA12

    (2)倒计时模块:

利用四个两位数码管,因为南北方向和东北方向的倒计时时间是一样的,所以倒计时实际上只有两个显示。

图3.4 倒计时显示模块

3.4系统总体电路图

图3.5 系统总体电路图

  1. 系统软件设计简介

4.1 系统主程序流程 

开机上电便处于正常运行状态,南北方向通行9秒后变为东西方向通行12秒,如此循环,使得东西方向和南北方向交替通行。 

显示系统则显示到下一次改变通行方向所剩的时间,利于司机调整车辆状况。每到通行方向转换时,正在通行的方向绿灯熄灭,变为黄灯闪烁,提醒司机注意通行方向的改变,避免不必要的危险。 

延时方法可以有两种,一种是利用STM32内部定时器3溢出中断来确定1秒的时间,另一种是采用软延时的方法。本程序的倒计时采用软件延时。     

4.2 定时器软件设计 

关键代码

//通用定时器3中断初始化

//arr:自动重装值。

//psc:时钟预分频数

//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.

//Ft=定时器工作频率,单位:Mhz

//这里使用的是定时器3!

void TIM3_Init(uint16_t arr, uint16_t psc)

{  

TIM3_Handler.Instance=TIM3;                          //通用定时器3

TIM3_Handler.Init.Prescaler=psc;                     //分频系数

TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器

TIM3_Handler.Init.Period=arr;                        //自动装载值

TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子

HAL_TIM_Base_Init(&TIM3_Handler);

HAL_TIM_Base_Start_IT(&TIM3_Handler); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE   

}

//定时器底册驱动,开启时钟,设置中断优先级

//此函数会被HAL_TIM_Base_Init()函数调用

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)

{

  if(htim->Instance==TIM3)

{

__HAL_RCC_TIM3_CLK_ENABLE();            //使能TIM3时钟

HAL_NVIC_SetPriority(TIM3_IRQn,1,0);    //设置中断优先级,抢占优先级1,子优先级3

HAL_NVIC_EnableIRQ(TIM3_IRQn);          //开启ITM3中断   

}

}

4.3 指示灯软件设计 

从硬件原理上看,单片机IO口控制输出低电平的时候指示灯点亮,单片机IO口控制输出高电平的时候指示灯灭。

具体代码如下:

if(mode) //mode=0,表示进入南北通行模式(南北绿灯+南北黄灯)

{

LED_NBR_OF();LED_NBY_OF();LED_NBG_ON(); //南北方向,亮绿灯

LED_DXR_ON();LED_DXY_OF();LED_DXG_OF(); //东西方向,亮红灯

if(temp_bei == 0) //南北方向,倒计时结束时

{

if(temp_xi == 0) //多出来3秒的东西方向,也倒计时结束了

{

mode = 0; //进入东西方向绿灯模式

temp_xi  = xi_dong_time; //提前更新东西方向的倒计时时间

temp_bei = temp_xi + YELLOW_TIME; //更新南北方向的时间,为东西方向+3秒

LED_NBR_ON();LED_NBY_OF();LED_NBG_OF(); //南北方向,亮红灯

LED_DXR_OF();LED_DXY_OF();LED_DXG_ON(); //东西方向,亮绿灯

}

else //南北方向已经结束,但是东西方向多出来的3秒未结束(3秒黄灯时间)

{

temp_xi--; //剩余的3秒,倒计时-1秒

// temp_bei = temp_xi;//南北方向黄灯时间

LED_NBR_OF();LED_NBY_ON();LED_NBG_OF(); //南北亮黄灯

LED_DXR_ON();LED_DXY_OF();LED_DXG_OF(); //东西亮红灯

}

}

else

{

temp_bei--; //南北方向。计时为-1秒

temp_xi = temp_bei + YELLOW_TIME; //更新东西方向的倒计时时间

}

}

4.4 数码管显示程序设计

switch(led_temp)

{

case 0:

SEG_1(0);SEG_2(1);SEG_3(1);SEG_4(1); //打开第一个数码管

Dsg_Display(data_table[0]); //将第一个数送至数码管

break;

case 1:

SEG_1(1);SEG_2(0);SEG_3(1);SEG_4(1); //打开第二个数码管

Dsg_Display(data_table[1]); //将第二个数送至数码管

break;

case 2:

SEG_1(1);SEG_2(1);SEG_3(0);SEG_4(1); //打开第三个数码管

Dsg_Display(data_table[2]); //将第三个数送至数码管

break;

case 3:

SEG_1(1);SEG_2(1);SEG_3(1);SEG_4(0); //打开第四个数码管

Dsg_Display(data_table[3]); //将第四个数送至数码管

break;

}

关键代码介绍

该函数用于动态扫描数码管。输入参数 led_temp==0 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示,如输入0表示从第一个显示。先清除数据,清段锁存。然后选择位码。开位锁存将数据存在位锁存器,选择到了需要显示的数码管。位锁存完成后将数据写进段锁存数据,将需要显示的数据写到数码管中。

  1. Proteus软件仿真

5.1 Proteus软件介绍

图5.1 启动页面

    Proteus软件是英国Labcenter electronics公司出版的EDA工具软件,可完成从原理图布图、PCB设计、代码调试到单片机与外围电路的协同仿真,真正实现了从概念到产品的完整设计,是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。Proteus软件主要具有以下特点: 

 (1)具有强大的原理图绘制功能。 

 (2)实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路的系统仿真、RS232动态仿真、I2

C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

 (3)支持主流单片机系统的仿真。目前支持的单片机类型有:STM32系列、68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。 

 (4)提供软件调试功能。具有全速、单步、设置断点等调试功能,同时可以观察各变量以及寄存器等的当前状态,并支持第三方编译和调试环境,如wave6000、Keil等软件。

图5.2 软件预览页面

图5.2 交通控制系统运行(东西通行)

图5.3 交通控制系统运行(东西等待)

图5.4 交通控制系统运行(南北通行)

图5.5 交通控制系统运行(南北等待)

图5.6 设置东西方向绿灯通行时间

图5.7 设置南北方向绿灯通行时间

图5.8 紧急运行模式

STM32交通信号灯系统是一种基于STM32控制器的交通信号灯控制系统。它通过使用STM32控制器来实现信号灯的控制和管理,以确保交通流畅和安全。 该系统通常由以下几个主要组件组成: 1. STM32控制器:作为系统的核心,负责控制信号灯的状态和时序。 2. 信号灯模块:包括红、黄、绿三种颜色的LED灯,用于指示不同的交通状态。 3. 传感器:用于检测交通流量和车辆状态,例如车辆检测器、红外线传感器等。 4. 控制电路:用于将STM32控制器的输出信号转换为适合驱动LED灯的电压和电流。 5. 电源模块:为整个系统提供稳定的电源供应。 系统的工作原理如下: 1. STM32控制器通过读取传感器的输入信号来获取交通流量和车辆状态信息。 2. 根据获取到的信息,STM32控制器根据预设的交通信号灯时序,控制LED灯的亮灭状态。 3. 当交通流量较大时,STM32控制器会相应地延长绿灯亮起的时间,以确保交通流畅。 4. 当交通流量较小或无车辆通过时,STM32控制器会相应地延长红灯亮起的时间,以确保其他方向的车辆安全通行。 该系统的优点包括: 1. 精确控制STM32控制器可以精确控制信号灯的时序和状态,以适应不同的交通情况。 2. 高效能耗:通过根据实际交通流量调整信号灯的亮灭时间,可以减少能源的浪费。 3. 可靠性:STM32控制器具有高可靠性和稳定性,可以长时间运行而不容易出现故障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值