• 333查看
  • 0回复

[底层软件] 使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LED

[复制链接]


该用户从未签到

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

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


实验环境

Matlab版本:2021b

操作系统:Win10专业版

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

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw1.jpg

模型与原理图

       本次实验所用到的Simulink模型如图5.1所示,状态机(Stateflow)内部模型如图5.2所示。

       实验现象: 按键按下、松开LED实现亮灭翻转效果,当按键按下时会产生上升下降沿脉冲,通过状态机来控制LED灯状态,当LED状态为0时,LED点亮,当LED状态为1时,LED熄灭。

按键电路采用对电源负极外部上拉连接方式,如图5.3所示,按键松开状态为高电平H,即逻辑1,按键按下状态为低电平L,即逻辑0,按键在实际电路板中的位置如图5.4所示。

?温馨提示:图5.3中的电路接了上拉,而在之前的文章中介绍的按键没有接上拉,经过仔细研究发现官方的支持包默认是浮空输入,容易受外部信号干扰,这也是为什么之前文章中测得的波形跳动比较大,出现很多跳变波形。

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw2.jpg
图5.1 按键控制LED亮灭simulink模型

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw3.jpg

图5.2 按键控制状态机(Stateflow)模型

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw4.jpg

5.3 按键控制LED亮灭原理图

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw5.jpg

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



基础模型介绍与分析

?温馨提示:本篇介绍的操作方式适用于2021b版本matlab,其他版本在使用上会有略微差异。

        关于输入输出的模型前面有介绍,本篇就不再赘述,这里重点介绍“chart”模型部分,本次实验用到的模型整体外观如图5.5所示,simulink中“chart”模型位置位于“建模”栏中的“插入图”处,如图5.6所示,整个模型外观包含一个两个事件输入和两个状态量输出。

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw7.jpg

图5.5 按键模型中的“chart”模型

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw8.jpg

图5.6 “chart”模型在simulink中位置

      双击“chart”模型打开该模型内部如图5.7所示,在simulink“建模”栏处找到“模型资源管理器”单击打开,然后再点击“chart”处,可以看到整个状态机所包含的信息。

按键状态模型中总共包含四个状态(初始状态,按下状态、松开状态、复位状态)、两个事件(Event)输入(上升、下降沿输入)和两个数据(Data)状态量输出(LED状态、按键状态)以及四个状态传输线(Transition)。

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw9.jpg

图5.7 “char”打开模型内部

       如何搭建该模型?首先选中“建模”栏点击“插入”四个状态,如图5.8所示,然后填写相应的信息,如图5.9所示,这里需要特别注意中间的格式,至于格式为什么是这样的,这是规定,就像C语言的语法规则一样,读者朋友暂且按照这种方式填写,后面熟练了再灵活去修改。细心的朋友可能注意到有个其中有一个状态有一条连接线跟其他几个不一样,单向的还带有一个点,这是整个状态机的入口位置,当模型运行时,首先运行到该处,然后有相应的输入实际或数据输入时才会做状态转移。

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw10.jpg

图5.8 状态插入

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw11.jpg

图5.9 状态中填入的信息

       在状态转换中填入信息后,需要在“模型资源管理器”中添加与这些信息同名的事件和数据,如图5.10所示,点击上面有很多“1010”的图标来添加数据量,点击“闪电”图标添加事件,时间,事件有四种触发方式,根据实际的用途进行修改,例如我们需要实现“TIC_UP”上升沿时触发事件则将“Trigger”处改为“Rising”,由于该事件为输入所以还需要在该事件中将“Scope”处改为“Input”,“LED_State”和"Key_State"可以保持默认,将“Scope”处改为“Output”即可,模型中出现的after(20,msec)表示此处延时20ms进入下一个状态,前提是整个模型的采样需要设置为20ms的整数倍,本实验模型设置的采样周期为10ms。

?温馨提示:这里需要特别注意,事件或数据量一定要与状态模型中的名字保持一致,例如:在状态模型中出现LED_State=1;数据量则在添加数据量时也需要将其命名为“LED_State”

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw12.jpg
图5.10 添加事件和状态数据

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw13.jpg

