ionicons-v5-f

会呼吸的交通信号灯

实验题目:会呼吸的交通信号灯

课程简要信息

课程名称:微控制器原理与应用

课程学时:64

项目学时:课内4、课外2

适用专业:电子信息工程、机器人工程、通信工程、物联网等

学生年级:二年级、第二学期

实验内容与任务

  1. 分析电路原理图,基于STM32的GPIO的工作原理,设定STM32的GPIO输出高低电平,控制输出设备LED1灯的亮灭。(初级任务1)

  2. 分析电路原理图,基于STM32的数码管显示以及系统延时的控制方法,实现1s延时的LED2、LED3、LED5发光二极管的循环流水点亮以及LED点亮次数数码管显示功能。(初级任务2)

  3. 基于STM32的PWM输出的工作原理,实现发光二极管LED2的呼吸灯功能。(提高任务1)

  4. 基于STM32的GPIO、Timer、PWM输出工作原理,实现1s为周期LED2、LED3、LED5发光二极管的呼吸循环流水点亮功能。(提高任务2)

  5. 基于STM32的数码管、GPIO、Timer、PWM输出工作原理,使用RGB三色灯自行搭建交通信号灯控制电路,结合数码管显示实现交通信号灯的“绿”,“黄”,“红”120秒状态变换,其中黄灯显示呈现呼吸效果。(高阶任务)

实验过程及要求

  1. 学习实验平台电路原理图,观察LED1-LED10的电路连接接口,数码管的电路连接接口以及PWM的输出端口分布。

  2. 掌握GPIO控制LED方法,相互讨论理解,明确GPIO的设定时序,分别进行LED灯的亮灭控制,要求基于标准库函数、寄存器、汇编三种方案实现。

  3. 理解数码管动态扫描原理,学会使用GPIO口驱动数码管,掌握系统延时的控制方法,能够产生1s的延时,在此基础上对LED2、LED3、LED5进行轮询点亮熄灭控制以及实现LED点亮次数数码管显示功能。要求基于标准库函数、寄存器、汇编三种方案实现。

  4. 掌握PMW工作原理,明确Timer的PWM输出功能,能够在PB0端口输出可变占空比的波形,驱动LED2进行呼吸动作。要求基于标准库函数、寄存器两种方案实现,汇编作为可选实现方案。

  5. 基于GPIO、Timer、PWM输出工作原理,明确进行呼吸流水闪烁的LED灯序号,设定Timer,呼吸频率,达到呼吸流水的效果。要求基于标准库函数、寄存器两种方案实现,汇编作为可选实现方案。

  6. 使用RGB三色灯自行搭建交通信号灯控制电路,基于9个Channel的PWM输出控制实现信号灯的“绿”、“黄”、“红”显示,结合数码管显示、Timer工作原理,实现交通信号灯的“绿”,“黄”,“红”倒计时显示,其中黄灯显示呈现呼吸效果。要求基于标准库函数实现,寄存器、汇编两种实现方案作为可选实现方案。

各实验任务的要求汇总如表3-1所示:

表3-1 实验任务要求汇总

相关知识及背景

本实验项目是一个运用微控制器原理与技术解决现实生活和工程实际问题的典型应用,需要运用STM32单片机的GPIO、数码管、Timer、PWM输出控制等相关知识与技术方法,并涉及硬件电路设计、嵌入式设备程序调试等工程概念与方法。

实验环境条件

  1. 线下实验
  • 单片机开发板(含电源线) 1台

  • ST-Link/J-Link(含连接线) 1块

  • 面包板 1片

  • 三色灯(含连接线) 3个

  • 示波器 1台

  • PC电脑(安装Keil MDK5软件) 1台

    1. 线上实验
  • 笔记本电脑(安装Proteus) 1台

教学目标与目的

  1. 能够根据实验任务需求独立完成任务的设计及软件程序编写,明确STM32单片机的GPIO、数码管、定时器、PWM输出等的控制原理以及控制方法,提升学生基于STM32单片机原理解决应用问题的能力。

  2. 引导学生使用标准库、寄存器、汇编三种方式进行任务实现,强化学生对于嵌入式底层编程语言以及数据手册的学习能力,提升学生嵌入式软件产业应用能力。

  3. 引导学生自行设计搭建电路,基于基础理论知识,解决工程实际问题,增强自主学习和终身学习意识,提高系统设计及解决工程实际问题的能力。

