type
Post
status
Published
date
Apr 12, 2026
slug
summary
tags
category
icon
password
本项目采用STM32F103C8T6作为主控芯片
📝 项目简介
项目功能包括
- 支持待机、手动、自动、防回流四种工作模式
- 支持温度、湿度、气体浓度采集,协同作为电机控制决策
- 手动模式下通过
PID实现目标转速闭环控制,高低档
- 自动模式下通过多传感器融合结果动态输出风机PWM
- 防回流模式下通过阈值和滞回逻辑启停风机
- 通过USART3 → Python→WebSocket→浏览器,实现上位机监控
- 通过LCD实时显示系统状态
工作模式介绍
1.待机模式
系统的空闲状态,电机不工作,系统本身仍然处于运行状态,传感器采集,按键扫描,LCD显示仍然正常工作。代码里待机模式会执行motor_stop(),此时电机运行标志和自动模式计数器状态清零
2.手动模式
用户主动控制电机的模式,根据挡位设置电机转速:抵挡或者高档(190/220RPM),接着通过PID不断比较目标转速和实际转速,实时调整PWM输出,让风机转速尽量稳定
3.自动模式
这个就是结合温度、湿度和气体浓度融合计算,得到一个PWM调整转速。同时还设置了阈值判断是否进入”Cooking Event”,也就是烹饪场景。内部分为三个状态
- 首先进入自动模式时候,电机转速较低,等待cooking event触发
- 触发后,按照融合算法来动态调节风速
- 烹饪结束不会停机,延时一段时间关机
4.防回流模式
这个模式主要解决烟气倒灌问题,系统周期性检测MQ2的气体浓度,浓度超过阈值的时候,触发回流条件,自动启动风机。当浓度降低,就自动关闭电机。当然这里采用了滞回逻辑,防止风机在临界值反复开关。一旦电机运动,转速由高低档位配PID算法实现。
采用FreeRTOS原因
系统中需要处理逻辑如下
1.按键扫描和模式切换
2.传感器DHT11/MQ2
3.风速融合算法
4.电机PWM控制
5.编码器测速
6.串口状态上传
7.LCD刷新
如果还是采用裸机的循环裸机,各模块之间会发生耦合,显示/控制/通信很难兼顾实时性,整体系统反应速度变低。
项目中任务拆分
1.按键扫描任务
KeyScanTask:周期性扫描按键,保证对模式/挡位/开关/蜂鸣器的控制和切换
2.传感器采集任务
SensorTask:周期性读取DHT11、MQ-2,把温湿度和气体浓度写入系统
3.融合算法任务
WindSpeedTask:读取环境数据,执行PWM融合算法,判断当前是否进入Cooking Event
4.电机控制任务
MotorControlTask:根据不同模式,调整电机运行策略
5.UI显示任务
6.防回流任务
7.测速任务
8.数据上传任务
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~