4. 模拟前端与模数转换:从光子到数字的最后一公里
传感器把光变成了电压,但这事儿还没完。这个电压信号其实特别脆弱——噪声大、幅度小、还带着各种干扰。我刚开始做图像传感器驱动的时候,总觉得ADC就是选个分辨率完事,后来被噪声折腾得够呛,才明白模拟前端(AFE)才是真正的门道。
说白了,模拟前端就是信号从像素出来到变成数字码之间的所有处理环节。它决定了你最终图像的信噪比天花板。你ADC再牛,前面信号没伺候好,也是白搭。
4.1 相关双采样(CDS)——把复位噪声干掉
像素读出最头疼的问题是什么?复位噪声。每次复位像素,那个复位电平都不一样,而且这个噪声是随机的,没法通过平均消除。
相关双采样的思路其实很简单:
- 先采样一次复位电平(复位态)
- 再采样一次曝光后的信号电平(信号态)
- 两者相减,复位噪声就被抵消了
为什么能抵消?因为复位噪声在两次采样之间基本没变,属于“相关”噪声。一减就没了。我当年调试一个全局快门传感器,没开CDS时暗场噪声有20个DN,开了之后直接降到3个DN。效果立竿见影。
关键点:CDS只能消除像素级的固定模式噪声(FPN)和复位噪声。它不能消除读出电路的热噪声和1/f噪声——这些需要后面其他手段处理。
CDS的实现方式有两种:
- 模拟CDS:用采样保持电路做减法,速度快,但电路面积大
- 数字CDS:先ADC转换,再在数字域做减法,灵活但需要ADC速度快一倍
现在主流CMOS传感器大多用数字CDS,因为工艺进步后ADC速度上来了。
4.2 可编程增益放大器(PGA)——信号太小?放大它
像素输出的信号电压通常只有几十到几百毫伏。ADC的满量程一般是1V到2V。不放大,你就浪费了ADC的动态范围。
PGA的作用就是把这个小信号放大到ADC的最佳输入范围。它叫“可编程”,是因为增益可以软件配置——通常从1x到16x,甚至更高。
| 增益设置 | 适用场景 | 注意事项 |
|---|---|---|
| 1x - 2x | 强光环境、高灵敏度像素 | 信号可能接近满量程,注意不要饱和 |
| 4x - 8x | 室内、正常光照 | 常用范围,信噪比平衡较好 |
| 16x 以上 | 暗光、夜视 | 噪声也会被放大,需要配合降噪 |
避坑:我曾经在一个项目中把PGA增益设到32x,结果发现暗部噪声大得离谱。后来一查,PGA本身也有噪声,增益越大,噪声贡献越明显。所以增益不是越高越好,要看你系统的噪声底限在哪里。
4.3 模数转换器类型——选对ADC,事半功倍
图像传感器里用的ADC主要有这么几种:
- 单斜率ADC:结构简单,面积小,但速度慢。适合低分辨率、高帧率场景
- 逐次逼近型(SAR)ADC:速度和精度平衡,功耗低。中高端传感器常用
- 流水线型(Pipeline)ADC:速度快,但面积大、功耗高。高速工业相机用得多
- Σ-Δ ADC:精度极高,但速度慢。主要用于音频和低频测量
我个人习惯在列并行架构里用单斜率ADC——它天然适合做CDS,而且每个列占的面积小,能塞进像素间距里。
4.4 量化噪声——ADC的“原罪”
ADC把连续的模拟信号变成离散的数字码,这个过程必然有误差。这个误差就是量化噪声。
量化噪声的理论值很简单:
量化噪声 = LSB / √12
其中 LSB = 满量程电压 / 2^N
N = ADC位深
举个例子:一个10位ADC,满量程1V,LSB ≈ 0.977mV,量化噪声 ≈ 0.282mV。这个噪声是加性的,没法消除,只能通过增加位深来降低。
经验之谈:量化噪声通常不是系统的主要噪声源——像素噪声和读出噪声才是。但如果你ADC位深不够,量化噪声就会成为瓶颈。我一般建议ADC的量化噪声至少要比传感器等效输入噪声低3倍以上。
4.5 ADC位深与动态范围——数字能表达多少“灰”
ADC位深直接决定了你能区分多少级灰度。8位是256级,10位是1024级,12位是4096级,14位是16384级。
但位深不等于动态范围。动态范围是最大可测信号与最小可测信号的比值,单位是dB:
动态范围 (dB) = 20 × log10(满量程信号 / 噪声底限)
ADC的理论动态范围是:
ADC动态范围 (dB) ≈ 6.02 × N + 1.76
所以:
- 10位ADC ≈ 60.2 dB
- 12位ADC ≈ 72.2 dB
- 14位ADC ≈ 84.3 dB
- 16位ADC ≈ 96.3 dB
但传感器的实际动态范围往往比ADC低。你想想看,如果传感器只能做到60dB,你用16位ADC就是浪费——多出来的位全是噪声。
4.6 列并行ADC——速度与面积的博弈
传统做法是一个ADC处理整帧数据,速度慢。列并行ADC的思路是:每一列(或每几列)配一个ADC,同时转换。
这样做的好处:
- 速度提升N倍(N为列数)
- 每列ADC可以做得简单、低速、低功耗
- 适合高分辨率、高帧率传感器
代价是什么?面积。一个1920列的传感器,如果每列一个ADC,那就是1920个ADC挤在芯片上。每个ADC的宽度必须小于像素间距——通常是几微米。
我记得有一次设计一个4K传感器,列间距只有3.2μm。单斜率ADC勉强能塞进去,但SAR ADC就太大了。最后我们用了两列共享一个ADC的方案,面积和速度做了个折中。
4.7 片上ADC校准——让每个ADC都“听话”
列并行ADC有个大问题:1920个ADC,每个的增益和偏移都不一样。如果不校准,图像上就会出现竖条纹——固定模式噪声(FPN)。
校准方法一般分两步:
- 偏移校准:输入零信号,测量每个ADC的输出,记录偏移量
- 增益校准:输入已知参考电压,测量每个ADC的输出,计算增益误差
校准数据存在片上SRAM或寄存器里,每次读出时做数字补偿。
实战技巧:我习惯在校准前先做一次“暗场采集”——盖上镜头盖,拍一张全黑图。然后分析每列的均值,就能看出偏移校准是否到位。如果还有竖条纹,那就是增益校准的问题。
有些高端传感器还支持在线校准——在每帧的消隐期插入校准序列,实时更新校准参数。这样能补偿温度和电压漂移带来的变化。
4.8 本章知识体系
下面这张图把模拟前端到ADC的完整链路串起来了:
4.9 小结
模拟前端和模数转换这块,说白了就是要把像素那个微弱的模拟信号,变成干净、准确、高动态范围的数字码。每一步都有坑:
- CDS能干掉复位噪声,但别指望它解决所有噪声
- PGA增益不是越大越好,噪声也会跟着放大
- ADC类型选型要看你的速度、面积、功耗约束
- 量化噪声是理论下限,实际系统往往被其他噪声限制
- 列并行ADC是高速高分辨率的关键,但校准不能省