2. RK平台AF硬件架构:VCM马达类型、IR-CUT驱动与LED补光灯联动
自动对焦(AF)系统的硬件架构是决定对焦速度、精度和稳定性的物理基础。在瑞芯微RK平台上,AF硬件主要由三大部分构成:VCM(音圈马达)、IR-CUT(红外截止滤光片切换器)以及LED补光灯。这三者并非独立工作,而是通过ISP(图像信号处理器)的调度实现联动,以应对不同光照和场景下的对焦需求。
2.1 VCM马达类型:开环与闭环
VCM是驱动镜头移动的核心执行器。根据反馈机制的不同,分为开环(Open Loop)和闭环(Closed Loop)两种类型。两者的差异直接影响AF的精度、功耗和调试复杂度。
| 特性 | 开环VCM | 闭环VCM |
|---|---|---|
| 反馈机制 | 无位置反馈,依赖驱动电流估算位置 | 内置霍尔传感器,实时反馈镜头位置 |
| 对焦精度 | 中等,受温度、重力、老化影响较大 | 高,可精确控制到亚微米级 |
| 对焦速度 | 快(无反馈延迟) | 较快(需处理反馈信号,但可快速收敛) |
| 功耗 | 低 | 较高(传感器持续工作) |
| 调试复杂度 | 低(仅需标定电流-位置曲线) | 高(需标定霍尔ADC-位置曲线,PID参数整定) |
| 典型应用 | 低端摄像头、固定场景监控 | 高端手机、车载、工业相机 |
调试提示: 在RK平台上,开环VCM的调试重点在于 DAC Code与镜头位移的线性度标定;而闭环VCM则需要重点关注 霍尔ADC值的稳定性 以及 PID控制器的比例、积分、微分参数,避免震荡或响应过慢。
2.1.1 开环VCM驱动与标定
开环VCM通过I2C接口向驱动芯片(如DW9714、AK7348)写入DAC值,驱动芯片输出对应的电流驱动马达。镜头位置与DAC值呈近似线性关系,但存在迟滞(Hysteresis)和非线性区。
// RK平台开环VCM驱动示例(基于Linux V4L2子设备)
static int rk_vcm_set_position(struct v4l2_subdev *sd, u32 code)
{
struct rk_vcm_device *vcm = to_rk_vcm(sd);
u16 dac_code;
// 将归一化code(0-1023)映射到实际DAC范围
dac_code = (code * vcm->dac_max) / 1023;
// 通过I2C写入驱动芯片
return regmap_write(vcm->regmap, vcm->dac_reg, dac_code);
}
2.1.2 闭环VCM驱动与PID控制
闭环VCM除了写入目标位置外,还需读取霍尔传感器的ADC值作为反馈。RK平台的ISP驱动通常内置一个PID控制器,用于计算误差并调整输出。
// 闭环VCM PID控制简化逻辑
static int rk_af_pid_controller(struct rk_af_device *af, u16 target_adc)
{
int error = target_adc - af->current_adc;
af->integral += error;
int derivative = error - af->prev_error;
int output = (af->kp * error) + (af->ki * af->integral) + (af->kd * derivative);
af->prev_error = error;
// 限幅并写入DAC
output = clamp(output, 0, af->dac_max);
return rk_vcm_set_dac(af, output);
}
关键参数对比: 开环VCM的标定表通常为 16x16 或 32x32 的网格插值;闭环VCM的标定表则为 霍尔ADC值与实际位移 的映射表,精度要求更高。
2.2 IR-CUT驱动与AF联动
IR-CUT(红外截止滤光片)用于在白天(可见光模式)和夜晚(红外模式)之间切换。在RK平台上,IR-CUT的切换时机必须与AF的搜索策略联动,否则会导致对焦失败或图像偏色。
- 白天模式: IR-CUT切入,滤除红外光。AF使用可见光下的对比度(Contrast)或相位差(PDAF)进行对焦。
- 夜晚模式: IR-CUT切出,允许红外光进入。AF需要切换到红外光下的对焦曲线,因为红外光的折射率与可见光不同,导致最佳焦平面偏移。
- 联动策略: RK平台通过ISP的AEC(自动曝光控制)检测环境照度,当照度低于阈值时,先切换IR-CUT,再触发AF重新对焦。
常见问题: 如果IR-CUT切换后没有重新触发AF,图像会出现 “焦点漂移” 现象,即画面变模糊。务必在驱动中注册IR-CUT切换的回调函数,通知AF模块重置对焦状态。
// IR-CUT切换回调示例
static int rk_ircut_switch_callback(struct rk_ircut_device *ircut, bool ir_mode)
{
struct rk_af_device *af = ircut->af_priv;
// 通知AF模块:IR-CUT已切换,需要重新对焦
af->need_restart = true;
// 如果是红外模式,加载红外对焦曲线
if (ir_mode) {
af->focus_curve = &af->ir_curve;
} else {
af->focus_curve = &af->visible_curve;
}
return 0;
}
2.3 LED补光灯与AF联动
在极暗光环境下(< 1 lux),即使IR-CUT切出,传感器也可能无法获得足够的对比度进行AF。此时需要LED补光灯提供辅助照明。RK平台的LED补光灯通常支持两种模式:常亮照明 和 AF辅助脉冲。
- AF辅助脉冲: 在AF搜索期间,LED以高亮度短脉冲方式点亮,提供瞬时照明,帮助AF算法找到峰值。对焦完成后,LED熄灭或转为低亮度常亮。
- 联动时序: LED脉冲的触发必须与AF的扫描窗口同步。通常由ISP的AF硬件状态机直接控制GPIO,延迟要求 < 1ms。
- 避免闪烁: 如果LED脉冲频率与传感器帧率不匹配,可能导致图像出现明暗条纹。建议将LED脉冲频率设置为帧率的整数倍。
性能指标: 在RK3588平台上,配合闭环VCM和LED辅助脉冲,暗光(0.5 lux)下的AF对焦时间可从 800ms 降低至 250ms,提升约 3 倍。
// LED补光灯与AF联动控制(伪代码)
void rk_af_led_control(struct rk_af_device *af, bool on)
{
if (on) {
// 开启LED,设置为高亮度脉冲模式
gpio_set_value(af->led_gpio, 1);
// 启动定时器,脉冲宽度 10ms
mod_timer(&af->led_timer, jiffies + msecs_to_jiffies(10));
} else {
// 关闭LED
gpio_set_value(af->led_gpio, 0);
}
}
// 在AF扫描开始时调用
void rk_af_start_search(struct rk_af_device *af)
{
rk_af_led_control(af, true);
// ... 执行AF扫描算法 ...
rk_af_led_control(af, false);
}
2.4 硬件架构总结
RK平台的AF硬件架构是一个多组件协同的系统。VCM提供物理驱动力,IR-CUT保证不同光谱下的成像质量,LED补光灯则拓展了暗光环境下的对焦能力。三者的联动依赖ISP的精确时序控制和状态机调度。
| 组件 | 核心功能 | 与AF的联动方式 | 调试关键点 |
|---|---|---|---|
| VCM(开环) | 驱动镜头移动 | DAC值直接控制位置 | 线性度标定、迟滞补偿 |
| VCM(闭环) | 驱动镜头移动并反馈位置 | PID控制器闭环调节 | 霍尔ADC标定、PID参数整定 |
| IR-CUT | 切换可见光/红外模式 | 切换后触发AF重新对焦 | 切换延迟、焦点偏移补偿 |
| LED补光灯 | 提供辅助照明 | AF扫描期间发送脉冲 | 脉冲宽度、频率、与帧率同步 |
调试建议: 在RK平台调试初期,建议先单独验证每个硬件组件的驱动是否正常(如VCM能否平滑移动、IR-CUT切换是否干脆、LED能否正常点亮),再进行联动测试。使用RK提供的 RKISP_Tuner 工具可以实时监控各组件状态,大幅提升调试效率。