教学设计与实施进程

本实验基于工程教育理念进行项目任务设计,重点培养学生的技术知识与推理能力、学习态度与习惯、开放思维与创新、沟通表达与团队合作、实践构思与设计等方面的能力,对学生多方面的综合能力提升起到十分重要的作用。本实验的过程是一个比较完整的理论结合实际应用的典型案例,基于STM32实验平台电路原理相关知识,在学习了GPIO控制、数码管显示、Timer定时、PWM输出控制的基础之上,利用RGB三色灯和面包板自行设计和搭建交通信号灯电路,实现会呼吸的交通信号灯功能,本实验涉及的知识点如图7-1所示。

图7-1 实验涉及知识点鱼骨图

本实验的教学设计是以“会呼吸的交通信号灯”为最终目标,以“虚实结合”STM32实验平台为依托,将GPIO控制、数码管显示、Timer定时及PWM输出控制等四项重点教学内容进行了有机融合,共分为初级任务、提高任务、高阶任务三个阶层任务,每个阶层任务包含库函数、寄存器、汇编三种实现方案,具体如7-2所示。

图7-2 实验任务构成图

第一阶层为初级任务,包括 LED灯的点亮熄灭控制、LED灯的流水控制及数码管显示两个递进层次。本阶段实验旨在增强学生对实验平台电路原理的理解、Keil软件工程建立、GPIO基本控制、数码管显示以及系统延时控制方法的理解,提升学生基于STM32单片机原理解决应用问题的能力。本阶段任务学生可选择“线上虚拟仿真平台(Proteus)”+“线下STM32实验平台”相结合的方式进行,实验结果考核采用生生互评和教师评定相结合的方式。

第二阶层为提高任务,包括呼吸灯和呼吸流水灯两个递进层次。呼吸灯的实现需要依靠PWM输出控制来实现,基本考核点为Timer的定时功能、Timer的复用设置、PWM的周期以及占空比如何计算和设定。本阶段实验旨在强化学生对于嵌入式底层编程语言以及数据手册的学习能力,需要学生掌握嵌入式软件开发之库函数、寄存器、汇编等实现方式的异同,进而理解嵌入式软件功能实现方法的多样性,提升学生嵌入式软件产业应用能力。实验结果考核采用生生互评和教师评定相结合的方式。

第三阶层为高阶任务,基于GPIO、数码管、Timer定时、PWM输出的原理方法进行“会呼吸的交通信号灯”设计,其中交通信号灯采用三个RGB三色灯,电路需要自行设计搭建,“绿”、“黄”、“红”三色的呼吸显示方法以及数码管同步倒计时需要自行设计并编程实现,本阶段实验旨在提升学生自主学习和终身学习意识,考核学生基于理论知识进行系统设计及解决工程实际问题的能力。实验结果考核采用现场演示答辩及教师评定相结合的方式。

初级、提高、高阶三个阶层实验任务呈阶梯递进分布,具体如图7-3所示。

图7-3 实验任务阶梯递进分布图

整个实验的实施过程包括知识讲授、程序设计、交通信号灯设计、总结交流等四个关键环节,涵盖了教师指导、师生互动、专业能力提升和非技术能力培养等教学要素。

1) 知识讲授:与学生共同回顾STM32实验平台电路原理、GPIO、数码管、Timer定时、PWM输出方法以及数据手册的阅读方法,讲解实验过程中使用到的寄存器以及关键位的设定方法。

2) 程序设计:指导学生基于库函数、寄存器、汇编完成初级的LED亮灭以及流水灯数码管显示任务,引导学生设计Timer定时的设定流程以及PWM输出控制的设定流程,完成相应寄存器的配置理论分析,通过生生互评及教师点评对学生设计不合理之处予以指出,加深学生对定时和PWM输出设定的感性认识和知识掌握。

