Ivan's Blog
主题

DC fan speed control

DC fan speed control 表示项目明确采用两线 DC 风扇的模拟调压控制模式,而不是直接把 PWM chopping 当默认方案。典型实现是 PWM -> RC 滤波 -> 注入可调 LDO 反馈网络,再配合独立 EN 和可选 tach 反馈,把“风扇供电轨”作为一个可调模拟系统来维护。 这个 Topic 的重点是控制策略和电路语义,而不是“有风扇”这么宽。

  • 硬件

目录

Definition

DC fan speed control 表示项目明确采用两线 DC 风扇的模拟调压控制模式,而不是直接把 PWM chopping 当默认方案。典型实现是 PWM -> RC 滤波 -> 注入可调 LDO 反馈网络,再配合独立 EN 和可选 tach 反馈,把“风扇供电轨”作为一个可调模拟系统来维护。

这个 Topic 的重点是控制策略和电路语义,而不是“有风扇”这么宽。它通常会和 Async embedded、Embedded Rust、Device mono-repo 一起出现,但不替代这些 Topic:DC fan speed control 解释的是控制回路、响应/纹波权衡和温控接口,其他 Topic 才解释固件运行时或整机结构(projects/isolarail.md、projects/ups120.md)。

When to use

当 checked-in docs、project snapshot 或电路/固件说明明确写出通过 PWM 滤波、LDO feedback 注入、独立 FAN_EN、tach 反馈或温控 setpoint 来控制两线风扇时使用。若只是三线/四线风扇直连 PWM 或通用 GPIO 控制,不应直接命中。

如果一个改动会影响 RC 常数、注入电阻、输出电压范围、FAN_EN 语义、tach 采样、温控 setpoint、响应时间或纹波折中,就应该命中本 Topic。若问题只是一般 MCU PWM 外设配置、而无风扇电路语义,则应回到更基础的固件 Topic。

Habits / defaults

  • Use PWM -> 2-stage RC -> FB inject as the baseline control path, with explicit R_UPPER/R_LOWER/R_INJ values documented and derivable output range targets (commonly around 2 V to 5 V). Evidence: isolarail:docs/pwm_fan_control_circuit_design.md, ups120:firmware/ups-main/docs/fan_control_spec.md
  • Keep an independent FAN_EN (LDO EN) line for deterministic off-state behavior and cleaner startup sequencing than duty-only shutdown. Evidence: isolarail:docs/pwm_fan_control_circuit_design.md, isolarail:docs/hardware_connection_overview.md, ups120:firmware/ups-main/docs/fan_control_spec.md
  • Run PWM above audible range (20 kHz+; often 25 kHz) and treat RC constants as a design variable linked to response time and ripple suppression. Evidence: isolarail:docs/pwm_fan_control_circuit_design.md, ups120:firmware/ups-main/docs/fan_control_spec.md
  • Treat thermal/diagnostic integration as part of the pattern: temperature-based setpoint logic and optional tach/PCNT feedback hooks are documented alongside the analog path. Evidence: isolarail:docs/pwm_fan_control_circuit_design.md, isolarail:src/fan.rs, ups120:firmware/ups-main/docs/fan_control_spec.md
  • 默认把风扇控制当电源路径问题,而不是单纯 PWM 参数问题。电阻比、目标电压范围、off-state 和纹波都要留在文档里,后续才能解释为什么某个 duty 对应某个风扇行为。
  • 热控逻辑和诊断接口是主题的一部分。温度阈值、tach/PCNT、风扇堵转或启动失败策略,不应被视为“以后再补”的外围逻辑。
  • 回答此 Topic 时,应写清它为何选择模拟调压而不是直切 PWM:通常是为了两线风扇、低噪声或更可控的供电轨。若这一理由没写,Topic 价值会迅速消失。

Reference implementations

  • projects/isolarail.md:适合说明 ESP32 固件、风扇控制电路和硬件文档怎样一起表达这个模式。
  • projects/ups120.md:适合说明风扇控制如何与温控、诊断和设备主固件一起演化。

Failure modes

  • 只因为“有风扇”就打这个 Topic,会把普通 PWM 控制和模拟调压控制混为一谈。
  • 把 DC fan speed control 当成整个仓库的总括标签,忽略 Async embedded、Embedded Rust、Device mono-repo 等相邻 Topic,会让后续 Agent 无法判断真正该看的是电路控制、固件任务还是设备上下文。
  • 不写 FAN_EN、RC 常数或输出范围,会让后续维护者根本无法推断为什么风扇启停、噪声或转速表现异常。
  • 只改固件 setpoint 不回看模拟路径和 tach 反馈,也会把最容易出故障的联动面遗漏掉。

Evidence index

  • projects/isolarail.md
  • projects/ups120.md
  • skills/style-playbook/references/data/topics/dc-fan-speed-control.json