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 响应和拍照处理速度。

我建议按优先级来:

  1. 先砍非关键负载:比如后台的 AI 场景识别、美颜算法精度、HDR 合成帧数。这些砍了用户感知不强,但能省不少功耗。
  2. 再限制帧率:从 60fps 降到 30fps,或者从 30fps 降到 24fps。帧率降低直接减少 ISP 处理量,降温效果明显。
  3. 最后才动频率:如果前两步还压不住,再考虑降低 ISP 或 GPU 频率。注意是「降低」不是「锁死」,保留一定的动态调节空间。

我的经验:降频时尽量保持「平滑过渡」。不要从 1.8GHz 直接跳到 1.2GHz,而是分 3-4 步,每步降 100-200MHz。这样用户几乎感觉不到性能变化。

代码层面,我一般用 interactiveschedutil 调频器,配合自定义的 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 整体策略流程图

下面这张图是我自己项目里用的温控策略框架,你可以参考:

相机温控降频策略流程图 温度监测 T < 55°C? 正常模式 55°C ≤ T < 60°C? 第一层:预警 60°C ≤ T < 65°C? 第二层:干预 第三层:保护 滞回恢复(+4°C) 正常 预警 干预 保护

这张图的核心逻辑就是:逐层介入,逐层恢复,每层都有滞回。你照着这个框架去调参数,基本不会出大问题。

最后说一句:温控策略没有「万能参数」。不同机型、不同散热设计、不同使用场景,阈值和策略都要微调。我习惯在实验室里用热风枪模拟高温环境,反复测试降频和恢复的边界,直到找到那个「用户感知不到」的平衡点。

核心总结:

  • 三层阈值 + 3-5°C 滞回区间,防止频繁跳变
  • 降频优先级:砍负载 > 限帧率 > 降频率
  • 恢复策略:延迟 + 分步 + 监控趋势,避免热抖动
  • 不同场景(拍照/录像)使用不同的恢复速度

公众号:蓝海资料掘金营,微信deep3321