3) 交通信号灯设计:给出RGB三色灯的显示原理,引导学生明确绿黄红三色的生成方法,分析STM32实验平台开发板原理图,为“绿”“黄”“红”三个信号灯系统合理分配硬件资源,基于STM32单片机和面包板,自行设计并搭建“绿”“黄”“红”三个信号灯的硬件电路,基于真实120秒交通信号灯实际场景case,进行软件设计,尤其需要注意本次实验的黄灯显示为呼吸灯效果,明确绿黄红三色的PWM输出Timer以及channel,结合数码管倒计时显示实现“会呼吸的交通信号灯”。当学生在实验过程中遇到困难和失败时,教师可从理论分析角度加以引导,激励学生以细心、耐心和恒心来应对问题,提升学生的心理抗压能力。

4) 总结交流:实验完成后,组织优秀案例学生以演讲、答辩、评讲的形式进行交流,提高学生的技术表达和沟通能力,让学生感受理论对实践的指导作用,认识到理论联系实际的重要价值。

实验原理及方案

  1. 初级任务项目原理及方案

① LED点亮熄灭

LED点亮熄灭可以通过控制GPIO 的PC13、PB.0-PB.7输出高低电平来实现, STM32实验平台LED相关电路原理图如图8-1所示。

图8-1 LED电路原理图

要实现对于GPIO的输出控制,首先要设置GPIO的工作模式,其次设置其工作方式,最后可以通过库函数或者寄存器等方法来控制引脚输出高低电平,点亮发光二极管。GPIO有8种工作模式,分别是浮空输入、上拉输入、下拉输入、模拟输入、通用开漏输出、通用推挽式输出、复用推挽式输出和复用开漏输出,见表8-1,根据需要选择合适的工作模式。

表8-1 GPIO的8种工作模式

下面给出控制GPIO的一般步骤:

a) 开启使用引脚对应的IO组端口时钟

STM32外设时钟默认是处在关闭状态的,需要使能外设时钟,GPIO挂载在APB2总线上,需调用库函数RCC_APB2PeriphClockCmd()来打开GPIO引脚对应的时钟。

例: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

b) 初始化端口

例:初始化PC13为推挽输出模式。

GPIO_InitTypeDef GPIO_InitStructure; //声明初始化结构体

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //引脚位置定义

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出速度50MHz

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出模式

GPIO_Init(GPIOC, &GPIO_InitStructure); //C组GPIO初始化

c) 按照功能选用库函数或者寄存器方式操作端口,库函数的选择和使用方法参考《STM32固件库使用手册》。

② 数码管点亮

数码管点亮由PA.x控制,STM32实验平台上单片机与数码管连接电路原理如图8-2所示。采用了4位一体的共阳数码管,动态扫描显示方式,其8位段选端连接至PB.4~PB11,位选端连接至PNP三极管的集电极,单片机的PA.4、PA.5、PA.11、PA.12连接至4位三极管的基极,相应PA.x为低电平时,点亮相应的数码管。

图8-2 数码管连接电路原理图

根据硬件电路原理可知,四个数码管如果要显示不同的数字,就需要对四个数码管进行轮询控制,因此,在任何一个时刻,PA.x中只能有一个IO口输出低电平,即只有一位数码管亮。单片机须轮流控制PA.4、PA.5、PA.11、PA.12的一位,使其输出“0”,同时PB其余端口要输出该位相应的段码值。即使显示内容没有变化,单片机也要不停的循环扫描。

为了保证各个数码管的显示效果不产生闪烁,要保证在1S内循环扫描4个数码管的次数大于25次,这里是利用人眼的视觉影响滞留效应。一般扫描次数高于25次,例如40次,即每隔1000mS/40=25ms,将4个数码管循环扫描一次,第二要考虑的是,在25ms的时间间隔中,要逐一点亮4个数码管,每个数码管点亮的持续时间要相同,这样亮度才均匀。最后要考虑每个数码管点亮的持续时间,如果某个时间长,则亮度高,反之则暗,一般情况下,每个数码管点亮时间为1~2ms即可。

  1. 提高任务项目原理及方案

① 定时器定时原理

定时计数器的本质为计数功能,当采用内部时钟时,由于计数间隔时间恒定,演变为定时器,定时器的基本功能框图如8-3所示。

