PTC 加热器温控与风扇控制优化实录

PTC 加热器温控与风扇控制优化实录

snailszzy
2025-08-14 / 0 评论 / 8 阅读 / 正在检测是否收录...

ESP32 智能温控系统调试记:一次温度 & 风扇策略的优化分析

前言

最近在调试基于 ESP32-S3 的智能温控系统(项目:PetBoxX),系统需要根据 温度传感器(SHT30) 的实时数据动态控制 PTC 加热器 与 风扇转速,以确保设定温度(SP)稳定,同时避免风扇频繁抖动和噪音问题。

上图是一次运行的温度 & 风扇速度记录曲线,通过新增的 状态位日志(STATE: …) 以及自定义绘图脚本,我们得以精准分析系统在不同阶段的工作模式。


mea7vrjp.png

曲线解读

  1. 温度变化(上图)
    • 橙色虚线:目标温度 SP(ramp),采用缓升方式避免初期冲击过大。
    • 蓝色实线:实际温度(SHT30 采集)。
    • 背景色:
    • 浅橙色:HEAT 模式
    • 浅蓝色:HOLD 模式(接近目标温度,主要靠微调维持)
    • 顶部细条带:
    • BOOST(黄色):短时间内强力加热
    • SILENT(绿色):风扇降速,噪音优先
    • FREEZE(蓝色):到点即静音/快速积分泄放
    • STALL(红色):检测到风扇转速异常或低于安全阈值

可以看到,在初期 HEAT 模式下,温度快速爬升,接近目标值后系统进入 HOLD,并且伴随 FREEZE 状态,完全关闭加热并快速泄掉 PID 积分,防止过冲。

  1. 风扇转速变化(下图)
    • 蓝线:风扇占空比(%)
    • 彩色圆点:量化档位切换(Q=0、25、35)
    • 量化 + 停留(Dwell)机制:
    • 避免风扇在 18%/25%/35% 档位频繁抖动
    • 最小停留时间 FAN_DWELL_MIN_S = 2.0s,跨档才重置
    • 低于 20% 自动归零(静音)

可以看到,风扇在低档和中档之间切换非常平稳,没有了之前的“针尖”跳动问题。

核心技术点

  1. 到点即静音 & 积分快速泄放

    bool in_freeze = (fabsf(err) <= FREEZE_ERR_C) && (fabsf(dtemp_f) <= FREEZE_DTD_C);
    if (in_freeze) {
     u_target = 0.0f;      // 彻底停火
     g_int   *= 0.80f;     // 快速释放积分,防止回弹
    }

    这样一旦温度误差和变化率都很小,就立即关闭加热并降低风扇噪音。

  1. 风扇量化 & 停留时间(Dwell)

    static float g_fan_dwell_s = 0.f;
    static float g_fan_last_quant = 0.f;
    static const float FAN_DWELL_MIN_S = 2.0f;
    
    static inline float fan_quantize_local(float fan_pct){
     if (fan_pct < 20.f) return 0.f;
     if (fan_pct < 30.f) return 25.f;
     return 35.f;
    }
    
    float quant = fan_quantize_local(fan_target);
    if (quant != g_fan_last_quant) {
     if (g_fan_dwell_s > 0.f) {
         fan_target = g_fan_last_quant;
     } else {
         g_fan_last_quant = quant;
         g_fan_dwell_s = FAN_DWELL_MIN_S;
     }
    }
    g_fan_dwell_s = fmaxf(0.f, g_fan_dwell_s - dt_s);

    保证风扇在同一档位至少维持 2s,避免频繁切换。

  1. 状态位日志 & 可视化分析

运行时打印状态:

STATE: t=692.6s MODE=HEAT BOOST=0 SILENT=0 FREEZE=0 STALL=1 | SP=40.00 T=39.39 dTdt=0.005 | Fan=18.0% (Q=0) Heat=28.0%

绘图脚本(plot_log_state.py)可解析这些状态,并在曲线上上色,快速定位问题阶段。

总结

通过这次调试:

•    温度控制 从传统 PID 调整为带 FREEZE 的抗过冲策略
•    风扇控制 从线性映射改为 量化 + 停留时间,显著降低噪音
•    可视化 结合状态位日志,分析效率提升数倍

接下来还可以尝试:

•    按室温与目标温差自适应调整风扇基础档位
•    在 HOLD 模式下进一步优化风扇功耗
•    引入环境湿度对加热功率的补偿

0

评论 (0)

取消