树莓派 5 主动散热器实测:风扇调速策略与满载温度
给树莓派 5 装上带风扇的主动散热器后,通过三阶段压力实验实测风扇的启停温度、换挡逻辑和满载散热能力:4 核满载稳定在 72.2°C,远低于 85°C 降频线。
树莓派 5 的性能比前代强了不少,发热也随之水涨船高。裸奔状态下长时间高负载很容易撞到 85°C 的降频温度墙,所以我给它装了一个带 PWM 风扇的主动散热器。
装上之后自然想验证几个问题:风扇到底转不转?什么时候转?满载时压不压得住温度? 树莓派系统内核直接把温度和风扇转速都暴露了出来,不需要装任何额外软件,写个脚本采样一轮压力测试就能得到完整答案。
监控接口:温度和转速从哪里读
树莓派 5 上读取温度和风扇状态的途径:
| 信息 | 接口 | 示例输出 |
|---|---|---|
| CPU 温度 | vcgencmd measure_temp | temp=47.2'C |
| CPU 温度(毫摄氏度) | /sys/class/thermal/thermal_zone0/temp | 46300 |
| 风扇转速 RPM | /sys/class/hwmon/hwmon3/fan1_input | 1904 |
| 风扇 PWM 占空比(0–255) | /sys/class/hwmon/hwmon3/pwm1 | 75 |
| 散热档位(0–4) | /sys/class/thermal/cooling_device0/cur_state | 1 |
| 是否降频 | vcgencmd get_throttled | throttled=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
实测结果
完整测试的温度与转速曲线:
三个阶段的关键数据:
| 阶段 | 温度 | 风扇行为 |
|---|---|---|
| 空闲(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)设计是有意的——如果升档降档用同一个阈值,温度在临界点附近波动时风扇会反复启停、转速抖动,既吵又伤风扇。错开几摄氏度后,风扇在每个档位都能稳定停留。
另外,空闲时风扇会完全停转而不是一直保持低速,日常轻负载使用基本听不到风扇声音,只有真正上负载时才会启动。
结论
这次实测回答了开头的三个问题:
- 风扇确实在转,由内核 thermal 框架按 CPU 温度全自动调速,0–4 共 5 档,开箱即用;
- 启停逻辑清晰:约 50°C 启动、62°C / 66°C 逐级升档,降档带迟滞,低于约 46°C 彻底停转;
- 散热能力充足:4 核满载稳定在 72.2°C,离 85°C 降频线还有 13°C 余量,且撤载后降温迅速。
对日常使用来说,这个散热器的效果让人放心:轻载时静音(风扇停转),重载时压得住温度。如果你的树莓派 5 经常跑编译、转码这类持续高负载任务,主动散热器是值得装的。

