STM32智能加湿器闭环控制与硬件设计详解
1. 项目背景与核心功能解析
智能家居设备正逐步从单一功能向环境感知与自动调节方向发展。这款基于STM32的智能空气加湿器区别于传统产品的最显著特征,是其具备闭环控制能力。系统通过高精度温湿度传感器持续监测环境数据,当检测到湿度低于设定阈值时,会自动激活雾化模块,并在达到理想湿度后停止工作,整个过程无需人工干预。
硬件架构上,项目采用模块化设计思路:
- 主控单元:STM32F103C8T6作为控制核心,该芯片具有72MHz主频和丰富的外设接口
- 感知层:SHT30温湿度传感器(精度±2%RH)负责环境数据采集
- 执行层:24V超声波雾化片配合IRLZ44N MOSFET实现雾化控制
- 人机交互:0.96寸OLED显示屏配合旋转编码器构成用户界面
- 安全防护:磁簧式水位开关和NTC温度传感器组成双重保护机制
2. 硬件设计关键细节
2.1 雾化模块驱动电路设计
超声波雾化片需要24V/1.2A的驱动条件,电路设计需特别注意:
// 典型驱动电路组成 24V电源 → 1000μF电解电容 → IRLZ44N MOSFET → 雾化片 ↑ STM32 PWM信号通过1kΩ电阻接入栅极实际布线时要注意:
- 功率地(MOSFET侧)与信号地(MCU侧)采用单点连接
- PWM信号线需加100Ω电阻防止振铃
- MOSFET需安装散热片(建议≥20×15mm铝基板)
2.2 传感器布局优化
温湿度传感器的安装位置直接影响测量准确性:
- 应远离雾化出口至少15cm
- 避免阳光直射和热源影响
- 理想安装角度为传感器开口向下45°
- 建议增加透气防尘罩(可用海绵材料制作)
3. 软件架构与核心算法
3.1 湿度控制逻辑实现
采用带死区的PD控制算法(比例-微分),相比传统PID更适合湿度控制:
#define HYSTERESIS 3 // 回差控制值(单位:%RH) void Humidity_Control(float currentRH, float targetRH) { static float last_error = 0; float error = targetRH - currentRH; float derivative = error - last_error; if (error > HYSTERESIS) { // 开启雾化并计算PWM占空比 pwm_duty = Kp*error + Kd*derivative; Set_PWM(pwm_duty); Set_Fan_Speed(MEDIUM); } else if (error < -HYSTERESIS) { Stop_Humidification(); } last_error = error; }参数经验值:
- Kp(比例系数):25.0
- Kd(微分系数):5.0
- 控制周期:建议2秒
3.2 多任务调度方案
基于FreeRTOS的任务划分方案:
void StartDefaultTasks(void) { xTaskCreate(Sensor_Task, "Sensor", 128, NULL, 3, NULL); xTaskCreate(Control_Task, "Control", 256, NULL, 4, NULL); xTaskCreate(Display_Task, "Display", 192, NULL, 2, NULL); xTaskCreate(Input_Task, "Input", 128, NULL, 1, NULL); }各任务优先级设置原则:
- 控制任务(最高):实时性要求高
- 传感器任务:保证数据及时更新
- 显示任务:刷新率要求适中
- 输入任务:响应延迟容忍度高
4. 安全保护机制实现
4.1 缺水保护实现
采用磁簧开关+浮球方案,硬件连接:
VCC → 10kΩ上拉电阻 → 磁簧开关 → GPIO ↑ 浮球(内置磁铁)软件处理逻辑:
void Check_Water_Level(void) { if (HAL_GPIO_ReadPin(WATER_LEVEL_GPIO) == LOW) { Stop_Humidification(); Show_Error("LOW WATER"); Buzzer_Alert(3); } }4.2 过温保护策略
在雾化片附近安装NTC热敏电阻(10kΩ B值3950):
- ADC采样值转换为温度:
float Read_NTC_Temperature(void) { uint32_t adc = ADC_Read(NTC_CHANNEL); float Rt = 10000.0 * (4095.0 / adc - 1); // 10k上拉 float temp = 1/(1/298.15 + log(Rt/10000)/3950) - 273.15; return temp; }- 保护触发条件:
- 温度>65℃:降低PWM占空比50%
- 温度>75℃:立即关闭雾化片
- 温度>85℃:切断总电源(通过MOSFET)
5. 人机交互设计要点
5.1 OLED界面布局优化
采用分层显示策略:
第一行:湿度 52% RH 温度 23.5℃ 第二行:[AUTO] 目标 55% 第三行:雾化 ▲▲◉○○ 风扇 ◉○○ 第四行:定时 02:30 电量 78%图标设计技巧:
- 使用自定义8×8像素字体
- 动态效果通过定时刷新实现(如▲符号轮流亮灭)
- 重要参数反色显示
5.2 旋转编码器处理
EC11编码器的典型驱动代码:
void EXTI_Handler(void) { static uint8_t last_state; uint8_t current = Read_AB_Pins(); if ((last_state == 0b01 && current == 0b11) || (last_state == 0b10 && current == 0b00)) { // 正转处理 target_RH += 1; } else if ((last_state == 0b11 && current == 0b01) || (last_state == 0b00 && current == 0b10)) { // 反转处理 target_RH -= 1; } last_state = current; }消抖处理:
- 硬件:0.1μF电容并联AB引脚
- 软件:50ms状态稳定检测
6. 电源管理设计
6.1 多电压转换方案
系统需要三种电压等级:
24V → 雾化片驱动 12V → 散热风扇 5V/3.3V → 控制电路推荐电源架构:
- 24V输入采用MP2307降压模块(最大3A)
- 12V通过LM2596-ADJ转换获得
- 5V使用AMS1117-5.0稳压器
- 3.3V由STM32内置LDO提供
6.2 低功耗优化
待机模式下的省电措施:
- 关闭OLED背光(可节省约20mA)
- 降低传感器采样频率(从1Hz→0.2Hz)
- 切换MCU到Sleep模式(通过WFI指令)
- 关闭雾化片供电MOSFET(完全切断24V回路)
7. 项目进阶方向
7.1 物联网功能扩展
通过ESP-01S模块增加WiFi连接:
- 硬件连接:
ESP-01S STM32 TX → USART2_RX RX → USART2_TX EN → 3.3V GPIO0 → NC GPIO2 → 10k上拉- AT指令示例:
void ESP_Send_Data(float temp, float rh) { UART_Send("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80\r\n"); Delay(1000); UART_Send("AT+CIPSEND=100\r\n"); Delay(500); UART_Send("GET /update?api_key=XXX&field1=%.1f&field2=%.1f\r\n", temp, rh); }7.2 加湿效率优化
通过实验确定的雾化参数组合:
| 湿度差 | PWM占空比 | 风扇档位 | 工作周期 |
|---|---|---|---|
| >10%RH | 90% | 高档 | 持续 |
| 5-10% | 70% | 中档 | 5分钟开/1分钟关 |
| <5% | 50% | 低档 | 3分钟开/2分钟关 |
实际测试表明,这种分段控制策略比固定参数方案节能约35%,同时减少水珠凝结现象。