图8-3 定时器功能框图

首先图中上部为定时器时钟 TIMxCLK,即内部时钟 CK_INT,经APB1预分频器后分频提供,如果APB1 预分频系数等于 1,则频率不变,否则频率乘以 2,库函数中 APB1 预分频的系数是2,即 PCLK1=36M,所以定时器时钟 TIMxCLK=36*2=72M。

接下来是预分频器,TIMxCLK经过 PSC 预分频器之后,即 CK_CNT,用来驱动计数器计数。 PSC 是一个16 位的预分频器,可以对定时器时钟 TIMxCLK 进行 1~65536 之间的任何一个数进行分频。具体计算方式为:CK_CNT=TIMxCLK/(PSC+1)。

预分频器分配后,输入到计数器 CNT,是一个 16位的计数器,只能往上计数,最大计数值为65535。当计数达到自动重装载寄存器的时候产生更新事件,并清零从头开始计数。

自动重装载寄存器ARR是一个16位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能中断的话,定时器就产生溢出中断。

② 定时器定时时间的计算

定时器计数频率CK_CNT等于定时器时钟CK_INT/(TIMx_PSC+1),其中:CK_CNT为定时器的计数频率,CK_INT为内部时钟源频率(APB1的倍频器送出时钟),TIM_PSC为用户设定的预分频系数,取值范围0~65535。由此可得到STM32单片机1个定时周期为:T=1/CK_CNT。

若设定时器定时时间为T_t,定时器的计数次数为T_count,可得:

T_t=T_count*(1/CK_CNT)

将CK_CNT计算过程带入可得:

T_t=T_count*(1/(CK_INT/(TIMx_PSC+1)))

然后算得:

T_t=T_count*(TIMx_PSC+1)/CK_INT

③ PWM输出工作过程

若配置脉冲计数器TIMx_CNT为向上计数,而重载寄存器TIMx_ARR被配置为N,即TIMx_CNT的当前计数值数值X在TIMxCLK时钟源的驱动下不断累加,当TIMx_CNT的数值X大于N时,会重置TIMx_CNT数值为0重新计数。而在TIMxCNT计数的同时,TIMxCNT的计数值X会与比较寄存器TIMx_CCR预先存储了的数值A进行比较,当脉冲计数器TIMx_CNT的数值X小于比较寄存器TIMx_CCR的值A时,输出高电平(或低电平),相反地,当脉冲计数器的数值X大于或等于比较寄存器的值A时,输出低电平(或高电平)。

如此循环,得到的输出脉冲周期就为重载寄存器TIMx_ARR存储的数值(N+1)乘以触发脉冲的时钟周期,其脉冲宽度则为比较寄存器TIMx_CCR的值A乘以触发脉冲的时钟周期,即输出PWM的占空比为A/(N+1)。

当计数器 CNT 的值跟比较寄存器 CCR 的值相等的时候,输出参考信号OCxREF的信号的极性就会改变,其中OCxREF=1(高电平)称之为有效电平,OCxREF=0(低电平)称之为无效电平,并且会产生比较中断 CCxI,相应的标志位 CCxIF(SR 寄存器中)会置位。然后 OCxREF 再经过一系列的控制之后就成为真正的输出信号OCx/OCxN。

  1. 高阶任务项目原理及方案

RGB三色灯的三色是指红、绿、蓝三色,通过颜色组合来达到显示不同颜色的目的。在一定的电流范围内(每种颜色LED电流大小不同),电流的大小和亮度呈正比。假设每个LED有8个挡位的电流强度(电流大小),那么就可以发出8^3^=512种颜色的光。例如,其中RGB(红绿蓝)电流的大小为008,那么颜色为蓝色;080为绿色;800为红色;888为白色;000为黑色(不亮);333为灰色。如果电流可以调制成任意大小(在LED线性范围内),那么就可以调出任意颜色。

本阶段任务以学生自行搭建电路为主,RGB三色灯与单片机的接口参考电路如图8-4所示,可以通过控制PWM1~PWM3的输出来实现不同的颜色输出。

图8-4 RGB三色灯接线原理图

