17. 闪光灯与AF功耗:闪光灯电流控制、AF马达功耗优化、激光对焦功耗

闪光灯和自动对焦(AF),这两个模块在相机功耗里,属于典型的「平时不吭声,一用就炸」的类型。闪光灯瞬间电流能飙到2A以上,AF马达反复拉动镜头,激光对焦虽然功耗低,但架不住它一直开着。今天我们就来逐个拆解。

17.1 闪光灯电流控制:别让闪光灯把电池拉崩

闪光灯的核心矛盾在于:要亮,就要大电流;大电流,电池电压就会瞬间跌落。我见过不少项目,闪光灯一亮,系统直接掉电重启——这就是典型的电流冲击没处理好。

17.1.1 闪光灯的工作模式与电流特征

闪光灯分两种:LED闪光灯氙气闪光灯。现在手机基本都是LED,所以我们重点讲LED。

模式 典型电流 持续时间 功耗特点
手电筒模式 100~200mA 持续 低功耗,但发热明显
拍照预闪 500~800mA 100~300ms 用于对焦辅助、测光
拍照主闪 1.5~2.5A 50~200ms 峰值电流,最危险
视频补光 300~600mA 持续 需要平衡亮度和发热

关键点:主闪的2A级电流,持续时间虽然只有几十毫秒,但足以让电池电压从4.2V跌到3.4V以下。如果此时系统还在做其他高负载操作(比如ISP处理、CPU降频),很容易触发欠压保护。

17.1.2 电流控制策略

我个人习惯的做法是:分阶段限流。不要一上来就全功率输出,而是先给一个较小的电流,等电压稳定后再逐步提升。

// 伪代码:闪光灯电流斜坡控制
void flash_ramp_up(int target_current_ma) {
    int step = 100;  // 每步增加100mA
    int delay_ms = 5; // 每步间隔5ms
    
    for (int cur = 0; cur < target_current_ma; cur += step) {
        set_flash_current(cur);
        delay(delay_ms);
        // 检查电池电压
        if (get_battery_voltage() < 3.5f) {
            // 电压跌得太快,停止增加
            break;
        }
    }
}

嗯,这里要注意:斜坡时间不能太长。如果超过100ms,用户会感觉到闪光灯「慢慢亮起来」,体验很差。我一般控制在30~50ms内完成斜坡。

避坑指南:我曾经在一个项目里,把斜坡时间设成了200ms,结果测试反馈说「闪光灯像蜡烛一样慢慢点燃」。后来改成40ms,问题解决。另外,别忘了在闪光灯关闭时也做斜坡下降,否则突然切断大电流会产生反向电动势,干扰电源轨。

17.1.3 硬件层面的配合

软件控制是一方面,硬件选型也很关键。我建议关注以下几点:

  • 闪光灯驱动IC的电流能力:选支持2A以上峰值电流的型号,留足余量
  • 电池内阻:内阻越小,电压跌落越少。如果电池内阻超过150mΩ,闪光灯大电流时基本必掉压
  • 电容储能:在闪光灯附近并联一个大电容(220μF以上),可以缓冲瞬间电流需求

17.2 AF马达功耗优化:镜头移动的每一毫米都要精打细算

AF马达的功耗,很多人不重视。你想想看,每次拍照都要对焦,每次对焦马达都要跑一遍行程。一天拍100张照片,马达来回跑200次,积少成多,功耗就上去了。

17.2.1 不同AF马达的功耗对比

马达类型 工作电流 对焦速度 功耗特点
VCM(音圈马达) 80~150mA 电流与位移成正比,持续供电
步进马达 50~100mA 中等 脉冲驱动,到位后断电
压电马达 10~30mA 功耗最低,但速度慢
记忆金属(SMA) 30~60mA 中等 靠热胀冷缩,有延迟

目前主流手机用的还是VCM,因为它速度快、控制简单。但VCM有个问题:它需要持续供电才能保持位置。也就是说,对焦完成后,如果你不释放马达,它还在耗电。

17.2.2 优化策略:减少无效驱动

我总结了几条实用的优化方法:

  1. 对焦完成后立即释放马达:VCM到位后,把驱动电流降为0,靠机械弹簧复位。但要注意,复位后镜头会回到初始位置,下次对焦需要重新驱动。所以这个策略适合「单次对焦」场景,不适合「连续对焦」。
  2. 使用「保持电流」而非「驱动电流」:如果必须保持位置(比如录像时),可以用一个很小的保持电流(10~20mA),而不是全功率驱动。很多驱动IC都支持这个模式。
  3. 减少无效对焦次数:比如在预览界面,如果画面没有明显变化,就不要反复触发AF。我见过一些方案,每帧都跑一次AF,马达一直在那里「嗡嗡嗡」地微调,功耗白白浪费。

