9. 温控与降频策略:温控阈值设置、降频策略选择、避免热抖动
相机是个发热大户,这你肯定知道。ISP 拼命算,CPU 拼命跑,GPU 还得帮着处理图像——三路齐开,温度不飙升才怪。但问题来了:温度一高,系统就降频;降频一狠,相机就卡顿;卡顿一出现,用户就骂娘。这个恶性循环,就是我们要解决的。
我个人习惯把温控策略比作「消防系统」。你不能等火烧到屋顶了再报警,也不能一冒烟就全楼喷水。阈值设在哪、降多少频、怎么恢复,每一步都得精细设计。
9.1 温控阈值设置:三层防线
我见过不少项目,温控阈值就设一个点:比如 65°C 开始降频。结果呢?夏天户外拍 5 分钟,温度直接冲到 68°C,系统瞬间把 CPU 锁到 1.2GHz,取景器直接掉帧到 15fps。用户体验?一塌糊涂。
正确的做法是设置多层阈值,每层对应不同的动作。我一般推荐三层:
| 层级 | 温度范围 | 动作 | 目标 |
|---|---|---|---|
| 第一层(预警) | 55°C - 60°C | 轻微限制非关键负载 | 延缓升温 |
| 第二层(干预) | 60°C - 65°C | 降低 ISP 频率 + 限制帧率 | 控制温度 |
| 第三层(保护) | 65°C 以上 | 强制降频 + 降低画质 | 防止关机 |
这里有个关键点:阈值之间要有滞回区间。比如第二层降到 58°C 才恢复,而不是降到 60°C 就恢复。为什么?
滞回区间的作用:防止温度在阈值附近来回跳动,导致系统频繁升降频。我一般设 3-5°C 的滞回窗口。
我在项目中遇到过一个问题:某款手机在 62°C 附近反复横跳,每 2 秒就触发一次降频/恢复,取景器画面一卡一卡的。后来加了 4°C 滞回,问题直接消失。
9.2 降频策略选择:不是只有「一刀切」
降频策略说白了就是:温度高了,你砍谁?
很多方案直接砍 CPU 频率,这其实是最粗暴的做法。你想想看,相机场景下 CPU 负载并不高,真正吃性能的是 ISP 和 GPU。砍 CPU 对降温帮助不大,反而影响了 UI 响应和拍照处理速度。
我建议按优先级来:
- 先砍非关键负载:比如后台的 AI 场景识别、美颜算法精度、HDR 合成帧数。这些砍了用户感知不强,但能省不少功耗。
- 再限制帧率:从 60fps 降到 30fps,或者从 30fps 降到 24fps。帧率降低直接减少 ISP 处理量,降温效果明显。
- 最后才动频率:如果前两步还压不住,再考虑降低 ISP 或 GPU 频率。注意是「降低」不是「锁死」,保留一定的动态调节空间。
我的经验:降频时尽量保持「平滑过渡」。不要从 1.8GHz 直接跳到 1.2GHz,而是分 3-4 步,每步降 100-200MHz。这样用户几乎感觉不到性能变化。
代码层面,我一般用 interactive 或 schedutil 调频器,配合自定义的 governor 参数。比如:
// 伪代码:相机温控降频策略
if (temperature > TEMP_THRESHOLD_2) {
// 第二层干预:降低 ISP 频率
isp_set_freq(ISP_FREQ_MID);
// 限制预览帧率到 30fps
camera_set_preview_fps(30);
// 关闭 HDR 和 AI 场景识别
camera_disable_hdr();
camera_disable_ai_scene();
} else if (temperature > TEMP_THRESHOLD_3) {
// 第三层保护:强制降频
isp_set_freq(ISP_FREQ_LOW);
camera_set_preview_fps(24);
camera_set_quality(CAMERA_QUALITY_MEDIUM);
}
9.3 避免热抖动:降频恢复的「软着陆」
热抖动是什么?就是温度降下来后,系统立刻恢复高频,结果温度又冲上去,再降频……如此反复。用户看到的就是画面一会流畅一会卡顿,体验极差。
我曾经在一个项目上吃过这个亏。当时测试发现,相机在 63°C 降频后,温度降到 59°C 就恢复,结果 10 秒后又冲到 64°C。一天下来,用户投诉「相机一卡一卡的」。后来我改了恢复策略:
- 延迟恢复:温度降到恢复阈值后,等 5-10 秒再恢复。给散热留出缓冲时间。
- 分步恢复:不要一次性恢复所有性能。先恢复帧率,再恢复画质,最后恢复频率。每一步间隔 2-3 秒。
- 监控趋势:如果温度下降速度很慢(比如 1 分钟才降 2°C),说明散热条件差,恢复速度要更慢。
注意:不要用「温度绝对值」作为恢复的唯一依据。我建议结合「温度变化率」来判断。如果温度下降很快,可以快速恢复;如果下降很慢,说明环境温度高,恢复要谨慎。
嗯,这里还有个容易被忽略的点:不同场景的恢复策略应该不同。比如用户正在录像,恢复速度要慢,因为录像持续发热;用户只是拍照,恢复可以快一些,因为拍照是短时高负载。
9.4 整体策略流程图
下面这张图是我自己项目里用的温控策略框架,你可以参考:
这张图的核心逻辑就是:逐层介入,逐层恢复,每层都有滞回。你照着这个框架去调参数,基本不会出大问题。
最后说一句:温控策略没有「万能参数」。不同机型、不同散热设计、不同使用场景,阈值和策略都要微调。我习惯在实验室里用热风枪模拟高温环境,反复测试降频和恢复的边界,直到找到那个「用户感知不到」的平衡点。
核心总结:
- 三层阈值 + 3-5°C 滞回区间,防止频繁跳变
- 降频优先级:砍负载 > 限帧率 > 降频率
- 恢复策略:延迟 + 分步 + 监控趋势,避免热抖动
- 不同场景(拍照/录像)使用不同的恢复速度
公众号:蓝海资料掘金营,微信deep3321