news 2026/8/12 15:10:43

基于STM32和FreeRTOS的烟机控制系统学习笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于STM32和FreeRTOS的烟机控制系统学习笔记

一、项目是什么

  1. 这是一个用STM32F103C8T6单片机加FreeRTOS操作系统做的智能油烟机项目。
  2. 它能自动检测厨房烟雾浓度和温湿度,根据环境自动调节风机转速。
  3. 它支持手动控制挡位,还有防回流检测和待机模式。
  4. 它带LCD屏幕显示状态,按键切换模式,蜂鸣器提示音。
  5. 它支持串口固件升级,不用拆机就能更新程序。

二、硬件大体构成

  1. 主控芯片是STM32F103C8T6,相当于系统的大脑。
  2. 直流有刷电机加驱动板负责排风,12V电源适配器供电。
  3. MQ2烟雾传感器和DHT11温湿度传感器负责环境检测。
  4. LCD屏幕负责显示,按键负责输入,蜂鸣器负责提示。
  5. 编码器装在电机上测转速,串口和ST-LINK负责调试和烧录。

三、软件架构怎么分层

  1. 整个软件分成三层,分别是驱动层中间层应用层
  2. 驱动层直接操作单片机外设,比如控制电机,读传感器,显示屏幕。
  3. 中间层是FreeRTOS操作系统,负责任务调度和资源管理。
  4. 应用层按功能划分成多个任务,每个任务只做一件事。
  5. 分层的好处是底层驱动和应用逻辑解耦,换硬件不用改上层代码。

四、应用层划分了哪些任务

  1. 编码器测速任务负责算电机实际转速,优先级最高。
  2. 电机控制任务负责速度闭环,用PID让实际转速跟上目标转速。
  3. 按键扫描任务负责检测按键,处理短按和长按。
  4. 传感器采集任务负责读DHT11和MQ2的数据。
  5. 风速计算任务负责根据传感器数据算出合适的风速。
  6. 防回流任务负责检测油烟倒灌,防止风机反复启停。
  7. UI显示任务负责刷新LCD屏幕,优先级最低。
  8. 每个任务按自己的周期运行,比如传感器每500毫秒采一次,UI每200毫秒刷新一次。

五、任务之间怎么通信

  1. 任务间用互斥量加全局变量的方式共享数据。
  2. 全局变量集中放在一个系统状态结构体里,比如当前模式,风速值,转速值。
  3. 任务要读写共享数据前先获取互斥量,用完立即释放。
  4. 选互斥量而不是队列,是因为只关心最新状态,不需要历史数据,内存开销也小。

六、优先级怎么设计

  1. FreeRTOS里数值越大优先级越高,本项目用了7个优先级等级。
  2. 测速任务放最高,因为转速数据是控制的基础,需要及时更新。
  3. 电机控制任务其次,按键扫描居中,UI显示放最低。
  4. 传感器和风速计算同级,靠时间片轮转调度。
  5. 设计思路是重要且紧急的任务优先,慢任务不阻塞快任务。

七、几个核心机制

  1. 风速融合算法把温度湿度烟雾浓度归一化后加权计算,烟雾权重最高。
  2. PID闭环控制让电机转速稳定,误差控制在百分之五以内。
  3. 防回流用动态阈值,第一次触发就切高阈值,浓度回落后才关风机。
  4. 自动模式是状态机,有启动,烹饪和延时关机三个状态。
  5. Bootloader升级流程是Python生成带CRC32校验的固件,串口加DMA接收,校验通过才写Flash并跳转。

八、我的理解

  1. 这个项目学的是FreeRTOS多任务架构,任务怎么划分,优先级怎么定,数据怎么保护。
  2. 其次是驱动层的写法,用结构体封装外设,代码复用性高。
  3. 最后是PID闭环和Bootloader。
  4. 我的复现计划是先了解整个项目的大体框架,然后变为PC机一步一步跑代码,理解每一段代码的含义,遇到问题查资料补习不懂得点。
  5. 硬件等材料到齐花一天时间组装起来,上电跑一遍。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/12 15:10:12

VTK环境配置全攻略:从CMake、vcpkg到Visual Studio 2022

1. 项目概述:为什么VTK环境配置是个“技术活”? 如果你正在用C做三维可视化、医学影像或者科学计算,VTK(Visualization Toolkit)这个名字你肯定不陌生。它是一个功能极其强大的开源图形库,但很多朋友&#…

作者头像 李华
网站建设 2026/8/12 15:09:25

光被哪一层吸收:分析并优化 a-Si 薄膜太阳能电池

对于太阳能电池,对光的总吸收不代表有效吸收,也就是说吸收的光并非都在有源层参与了光电转换。例如只有进入 a-Si 有源层的光才可能参与光电转换,ITO 中的吸收属于寄生损耗。 这篇教程使用 Dreapex TMM 的 ITO / a-Si 简化结构分析光被哪一层…

作者头像 李华
网站建设 2026/8/12 15:08:54

企业微信RPA外部群自动化调用实战指南

1. 企业微信RPA自动化外部群调用的核心挑战 企业微信作为国内主流的企业级IM工具,其RPA自动化能力在提升办公效率方面发挥着重要作用。但在外部群场景下,自动化操作面临着独特的安全边界问题。根据我过去三年实施企业微信自动化项目的经验,外…

作者头像 李华
网站建设 2026/8/12 15:06:49

C#动态链接库(DLL)创建与调用全流程实战指南

1. 项目概述:为什么我们需要亲手创建和调用DLL?在C#开发中,尤其是涉及模块化、代码复用或为其他语言(如Python、C)提供功能接口时,动态链接库(DLL)是一个绕不开的核心概念。你可能在…

作者头像 李华
网站建设 2026/8/12 15:06:48

工业AI Agent六大核心设计原则:从理论到Java/Spring Boot实战

1. 项目概述:工业Agent的实战价值与挑战 最近和几个在制造业、能源行业做数字化转型的朋友聊天,大家不约而同地提到了一个词:Agent。不是电影里的特工,而是AI智能体。尤其是在工业场景下,从预测性维护到能耗优化&#…

作者头像 李华