3. 图像传感器与驱动:从光子到精准对焦
自动对焦系统里,传感器和驱动器件就是执行层面的「手和脚」。你算法算得再准,最后也得靠马达把镜头推到指定位置,靠传感器告诉你「现在到底清不清晰」。这一章,我把这三块核心硬件的底细给你讲透。
3.1 CMOS传感器工作原理
CMOS传感器,说白了就是把光信号转成电信号,再量化成数字值。每个像素点就是一个光电二极管加一个放大器。
工作流程大致分三步:
- 曝光(Integration):光子打到光电二极管上,产生电子-空穴对,积累电荷。
- 读出(Readout):行选通信号打开,电荷通过列总线传输到ADC。
- 量化(Quantization):模拟电压转成数字值,输出RAW数据。
这里有个关键参数——满阱容量(Full Well Capacity)。它决定了像素能存多少电子。我做过一个项目,传感器满阱只有8000e⁻,强光下动不动就饱和,对焦评价函数直接失效。后来换了满阱20000e⁻的传感器,问题才解决。
对焦算法工程师必须关注的传感器参数:
- 帧率(FPS):决定对焦响应速度,至少30fps以上才够用。
- 读出噪声:影响低照度下的对焦精度。
- 动态范围:高动态场景下,过曝或欠曝区域的对焦评价会失真。
- 像素尺寸:越大灵敏度越高,但分辨率会下降。
3.2 VCM马达与步进电机
镜头驱动,主流就两种方案:VCM(音圈马达)和步进电机。
| 特性 | VCM马达 | 步进电机 |
|---|---|---|
| 工作原理 | 电磁力驱动,类似扬声器 | 脉冲信号控制步进角 |
| 行程 | 短(通常0.3-1mm) | 长(可达数厘米) |
| 精度 | 高(亚微米级) | 中等(取决于步进角) |
| 功耗 | 低 | 较高 |
| 成本 | 低 | 中等 |
| 典型应用 | 手机摄像头、微型模组 | 监控摄像头、工业相机 |
VCM马达,我习惯叫它「弹簧上的线圈」。通电后线圈在磁场里受力,推动镜头移动。断电后靠机械弹簧复位。优点是响应快、精度高,缺点是有磁滞效应——同一个电流值,正行程和反行程的位置不一样。
步进电机就不一样了。它靠脉冲信号一步步转,开环控制就能定位。但有个坑:失步。负载突然变大,电机可能丢步,位置就偏了。我曾经在低温环境下遇到过,步进电机启动扭矩不够,镜头卡住不动,对焦算法还在那傻等。
避坑指南:
VCM马达不要长时间通大电流,线圈会发热,热漂移会让对焦位置偏移。我曾经有个项目,连续对焦10分钟后画面开始模糊,排查半天才发现是马达发热导致镜头位置变了。
3.3 PWM与DAC驱动控制
控制马达,本质上就是控制电流或电压。两种主流方式:PWM和DAC。
PWM(脉冲宽度调制):通过占空比调节等效电压。优点是电路简单、效率高,缺点是纹波大,可能引入噪声。
DAC(数模转换器):直接输出模拟电压。精度高、纹波小,但成本高、功耗大。
实际项目中怎么选?我一般这么判断:
- 手机摄像头:PWM驱动VCM,因为空间有限、成本敏感。
- 高端工业相机:DAC驱动步进电机,因为需要平滑运动和低噪声。
下面是一个典型的PWM驱动VCM代码片段:
// 设置PWM占空比控制VCM位置
// duty_cycle: 0-1000, 对应0%-100%
void vcm_set_position(uint16_t duty_cycle) {
// 限幅保护
if (duty_cycle > 1000) duty_cycle = 1000;
// 设置PWM寄存器
TIM1->CCR1 = duty_cycle;
// 等待稳定(VCM响应时间约1-2ms)
delay_ms(2);
}
经验之谈:
PWM频率选多少?我建议20-50kHz。太低会有可闻噪声,太高开关损耗大。另外,PWM驱动VCM时,最好加一个RC低通滤波,把高频分量滤掉,否则镜头会微振。
3.4 霍尔传感器反馈
开环控制有个问题——你不知道镜头到底在哪。霍尔传感器就是来解决这个的。
霍尔传感器利用霍尔效应:磁场变化时,霍尔元件输出电压变化。把磁铁贴在镜头载体上,霍尔元件固定在基座上,镜头移动时磁场变化,霍尔输出就跟着变。
这样就能实现闭环控制:
- 算法算出目标位置。
- 驱动马达移动。
- 霍尔传感器实时反馈当前位置。
- PID控制器修正误差。
霍尔反馈的精度取决于几个因素:
- 磁铁质量:磁场均匀性直接影响线性度。
- 安装公差:霍尔元件和磁铁的间距必须严格控制。
- 温度漂移:霍尔输出随温度变化,需要补偿。
我记得有个量产项目,霍尔反馈的线性度只有±5%,闭环控制后定位误差还是很大。后来发现是磁铁充磁不均匀,换了高精度磁铁后线性度提升到±1%,问题才解决。
霍尔反馈校准流程:
- 记录全行程的霍尔ADC值(从0到最大行程)。
- 拟合位置-ADC曲线(通常用线性或二次多项式)。
- 存储校准参数到EEPROM。
- 运行时根据ADC值反算当前位置。
3.5 知识体系总览
下面这张图把本章的核心关系串起来了:
这张图把本章的知识点串成了一个完整链路。你从算法层往下看,传感器提供图像数据,驱动马达执行移动指令,霍尔反馈告诉算法「你推过头了,往回拉一点」。三者配合好了,自动对焦才能又快又准。
我的建议:
刚开始做对焦系统时,别急着上复杂算法。先把传感器、马达、霍尔这三块的硬件特性摸透。拿示波器量一下PWM波形,用串口打印霍尔ADC值,手动推镜头看看线性度。硬件底子打好了,算法才能在上面跳舞。