文章

树莓派 5 主动散热器实测:风扇调速策略与满载温度

给树莓派 5 装上带风扇的主动散热器后,通过三阶段压力实验实测风扇的启停温度、换挡逻辑和满载散热能力:4 核满载稳定在 72.2°C,远低于 85°C 降频线。

树莓派 5 主动散热器实测:风扇调速策略与满载温度
  1. 监控接口:温度和转速从哪里读
  2. 实验设计:三阶段压力测试
  3. 实测结果
  4. 风扇的自动调速策略
  5. 结论

树莓派 5 的性能比前代强了不少,发热也随之水涨船高。裸奔状态下长时间高负载很容易撞到 85°C 的降频温度墙,所以我给它装了一个带 PWM 风扇的主动散热器。

装上之后自然想验证几个问题:风扇到底转不转?什么时候转?满载时压不压得住温度? 树莓派系统内核直接把温度和风扇转速都暴露了出来,不需要装任何额外软件,写个脚本采样一轮压力测试就能得到完整答案。

监控接口:温度和转速从哪里读

树莓派 5 上读取温度和风扇状态的途径:

信息接口示例输出
CPU 温度vcgencmd measure_temptemp=47.2'C
CPU 温度(毫摄氏度)/sys/class/thermal/thermal_zone0/temp46300
风扇转速 RPM/sys/class/hwmon/hwmon3/fan1_input1904
风扇 PWM 占空比(0–255)/sys/class/hwmon/hwmon3/pwm175
散热档位(0–4)/sys/class/thermal/cooling_device0/cur_state1
是否降频vcgencmd get_throttledthrottled=0x0

其中 hwmon3 的名字是 pwmfan(可用 cat /sys/class/hwmon/hwmon3/name 确认),说明风扇是主板直接驱动的 PWM 风扇,内核的 thermal 框架会根据 CPU 温度自动调整 cur_state 档位(0 停转,4 全速),不需要任何用户态配置。

刚装好散热器开机时,空闲温度约 47°C,风扇已经在低速档运转(约 1900 RPM)——风扇确实在工作,接下来就是定量验证。

实验设计:三阶段压力测试

要观察风扇的完整行为,需要让温度经历“低 → 快速升高 → 高 → 回落”的完整循环。实验分三个阶段,全程每 2 秒采样一次温度、转速、PWM 和档位:

flowchart LR
    A["空闲 60 秒<br/>记录基线"] --> B["4 核满载 240 秒<br/>观察升温与风扇响应"]
    B --> C["撤载冷却 240 秒<br/>观察降温与风扇降档/停转"]

满载负载用纯 CPU 忙循环生成,4 个核心各钉一个进程,不依赖任何第三方压测工具:

1
2
3
4
5
# 每个核心跑一个 bash 算术忙循环
for c in 0 1 2 3; do
  taskset -c $c bash -c 'x=1; while :; do x=$(( (x*1103515245 + 12345) & 0x7fffffff )); done' &
done
# 测试结束后 kill 这些后台进程即可

采样脚本的核心是每 2 秒读一次 sysfs 接口并记录为 CSV:

1
2
3
4
5
6
temp=$(awk '{printf "%.1f", $1/1000}' /sys/class/thermal/thermal_zone0/temp)
rpm=$(cat /sys/class/hwmon/hwmon3/fan1_input)
pwm=$(cat /sys/class/hwmon/hwmon3/pwm1)
cool=$(cat /sys/class/thermal/cooling_device0/cur_state)
echo "$elapsed,$phase,$temp,$rpm,$pwm,$cool" >> log.csv
sleep 2

实测结果

完整测试的温度与转速曲线:

树莓派 5 满载测试:温度与风扇转速曲线

三个阶段的关键数据:

阶段温度风扇行为
空闲(60 s)平均 48.0°C低速档约 1960 RPM;温度降至约 46°C 时完全停转
4 核满载(240 s)峰值 72.2°C 后进入平台期3 秒内响应启动,逐级升档,最高约 6300 RPM(3 档)
冷却(240 s)20 秒内从 70.5°C 跌至 55°C随温度逐级降档,回到低速档约 2030 RPM

几个值得注意的细节:

  • 温度响应极快:满载开始后 2 秒内 CPU 温度就从 47°C 冲到 56°C,风扇几乎同步启动,温控链路没有可感知的延迟。
  • 满载平衡温度 72.2°C:4 核压满后温度在 72°C 附近进入平台,风扇稳定在 3 档(约 6300 RPM),始终没触发最高的 4 档。
  • 没有降频:测试结束后 vcgencmd get_throttled 返回 0x0,确认全程未降频,距离 85°C 的降频线还有 13°C 余量。
  • 降温同样快:负载撤掉后 20 秒降 15°C,说明散热器和风扇的热交换效率不错,热量不会闷在板子上。

风扇的自动调速策略

把风扇档位对温度画出来,可以看到完整的升档/降档路径:

风扇档位随温度变化:升档与降档存在迟滞

实测的换挡温度点:

变化触发温度对应转速
停转 → 1 档约 50°C(升温快,采样到 56°C 时已在转)约 1900 RPM
1 档 → 2 档约 62°C约 2800–3800 RPM
2 档 → 3 档约 66°C约 4600–6300 RPM
3 档 → 2 档(降温)约 60°C
2 档 → 1 档(降温)约 54°C
1 档 → 停转(降温)约 46°C

注意升档和降档的温度点并不重合:升到 2 档要 62°C,但降回 1 档要等到 54°C;停转更是要等到 46°C。这种迟滞(hysteresis)设计是有意的——如果升档降档用同一个阈值,温度在临界点附近波动时风扇会反复启停、转速抖动,既吵又伤风扇。错开几摄氏度后,风扇在每个档位都能稳定停留。

另外,空闲时风扇会完全停转而不是一直保持低速,日常轻负载使用基本听不到风扇声音,只有真正上负载时才会启动。

结论

这次实测回答了开头的三个问题:

  1. 风扇确实在转,由内核 thermal 框架按 CPU 温度全自动调速,0–4 共 5 档,开箱即用;
  2. 启停逻辑清晰:约 50°C 启动、62°C / 66°C 逐级升档,降档带迟滞,低于约 46°C 彻底停转;
  3. 散热能力充足:4 核满载稳定在 72.2°C,离 85°C 降频线还有 13°C 余量,且撤载后降温迅速。

对日常使用来说,这个散热器的效果让人放心:轻载时静音(风扇停转),重载时压得住温度。如果你的树莓派 5 经常跑编译、转码这类持续高负载任务,主动散热器是值得装的。

本文由作者按照 CC BY 4.0 进行授权