当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]按下按钮时,外部中断被触发,使微控制器能够立即检测到用户的反应。程序随后记录结果,并判断反应时间是快、中等还是慢。通过显示不同的RGB LED颜色来表明结果。

该项目是一个简单的人体反应计时器,使用RT-Spark开发板和STM32F407ZGT6微控制器构建而成。它用于测量当RGB LED亮起时,人能多快做出反应。

程序首先等待一到三秒之间的一个随机时间,以防止用户猜测信号出现的时间。延迟结束后,RGB LED 灯亮起,提示用户尽快按下按钮。

按下按钮时,外部中断被触发,使微控制器能够立即检测到用户的反应。程序随后记录结果,并判断反应时间是快、中等还是慢。通过显示不同的RGB LED颜色来表明结果。

为了提供即时反馈,系统通过彩色LED灯来分类响应速度:

•红色LED = 快速反应

•绿色LED = 平均反应

•蓝色LED = 反应缓慢

该设计还展示了中断驱动的输入/输出效率:处理器在前台继续执行指令(递增计数器),而当按钮被按下时,中断立即触发——无需轮询。

硬件设计

第一阶段:电路描述

输入 — 按钮(SW1)

一个触觉按钮连接在 PC0 和 GND 之间。一个 100 kΩ 的上拉电阻在按钮释放时使线路保持为高电平。按下按钮会使线路变为低电平,产生下降沿,从而触发 EXTI 中断。

输出 — RGB LED

共阴极RGB LED通过220Ω限流电阻连接到PA2、PA3和PA0。这些电阻可防止LED从GPIO输出引脚吸取过大的电流。

软件设计

第二阶段:项目设置

在 STM32CubeMX 中创建一个新项目,在 MCU 板选择器中搜索 STM32F407ZGT6,然后选择第一个并为项目命名,选择 STMCubeIDE 作为工具链/IDE,最后保持默认设置。

之后,生成代码以保存项目。

第三阶段:CubeMX 配置

创建了一个新的STM32项目,目标为STM32F407ZGT6。在STM32CubeMX中应用了以下引脚配置:

第四阶段:主循环逻辑

主循环遵循以下顺序:

•所有LED均被关闭,计数器被清零。

•硬件随机数生成器(HAL_RNG_GenerateRandomNumber)会生成一个在1000至3000毫秒之间的随机延迟,从而防止用户提前预知信号。

•随机选择的LED颜色被点亮。

•当 flag == 0 时,忙等待循环在每次迭代中都会增加计数器。

•一旦 ISR 将标志设置为 1,循环就会退出,并保存计数器的值。

•根据计数阈值显示反馈LED颜色。

•下一个测试前有5秒的显示时间。

第五阶段:中断服务例程(ISR)

外部中断回调函数 HAL_GPIO_EXTI_Callback 的实现如下:

将 flag 变量声明为 volatile,以防止编译器优化将其值缓存到寄存器中,从而确保主循环能立即检测到变化。

反应时间分类

ISR触发后,计数器值被分为三类:

额外加分——平均十次试验

在每次试验中,会持续维护一个累加值和迭代计数器。完成十次测量后,计算并存储平均计数器值到 avgresponsetime 中,从而减少异常响应的影响。

测试

第六阶段:操作流程

作业中使用了基于断点的方法:在检测到标志后立即设置一个断点,并在STM32CubeIDE的监视窗口中检查计数器变量。

进行了多次试验以观察一致性:

•每次试验中,随机数生成器产生的延迟都不相同,证实不存在可预测的模式。

•每次按键按下时,EXTI回调都能可靠触发,未观察到中断丢失的情况。

•LED颜色变化正确反映了计数器的阈值逻辑。

结果

系统在多次试验中成功测得了人类的反应时间。测试过程中观察到的代表性计数器值总结如下:

图3:输出PS:抱歉,背景噪音

结论

示波器/逻辑分析仪验证说明

本次提交未完成通过逻辑分析仪或示波器对LED激活信号和按钮按下信号的验证。测试时无法获取所需设备,因此无法通过波形采集直接测量毫秒级的响应时间间隔。响应时间是通过循环计数法间接估算的,并如作业第3.3节所述,使用STM32CubeIDE调试器的监视窗口进行数值检查。需承认,这代表了当前结果的一个局限性,因为示波器验证能够提供更精确且不依赖仪器的定时行为确认。若未来能获得相关设备,同时采集LED输出引脚的上升沿与PC0的下降沿,则可直接从时间分段测量中读取实际经过的时间间隔。

第七阶段:总体反思

