• 384查看
  • 0回复

[底层软件] 使用Simulink学习STM32-(3)按键控制LED亮灭

[复制链接]


该用户从未签到

发表于 2-3-2024 15:11:12 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


实验环境

Matlab版本:2021b

操作系统:Win10专业版

硬件平台:YF-STM32-ALPHA 1R4

使用Simulink学习STM32-(3)按键控制LED亮灭w1.jpg

模型与原理图

      本次实验所用到的Simulink模型如图5.1所示,实验现象: 按键按下、松开LED循环实现翻转亮灭效果,当按键按下时,产生下降沿脉冲,通过一个计数器对下降沿脉冲进行0~1循环计数,计数到最大值时产生输出信号,输出信号为0时,控制LED熄灭,输出值为1时,控制LED点亮。

按键电路采用对电源负极方式连接,按键松开状态为高电平H,即逻辑1,按键按下状态为低电平L,即逻辑0。

使用Simulink学习STM32-(3)按键控制LED亮灭w2.jpg

图5.1 按键控制LED亮灭simulink模型

使用Simulink学习STM32-(3)按键控制LED亮灭w3.jpg
图5.2 按键控制LED亮灭原理图

使用Simulink学习STM32-(3)按键控制LED亮灭w4.jpg

图5.3 按键在开发板中的位置



基础模型介绍与分析


"Digital Read"模型与设置为STM32专用读取I/O端口数据模型,更改“Pin:”编号可使其与STM32引脚对应到芯片端口,“Sample time:”采样时间设置为-1时表示采样时间跟随系统基础采样时间,如图5.4所示。

使用Simulink学习STM32-(3)按键控制LED亮灭w6.jpg

图5.4 "Digital Read"模型与参数设置

        “Count Up”计数器模型如图5.5所示,此处“Count event”栏将其设置为"Falling edge"(下降沿)计数方式(单片机按键需保持为上拉输入),"Counter size"(计数大小)采用“User defined”(自定义)方式,“Maximum count”设置为1,“Output”设置为“Hit”方式,去掉“Reset input”勾选项。“Switch”模型保持默认设置,然后分别将其他两个输入端口与“Constant”模型连接,如图5.6所示。

使用Simulink学习STM32-(3)按键控制LED亮灭w7.jpg

图5.5 “Count Up”模型设置

使用Simulink学习STM32-(3)按键控制LED亮灭w8.jpg

图5.6 "Switch"模型

        ??注意此处设置比较关键,我们需要在“配置”参数中将“求解器->求解器选择”栏中的“类型”设置为“定步长”,“求解器”设置为“离散(无连续状态)”,将“求解器详细信息”栏中的“固定步长(基础采样时间)”设置为0.1,即0.1s,最终设置好的效果如图5.7所示。至于为什么要这样设置,在后面我们会对它做一个简单的对比分析,不然整个模型运行的会非常缓慢。

使用Simulink学习STM32-(3)按键控制LED亮灭w9.jpg

图5.7 “基础采样时间”设置



??总结

本实验中只使用了两个基本模型“Count Up”和“Switch”模型实现按键控制LED反转,当然其中的"Switch"模型去掉也可以实现同样的效果,读者朋友还可以尝试使用其它模型搭建实现同样效果。

读者朋友可以思考下我们以往使用传统方式开发单片机按键输入程序时如果不使用简单的滤波算法,那么按键按下和松开瞬间由于按键的弹跳特性,会出现多次按下或松开状况,但是在本次实验中并没有看到这类滤波?另外以往我们一般使用状态机方式读取按键值,simulink中状态机又该如何使用呢?大家可以尝试使用stateflow状态机方式去实现下。



?拓展延申

在前面我们有提到采样时间设置的问题,这里简单的分析下不同采样时间下的按键波形,模型如图5.9所示,在“配置参数->求解器->求解器详细信息->固定步长(基础采样时间)”中将时间设置为0.01秒,如图5.10所示。

使用Simulink学习STM32-(3)按键控制LED亮灭w12.jpg

图5.9 按键波形测试模型

使用Simulink学习STM32-(3)按键控制LED亮灭w13.jpg

图5.10 0.01s采样时间设置

        单击线条上方会出现三个小点“...”点击小点会出现如图5.11所示信号标识,单击该信号会出现在线条上方,如图5.12所示,此时我们需要点击“Monitor & Tune”进入硬件在环模式,然后点击“数据查看器”按钮如图5.13所示,弹出的信号查看器窗口如图5.14所示,勾选上左侧需要监控的信号,当按键按下时就会显示相应的实际波形。

使用Simulink学习STM32-(3)按键控制LED亮灭w14.jpg

图5.11 信号记录操作方式

使用Simulink学习STM32-(3)按键控制LED亮灭w15.jpg

图5.12 在环模式下监控数据

使用Simulink学习STM32-(3)按键控制LED亮灭w16.jpg

图5.12 0.01基础采样时间下按键输入波形




该用户从未签到

发表于 14-3-2025 20:58:00 | 显示全部楼层
针对您提供的实验环境和模型描述,以下是我作为汽车工程师的专业回复:

在Win10专业版操作系统下,使用Matlab 2021b版本和Simulink工具,基于YF-STM32-ALPHA 1R4硬件平台,进行按键控制LED亮灭实验。实验原理是通过Simulink模型模拟按键的输入,产生下降沿脉冲,通过计数器进行循环计数,根据计数结果控制LED的亮灭。按键电路采用对电源负极方式连接,按键松开时处于高电平状态。实验过程中需确保电路连接正确,以避免短路或其他安全问题。在模拟和调试过程中,需注意信号的准确性和时序性,确保LED响应与按键动作同步。

以上回复仅供参考,实验过程中请遵循相关安全规范。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 20:58:00 | 显示全部楼层
根据您提供的实验环境和模型描述,以下是专业风格的回复:

使用Simulink进行STM32的按键控制LED亮灭实验,在Matlab 2021b版本和Win10专业版操作系统的环境下进行。硬件平台采用YF-STM32-ALPHA 1R4。实验原理是通过Simulink模型模拟按键的输入,产生下降沿脉冲,通过计数器进行计数,根据计数值控制LED的亮灭。

按键电路采用对电源负极方式连接,在按键未按下时,电路处于高电平状态,即逻辑1。当按键被按下时,产生下降沿脉冲,计数器开始计数。当计数值达到设定最大值时,产生输出信号,控制LED的亮灭。

在实验过程中,需确保硬件连接正确,并根据实验现象调整模型参数。通过Simulink模型的仿真,可以直观地观察按键控制LED的效果。
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 12:32 , Processed in 0.409286 second(s), 38 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.