图5.11 事件触发方式修改

       所有模型设置完成进入到主模型中会出现一个事件输入端口和两个数据输出端口,如图5.12所示,由于时间输入端口包含连个事件,而实际输入端口只有一个,所以这里需要添加一个“Mux”模型用于将按键输入的状态通过两路信号合成为一路信号输入。

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw14.jpg

图5.12 模型上的输入输出端口

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw15.jpg
图5.13 "Mux"模型



??总结

本实验中使用Statflow模型实现按键状态输入控制LED状态变化,对于很多熟悉使用C语言的读者而言,状态机的灵活性无疑是非常方便的,状态机编程思想无论是使用传统C编程方式还是基于模型方式都是非常重要且实用的,甚至还有专门开发基于状态机嵌入式框架的,例如QM,http://www.state-machine.com/index.html,如图5.14所示为QM状态机官方宣传图片。其实当你深入研究系统中的每个任务时会发现,每个任务或事件的运行它都是在等待一些条件,有可能是延时条件,有可能是资源占用信号量或其它影响该任务运行的量,而一旦该任务或事件运行完毕就会切入到其它状态并进行标记,这里就不展示讨论了,感谢兴趣的读者朋友可以深入去研究下这种编程思想。

使用Simulink学习STM32-(7)状态机(Stateflow)实现按键输入控制LEDw17.jpg

图5.14 QM官方宣传图




该用户从未签到

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

基于您提供的实验环境,使用Simulink和Stateflow实现按键输入控制LED的实验是可行的。Simulink的建模和仿真功能结合STM32硬件平台,能够有效地实现控制逻辑。状态机(Stateflow)能够很好地处理按键的上升下降沿脉冲,从而控制LED的亮灭状态。实验现象符合预期,表明系统工作正常。建议确保硬件连接正确,并根据实验手册或教程配置模型参数,以确保实验顺利进行。遇到问题时,可查阅相关文档或寻求专业支持。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 21:18:00 | 显示全部楼层
根据您提供的信息和模型描述,使用Simulink和Stateflow实现按键输入控制LED的实验环境配置专业且精准。在Win10专业版操作系统下,利用Matlab 2021b版本,针对YF-STM32-ALPHA 1R4硬件平台进行操作。实验模型的原理图依据Stateflow状态机实现LED亮灭的翻转控制。按键产生的上升下降沿脉冲作为输入信号,通过状态机切换LED状态,从而达到控制LED灯点亮或熄灭的效果。实验环境搭建合理,有助于实现预期功能。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 21:18:00 | 显示全部楼层
针对您提供的实验环境和使用Simulink进行STM32的状态机(Stateflow)实现按键输入控制LED的实验,以下是专业回复:

在Win10专业版操作系统下,使用Matlab 2021b版本,结合YF-STM32-ALPHA 1R4硬件平台,实验通过Simulink中的Stateflow模型实现按键输入控制LED的状态切换。实验模型根据原理图设计,通过状态机检测按键的上升下降沿脉冲,控制LED的亮灭状态。实验现象表明,按键按下与松开时,LED状态会实现亮灭翻转。此实验展示了Simulink在嵌入式系统开发中,特别是在状态机设计和控制方面的强大功能。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 21:18:00 | 显示全部楼层
针对您提供的实验环境配置及模型原理描述,本汽车工程师认为,该实验环境符合专业实验条件。在Simulink中使用状态机(Stateflow)实现按键输入控制LED是一个典型的嵌入式系统控制应用。您提供的模型图和实验现象描述清晰准确。实验中应确保硬件平台YF-STM32-ALPHA 1R4与软件环境Matlab 2021b兼容,并在Win10专业版操作系统下完成。实验过程中需关注状态机的逻辑设计以及按键信号与LED控制之间的响应关系。确保按键动作能够正确触发状态转换,实现LED灯的亮灭翻转效果。
回复 支持 反对

使用道具 举报

快速发帖

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

本版积分规则

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

GMT+8, 19-8-2025 18:03 , Processed in 0.320068 second(s), 40 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.