需要注意,STM32不是每一个IO引脚都可以直接使用于PWM输出,因为在硬件上已经规定了用某些引脚来连接PWM的输出口。调查芯片数据手册,对三个交通信号灯合理分配系统PWM资源,可以使用TIM1,TIM2,TIM3的PA.x作为交通信号灯的9个通道PWM输出端口,TIM4用作通用定时器,红黄绿三个信号灯的PWM资源分配可以参考表8-2。

表8-2 交通信号灯PWM资源分配表

下面给出控制PWM控制的一般步骤:

a)使能定时器和相关IO时钟

使能定时器时钟,使能GPIOA时钟,调用RCC_APB2PeriphClockCmd()函数。

b)初始化IO口为复用功能输出;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

定时器1、定时器2、定时器3需要开启复用时钟功能。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

c)初始化定时器

设置重装载值ARR,与分频系数PSC等。

d)使能TIM1, TIM2, TIM3主输出

TIM1_CtrlPWMOutputs(ENABLE);

TIM2_CtrlPWMOutputs(ENABLE);

TIM3_CtrlPWMOutputs(ENABLE);

e)使能预装载寄存器

TIM1_ARRPreloadConfig(ENABLE);

TIM2_ARRPreloadConfig(ENABLE);

TIM3_ARRPreloadConfig(ENABLE);

f)使能定时器

调用TIM_Cmd()函数使能定时器。

g)改变占空比

不断改变比较值CCRx,达到不同的占空比效果,通过TIM_SetComparex()函数来实现。

实验报告要求

实验报告需要反映以下工作:

  1. 课前必须认真预习实验,了解实验目的、要求以及实验原理,提出预习过程中的疑问以及思考方向

  2. 记录实验名称、实验日期以及分组情况

  3. 掌握实验原理、能够进行实验方案论证

  4. 程序设计流程图及实验过程步骤的详细记录

  5. 实验数据结果记录

  6. 软件工程代码及实际电路图片

  7. 实验结论及分析

  8. 实验过程中遇到的问题、解决方案及反思

考核要求与方法

  1. 实验任务:按照实验要求分实验任务进行逐一验收,包括每个实验任务功能的完成程度(部分功能实现、全部功能实现)以及完成时间。

  2. 实验数据:实际测量结果数据与理论数据的一致性。

  3. 实验质量:程序设计的合理性,测试是否充足,是否存在漏洞。

  4. 自主创新:实验方案的多样性(不拘泥于库函数方式)、其他功能的扩展。

  5. 实验成本:程序设计是否具有可移植性、可维护性、可读性。

  6. 实验报告:实验报告的规范性与完整性。

考核要求与评分标准详细如表10-1所示。

表10-1 考核要求与评分标准

项目特色或创新

实验项目基于STM32微控制器理论知识进行设计,特色创新点如下:

  1. 项目基于工程教育理念进行项目任务设计,结合实际应用场景需求解决实际应用问题,考察学生对于微控制器应用的熟练性与综合运用性。

  2. 项目以“虚实结合”STM32实验平台为依托,实验任务实现鼓励采用多样实现方式,提升学生基于基础理论,快速进入嵌入式软件行业应用的能力。

  3. 项目采用阶梯式层级分解,基于基础理论知识,解决工程实际问题,提高学生硬软件系统设计能力,增强自主学习和终身学习意识。

  4. 案例设计与理论教学有机融合,专业能力提升与非技术能力培养并重,实验任务呈螺旋式递进设计,体现了“两性一度”课程建设标准。

实验项目佐证

  1. 实验教学现场如下图所示。

  1. 学生实验报告部分截图如下图所示。

①线上虚拟仿真LED灯点亮熄灭实验报告部分截图

②线下实验平台可呼吸的交通信号灯实验报告部分截图

3)学生完成实验任务照片如下图所示。

4)会呼吸的交通信号灯实物图如下图所示。

获奖信息

获奖等级 二等奖
年份 2024

作品信息

学时分类 1-6学时
课程分类 课内:电子系统设计(含单片机及微机系统)、

作者信息

作者
韩双双,高照玲,田华
学校
大连东软信息学院
院系
智能与电子工程学院

电工电子实验教学资源平台 苏ICP备09069895号-19