注意:减少AF次数要谨慎。如果用户快速移动手机,AF跟不上会导致画面模糊。我建议的做法是:检测运动状态——静止时降低AF频率,运动时提高AF频率。这样既省电又不影响体验。

17.2.3 代码层面的优化

// 优化前:每次预览帧都触发AF
void onPreviewFrame() {
    autoFocus();  // 每帧都跑,功耗高
}

// 优化后:根据场景动态调整AF频率
void onPreviewFrame() {
    static int frame_count = 0;
    static float last_gyro = 0;
    
    float current_gyro = getGyroValue();
    float delta = abs(current_gyro - last_gyro);
    
    if (delta > 0.5f) {
        // 手机在运动,每5帧对焦一次
        if (frame_count % 5 == 0) {
            autoFocus();
        }
    } else {
        // 手机静止,每30帧对焦一次
        if (frame_count % 30 == 0) {
            autoFocus();
        }
    }
    
    last_gyro = current_gyro;
    frame_count++;
}

这个方案我在一个项目中用过,AF功耗降低了约40%。当然,具体参数需要根据实际场景调优。

17.3 激光对焦功耗:小功耗也要抠

激光对焦(Laser AF)的功耗其实不高,一般只有几十毫瓦。但问题在于:它通常是一直开着的。预览状态下,激光发射器持续发射红外激光,接收器持续检测反射信号。一天下来,累积功耗也不小。

17.3.1 激光对焦的工作原理

激光对焦的原理很简单:发射一束红外激光,打到物体上反射回来,接收器检测到反射光,通过飞行时间(ToF)计算距离。它的优点是:在暗光环境下比PDAF(相位对焦)更准

但激光对焦有个天然缺陷:距离有限。一般只能测0.2~5米的范围。超出这个范围,激光信号太弱,接收器检测不到。

17.3.2 功耗优化:按需开启

我个人建议的做法是:不要一直开着激光。只有在需要的时候才开启,比如:

  • 环境光线较暗(PDAF失效时)
  • 检测到近景物体(距离小于3米)
  • 用户主动点击对焦
// 激光对焦的按需开启逻辑
void handleLaserAF() {
    float lux = getAmbientLightLevel();
    float distance = getEstimatedDistance(); // 通过其他传感器估算
    
    if (lux < 50.0f && distance < 3.0f) {
        // 暗光且近景,开启激光
        enableLaser(true);
        doLaserAF();
    } else {
        // 光线充足或远景,关闭激光
        enableLaser(false);
        // 使用PDAF或对比度对焦
        doPDAF();
    }
}

小技巧:激光对焦的发射器可以工作在「脉冲模式」而非「连续模式」。脉冲模式下,发射器只在需要测量时发一个短脉冲,平时处于休眠状态。这样可以把功耗再降低50%以上。不过要注意,脉冲模式需要接收器有快速响应的能力,否则会漏掉反射信号。

17.3.3 激光对焦与PDAF的协同

我见过一些方案,激光对焦和PDAF同时工作,结果两者互相干扰。其实更好的做法是:让它们互补

  • 光线充足时:只用PDAF,激光关闭
  • 光线不足时:开启激光辅助,PDAF降频或关闭
  • 极暗环境:只用激光,PDAF完全关闭

这样既保证了各种场景下的对焦精度,又把功耗降到了最低。

17.4 本章知识体系

下面这张图总结了闪光灯、AF马达和激光对焦的功耗优化要点:

闪光灯与AF功耗优化知识体系 闪光灯电流控制 • 分阶段斜坡控制 • 电池电压实时监测 • 电容储能缓冲 • 预闪/主闪电流分级 • 关闭时斜坡下降 关键指标: 峰值电流 1.5~2.5A 斜坡时间 30~50ms 电压阈值 >3.5V AF马达功耗优化 • 到位后释放马达 • 保持电流模式 • 动态调整AF频率 • 运动检测联动 • 马达类型选择 VCM典型电流: 驱动 80~150mA 保持 10~20mA 优化后功耗降40% 激光对焦功耗 • 按需开启策略 • 暗光/近景触发 • 脉冲模式驱动 • 与PDAF协同 • 休眠状态管理 工作电流: 连续模式 30~50mA 脉冲模式 10~20mA 有效距离 0.2~5m 核心原则:按需供电、分级控制、软硬协同

好了,这一章的内容就到这里。闪光灯、AF马达、激光对焦,这三个模块虽然单个功耗不算特别大,但组合起来,对相机整体功耗的影响不容忽视。尤其是闪光灯的瞬间大电流,处理不好会引发系统级问题。希望今天的分享对你有帮助。