本次实验演示了在ARM Cortex-M微控制器上基于中断的固件设计方法。通过实际操作进一步强化了轮询式与中断式事件检测之间的区别:轮询循环需要处理器持续采样引脚状态,而EXTI中断方式则允许处理器在硬件事件发生前不受干扰地连续递增计数器,无论循环时间如何,都不会错过任何边沿信号。这是实时嵌入式系统中中断驱动架构的一个根本优势。

该实验也具体说明了人类反应时间和处理器吞吐量之间的关系。每个平均试验中积累的[VALUE]次循环迭代表明,处理器在人类感知视觉刺激并做出物理反应所需的时间内,能够完成大量操作——大约为[VALUE]条汇编指令。这解释了为何现代微控制器即使在单个人类感知事件的时间范围内,也能同时处理多个任务。

第八阶段:遇到的问题

在开发和测试过程中出现了几个问题。在STM32CubeMX中对EXTI外设进行初始配置时,需要仔细选择下降沿触发模式,因为开关电路采用100 kΩ上拉电阻的低电平激活配置;若选择错误的触发方式(上升沿),则在测试期间无法执行中断服务例程。

另一个次要问题是开关触点可能产生的弹跳。由于未实现硬件或软件去抖,开关触点的快速机械振荡理论上可能导致多次 EXTI 中断触发。实际上,基于标志位的设计可以缓解这一问题:一旦 isr_flag 被设置为 1,后续的中断服务例程执行将不会造成影响,因为该标志位无法被设置为大于 1 的值,且主循环在首次检测到事件时就会退出计数循环。这在软件层面实现了隐式的去抖功能。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在嵌入式系统工程中,我们很容易将串行通信视为理所当然。我们打开串行终端,输入一条命令,数据便立即出现在屏幕上。但在这短暂的微秒之间,硬件层面究竟发生了什么?

关键字: 示波器 嵌入式系统 RT-Spark开发板

这是一个快速且多功能的平台,专为基于MIPI-DSI和MIPI-CSI的显示屏和摄像头人机界面(HMI)应用而设计。它同样适用于边缘AI工作负载、传感器处理应用以及需要CM4/CM5载板灵活性的同时保持微控制器确定性行为...

关键字: 微控制器 显示屏 人机界面 SCINTIX P4板

注意:如果发现灯光无法连接到打印机(打开和关闭灯光后,LED指示灯与设置不匹配),请检查您是否对打印机建立了超过三分之二的MQTT连接。这是Bambu打印机(至少P1系列)已知的缺陷或限制。当仅在局域网模式和/或开发者模...

关键字: Wi-Fi LED ESP32-S3

一款紧凑型电池供电的桌面气象站,基于UNIHIKER K10(ESP32-S3)芯片构建。它通过重力环境传感器读取温度、湿度、气压、环境光和紫外线,并通过ENS160传感器获取空气质量(AQI / eCO2 / TVOC...

关键字: 传感器 LED UNIHIKER K10

看门狗定时器是确保数字控制器(如微控制器(MCU))安全运行的关键器件。为了控制数字器件程序序列中的硬件故障,基本功能安全(FS)标准IEC 61508-2附录A表A.10推荐了几种诊断技术和措施。其中包括:具有独立时基...

关键字: 看门狗 定时器 微控制器

Espressif 生产用于温控器和钻孔控制器等工业产品的微控制器芯片。该电路板搭载 ESP-32-C3 芯片,并内置 0.42 英寸 LCD 显示屏,仅支持单色显示,可打印信息到屏幕上,也可像普通 Arduino 板一...

关键字: 钻孔控制器 微控制器 ESP32C3 开发板

我从2005年到2007年用过一台PDA(个人数字助理),后来把它弄丢了。当我看到Cardputer时,立刻让我想起了那些旧式的PDA时代。自从拿到Cardputer的那天起,我就一直在思考这个项目。

关键字: PDA 微控制器 LVGL

在本Visual Programming Visuino教程中,我们将利用Arduino Uno R4 WiFi内置的LED矩阵和WiFi连接功能,通过免费的wttr.in天气服务,显示任意城市的当前温度。

关键字: Wi-Fi LED Arduino Uno R4

【2026年7月6日,德国慕尼黑讯】全球功率系统和物联网领域的半导体领导者英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)正与亚马逊云科技(AWS)展开合作,通过加快微控制器(MCU)评估进程,从...

关键字: 微控制器 自动化 半导体

AC8225-275 nm UVC LED系统扩展了OmniCure AC8系列产品线,旨在解决制造商从汞弧灯向UV LED固化技术转型过程中面临的表面固化难题

关键字: LED 3D 打印 半导体
关闭