【STM32F103R6开发】【单片机】模拟交通灯(proteus仿真+源代码+调时+特殊按键)课程设计

1.系统设计

1.1 系统功能设计

       基于此前对该系统的功能需求分析以及对用STM32F103R6芯片进行仿真模拟情况的相关了解,我们设计了信号灯基本控制子系统、信号灯特殊控制子系统以及信号灯调时控制子系统。

1.1.1 信号灯基本控制子系统

        为了简单演示信号灯基本的循环控制功能,本次只考虑南北直行以及东西直行这两种最基本的十字交叉口的控制情况。结合道路上的相关调研情况,经过综合考虑后将信号灯基本控制流程设计如下图所示:

3e3677937bb44428901c4d82d6729e1e.png

1.1.2 信号灯特殊控制子系统

        在实际的道路场景中,往往会出现类似于警车、救护车、消防车通行等多种道路紧急情况,除此之外,当道路上的通行情况出现极端变化时,例如某一方向的通行需求量巨大,而另一向的通行需求量几乎为0。凡此种种,都属于交叉口通行的特殊情况,需要通过合适的信号灯控制来完成特殊引导。因此,为信号灯特殊控制也进行了流程设计,如下图所示:

ff6d86e4eed940629d9287d9587ad1f3.png1.1.3 信号灯调时控制子系统

       除了基本的两向交替通行控制以及特殊情况下的道路强制控制,在大部分的交通控制当中,更多的是需要根据实时的路况信息来对不同方向的通行时间进行调整,从而有效地降低交叉口的整体车辆延误情况,提升交叉口的服务水平。基于上述考虑,设计了信号灯调时控制子系统,其处理流程图如下:

937dc53bdb8046d4a7de934136299cbf.png

 1.2 数据结构设计

       基于STM32F103R6芯片的最小系统来实现对十字交叉口的双向交通信号控制,其中采用两位共阳极数码来模拟显示信号灯灯的倒计时;采用红、黄、绿三种颜色的LED灯来模拟交叉口的各向通行状态;采用不同的按键来模拟对交叉口的特殊控制以及调时控制。为了能够充分模拟其控制功能,首先搭建起了这些硬件模型的之间数据联系。 

1.2.1 整体数据模型

811ffab0c4a846a29fe6719f3f391628.png

        在基于STM32设计的整个交通灯控制系统中,主要由四个硬件实体来进行实际的信号控制。

        ①STM32F103R6芯片:该芯片是意法半导体的一款基于ARM Cortex-M3内核的32位微控制器芯片。它具有高性能、低功耗、强大的集成能力和广泛的外设接口,适用于各种应用领域。该芯片具有64KB的闪存和20KB的SRAM,最高工作频率为72MHz。它还具有多种通信接口,如Usart、SPI和I2C,以及多种外设接口,如ADC、DAC、定时器和PWM等。此外,该芯片还支持USB、CAN和SDIO接口,可满足更高级别的应用需求。STM32F103R6还具有多种保护机制,包括电源管理、复位和时钟控制等,确保系统的可靠性和稳定性。该芯片可在工业控制、消费电子、医疗设备、汽车电子等多个领域广泛应用。

        因此,采用该芯片进行系统设计,通过控制的引脚的状态进而控制外设,是实现最底层控制逻辑的关键核心。

        ②LED仿真交通信号灯:LED灯作为半导体发光源,其最大的特点是采用发光二极管单向导电性。因此,通过芯片引脚的高低电平输出,可以控制LED灯亮、灭的灯光状态。

        ③两位共阳极数码管:共阳极数码管是一种常见的数字显示器件,它由多个发光二极管组成,每个发光二极管都可以显示数字 0~9 中的一个。在共阳极数码管中,所有二极管的阳极都连接在一起,而每个二极管的阴极则分别接到不同的引脚上。

        当需要显示某个数字时,只需将对应数字的阴极引脚置为低电平,并将所有二极管的阴极引脚接通,则可以显示出该数字,即段选;当使用多位数码管时,通过将对应位段上的引脚置为高电平,便可以将数字显示在这一位上,即位选。

        ④按键:按键控制的核心在于其能够通过按下按键来改变芯片上某一引脚的输出状态,芯片内部对对应引脚输入进行扫描并执行相应的程序便可以实现特殊的控制。因此,按键控制的实质是通过芯片进行间接控制,按键的按下与松开状态实际上是作用于芯片的引脚输入状态。

1.2.1 数据结构设计

906ec80f310b40ee8b03412503abe51b.png

        在STM32F103R6芯片中,主要是通过GPIO引脚口置高或置低电平来实现对各个外设硬件的控制的,因此本团队针对各外设通过查询引脚高低电平数组的来实现相应的逻辑控制。

        对于LED灯而言,STM32F103R6芯片通过输出不同的南北东西直行总计6个灯的引脚高低电平状态来进行信号灯状态的控制,例如要使得道路禁止通行,则只需将连接两向红色LED灯的引脚置高电平,其余灯置低电平即可(LED灯芯片外接地,高点平点亮)。因此,可将所有LED灯的对应引脚的输出值作为一整个数组,高电平则表示亮,低电平则表示灭。

        对于两位的的共阳极数码管而言,每一位的数值显示都是对应的不同发光二极管组的点亮,与此前控制LED灯的亮灭逻辑类似(数码管阳极接在一起,低电平点亮),这便是其段选值的显示控制逻辑。而位选值则同理,例如与十位连接的引脚输出高电平时,段选值显示在十位数上。

       对于按键而言则与上述恰好相反,芯片是通过读取各按键对应引脚的输入值来进行控制,因此可将所有按键的对应引脚的输出值作为一整个数组,高电平则表示按键松开,低电平则表示按键按下。

1.3 程序设计

         一整套十字交叉口的信号控制系统需要将此前所设计的子系统全部融入进来,并搭建起一整套完整的控制程序逻辑。基于此,设计了如下的程序设计流程图。

c190f9d25613462e8e1185db65eb2359.png       基于上述的程序流程图,本团队经过反复的设计和改进,完成了信号灯控制代码编写,部分代码如下所示。

d8272158721c47c08a0f21ba053dfe6b.png

1.4 仿真设计 

       基于Protues的仿真平台,搭建了如下图所示的十字交叉口交通灯控制系统,并绘制了相关路网结构,提升可视化效果。

76501e936239484695fc376ec916ec0a.png2.系统演示

演示视频2

3.作品链接

https://pan.baidu.com/s/1s6-G7P9M6_xaAbdvoygDMg

解压密码:nbyh

 

 

  • 25
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值