1. Sensor基础与选型:光电转换原理、CMOS vs CCD、像素结构与尺寸、选型关键参数
做嵌入式图像这行,第一关就是选Sensor。我见过不少项目,算法调得天花乱坠,最后发现是Sensor选错了,白忙活一场。说白了,Sensor就是相机的“视网膜”,它怎么把光变成电,直接决定了你后面ISP调优的天花板。
1.1 光电转换原理:光子到电子的旅程
Sensor的核心任务就一个:把光子转换成电子。这个过程叫光电效应。每个像素里都有一个感光二极管,光子打上去,硅材料吸收能量,激发出电子-空穴对。电子被收集起来,就形成了光生电荷。
你想想看,光越强,光子越多,激发的电子就越多,电荷量就越大。这个电荷量经过放大、模数转换,最终变成我们看到的数字信号——也就是RAW图里的像素值。
关键公式(心里有数就行):
Vout = (Iphoto × tint) / CPD
Vout是输出电压,Iphoto是光生电流,tint是积分时间(曝光时间),CPD是感光二极管的电容。曝光时间越长,电压越高,图像越亮。
嗯,这里要注意一个概念——量子效率(QE)。它表示有多少比例的光子被转换成了电子。QE越高,感光能力越强,暗光表现越好。我做过一个夜视项目,当时选Sensor第一件事就是看QE曲线,尤其是近红外波段的QE。
1.2 CMOS vs CCD:一场没有悬念的战争
现在市面上99%的消费级和工业级Sensor都是CMOS。CCD基本退出了主流市场。但理解它们的区别,能帮你更清楚CMOS的优势在哪。
| 对比项 | CMOS | CCD |
|---|---|---|
| 读出方式 | 每个像素独立放大、读出 | 整行电荷逐像素转移、统一读出 |
| 功耗 | 低(几十mW到几百mW) | 高(几百mW到几W) |
| 噪声 | 固定模式噪声(FPN)较明显 | 读出噪声低,图像均匀性好 |
| 速度 | 快(支持高帧率、ROI读出) | 慢(逐行转移,帧率受限) |
| 集成度 | 高(可集成ADC、DSP、接口) | 低(需要外部驱动和ADC) |
| 成本 | 低 | 高 |
我个人习惯,只要不是特殊需求(比如天文观测那种极端低噪声场景),一律选CMOS。功耗低、接口简单、开发周期短,这些对嵌入式系统太重要了。
避坑指南:我曾经在一个项目中选了某款CCD Sensor,理由是“噪声低”。结果驱动开发折腾了两个月,功耗还压不下去,最后被迫换成了CMOS。现在回头看,当时如果仔细算一下系统噪声预算,CMOS完全够用。
1.3 像素结构与尺寸:小像素的代价
像素结构主要有两种:前照式(FSI)和背照式(BSI)。
- FSI(Front-Side Illuminated):光线先穿过金属布线层,再到达感光二极管。金属层会遮挡和反射一部分光,QE较低。
- BSI(Back-Side Illuminated):把硅片翻转,光线直接从背面入射,没有金属层遮挡。QE高,暗光性能好。
像素尺寸呢?现在手机Sensor已经卷到0.6μm了。但像素越小,每个像素收集的光子越少,信噪比越差。为什么?因为光子散粒噪声的平方根与信号强度成正比,信号弱了,噪声占比就大了。
注意:像素尺寸不是越小越好。小像素意味着满阱容量(FWC)小,动态范围受限。做安防或车载项目,我建议选2μm以上的像素。手机那种0.6μm的Sensor,全靠计算摄影硬撑,对ISP调优要求极高。
1.4 选型关键参数:别只看分辨率
很多新手选Sensor,上来就问“多少万像素”。其实分辨率只是最基础的参数。真正决定Sensor能不能用的,是下面这几个。
帧率(FPS)
帧率取决于像素时钟、行时间和帧长。公式很简单:
帧率 = 1 / (VTS × HTS / PCLK)
VTS是垂直总行数,HTS是水平总像素数,PCLK是像素时钟。我调驱动时,经常需要调整VTS和HTS来匹配目标帧率。比如你要30fps,但Sensor默认配置只能跑25fps,那就得手动改寄存器。
功耗
嵌入式设备对功耗极其敏感。Sensor的功耗主要来自三部分:模拟电路(像素阵列+放大器)、数字电路(ADC+逻辑)、接口(MIPI/LVDS)。
- 降低帧率可以降功耗。
- 关闭不用的MIPI Lane也能省电。
- 有些Sensor支持“低功耗预览模式”,帧率降到1fps,功耗能压到10mW以下。
接口
主流接口就两种:MIPI CSI-2 和 LVDS。MIPI是首选,线少、功耗低、带宽够用。LVDS多见于老款或高分辨率工业Sensor。
选接口时要注意:MIPI的D-PHY版本(v1.2/v2.0)决定了单Lane的速率上限。比如4 Lane MIPI v1.2,理论带宽约4Gbps,够跑4K@30fps 10bit。如果超过这个带宽,就得考虑C-PHY或更多Lane。
动态范围(DR)
动态范围 = 满阱容量 / 读出噪声(dB)。它决定了Sensor能同时看清亮部和暗部的能力。
- 普通Sensor:60-70dB
- 高动态范围(HDR)Sensor:80-100dB+
- 人眼:约120dB
做车载或户外监控,动态范围是硬指标。我做过一个隧道出入口的项目,普通Sensor拍出来要么隧道里全黑,要么外面过曝。后来换了带多重曝光HDR的Sensor,才把问题解决。
选型检查清单(我每次必看):
- 分辨率 & 帧率:是否满足系统需求?
- 像素尺寸:暗光性能够不够?
- 动态范围:场景亮度跨度大不大?
- 接口:主控支持MIPI CSI-2吗?Lane数够吗?
- 功耗:电池供电还是插电?
- 光学格式:镜头能不能匹配Sensor靶面?
- 驱动复杂度:有没有现成的Linux驱动?寄存器手册全不全?
1.5 知识结构图:Sensor选型核心逻辑
下面这张图,是我自己总结的Sensor选型决策流程。每次拿到新项目,我都会按这个思路走一遍。
1.6 实战经验:选型踩过的坑
最后分享几个我亲身踩过的坑,希望能帮你省点时间。
- 坑1:只看分辨率,不看帧率。 有一次客户要4K摄像头,我选了颗4K Sensor,结果发现最高只能跑15fps。客户要30fps,只能换Sensor,项目延期两周。
- 坑2:忽略光学格式。 Sensor靶面尺寸和镜头像圈必须匹配。1/2.3英寸的Sensor配1/3英寸的镜头,画面四周全是黑的。我吃过这个亏,后来每次选型都先算光学格式。
- 坑3:MIPI Lane数不够。 某项目主控只有2 Lane MIPI,但Sensor输出需要4 Lane。最后只能降分辨率或降帧率,性能大打折扣。
- 坑4:动态范围被低估。 做户外HDR项目,选了颗70dB的Sensor,结果大光比场景亮部过曝、暗部死黑。后来换了颗100dB的Sensor,配合多重曝光HDR,效果才满意。
我的习惯:选型阶段至少留出20%的余量。比如目标帧率30fps,我会选能跑36fps以上的Sensor。目标功耗100mW,我会选典型功耗80mW以下的。这样后期调优空间大,不至于被Sensor性能卡死。