传感器工作原理:CMOS与CCD在曝光中的电荷积累与读出
做ISP硬件这么多年,我接触过各种各样的传感器。说实话,CMOS和CCD之争,在曝光控制这个环节上体现得最明显。很多刚入行的工程师容易把这两者混为一谈,觉得不就是个感光元件嘛。但实际做项目时,你会发现它们的电荷积累和读出机制完全不同,直接决定了你的曝光策略该怎么设计。
今天我们就来拆开看看,这两种传感器到底是怎么工作的。
电荷积累:从光子到电子的转换
不管是CMOS还是CCD,第一步都一样——光电转换。光子打到感光区域,产生电子-空穴对。这个过程中,每个像素就像一个微型水桶,光子是雨滴,电子就是接到的水。
但这里有个关键区别:电荷的存储和转移方式。
核心概念:曝光时间本质上就是控制这个"接水"过程的时间长短。时间越长,积累的电荷越多,信号越强,但也越容易饱和。
我在一个安防项目中遇到过这样的问题:同一颗传感器,白天和晚上的曝光参数完全不能复用。白天可能只需要几毫秒的曝光,晚上却要几十毫秒。这就是因为电荷积累速率随光照变化太大了。
CCD传感器:全局快门与电荷转移
CCD的工作原理,说白了就是"大家一起接水,然后排队倒水"。
它的结构决定了所有像素同时开始曝光,同时结束曝光。曝光结束后,每一行的电荷被逐行转移到读出寄存器,再串行输出。这个过程我画了个图,你一看就明白:
CCD的读出过程有个特点:电荷在转移过程中几乎不损失。这是因为它的电荷转移效率(CTE)非常高,通常能达到99.999%以上。但代价是什么?读出速度慢。你想想看,所有像素的电荷都要经过同一个输出节点,帧率自然上不去。
我曾经踩过的坑:在一个工业检测项目中,我选了CCD传感器,觉得噪声低、画质好。结果客户要求60fps的帧率,CCD根本跑不动。最后只能换CMOS,重新设计整个曝光控制逻辑。所以选型时一定要先确认帧率需求。
CMOS传感器:卷帘快门与像素级读出
CMOS的工作方式就完全不同了。每个像素都有自己的放大器和读出电路,相当于每个水桶旁边都站了个人,随时可以单独倒水。
这就带来了一个关键特性:卷帘快门(Rolling Shutter)。曝光不是同时开始的,而是逐行进行的。第一行开始曝光,过一段时间第二行才开始,以此类推。
你可能会问:卷帘快门有什么问题?嗯,最典型的就是果冻效应。拍快速运动的物体时,物体会变形——因为不同行的曝光时间点不一样。我在做手机摄像头项目时,客户反馈拍风扇叶片时叶片是歪的,就是这个原因。
我的建议:如果项目需要拍摄高速运动物体,或者要用闪光灯同步,优先考虑全局快门CMOS或者CCD。如果追求帧率和成本,卷帘快门CMOS是主流选择。
CMOS vs CCD:曝光控制的关键差异
我把两者的核心差异整理成了一张表,方便你对照:
| 对比维度 | CCD | CMOS |
|---|---|---|
| 快门类型 | 全局快门(所有像素同时曝光) | 卷帘快门(逐行曝光,主流) 部分支持全局快门 |
| 电荷读出方式 | 逐行转移到读出寄存器,串行输出 | 像素级直接读出,并行处理 |
| 读出速度 | 慢(受限于串行输出) | 快(可支持高帧率) |
| 噪声特性 | 读出噪声低,电荷转移效率高 | 像素级放大器引入固定模式噪声(需CDS校正) |
| 动态范围 | 较高(典型70-85dB) | 中等(典型60-75dB,HDR模式可达100dB+) |
| 功耗 | 高(需要多路时钟驱动) | 低(像素级电路可关断) |
| 曝光控制灵活性 | 全局曝光时间统一,调整简单 | 可逐行调整曝光参数,但需处理卷帘效应 |
| 典型应用 | 工业相机、天文、医疗、高端摄影 | 手机、安防、车载、消费电子 |
曝光控制中的硬件设计要点
了解了原理,我们来看看在硬件层面怎么落地。我个人习惯把曝光控制分成三个层次:
- 像素级控制:曝光时间、复位时序、电荷转移时钟
- 行/帧级控制:帧同步、行同步、卷帘快门时序生成
- 系统级控制:自动曝光算法、增益调节、HDR合成
对于CMOS传感器,硬件设计中最关键的是时序生成器。你需要精确控制每一行的曝光起始时间和读出时间。我一般用FPGA或者专用ISP芯片来实现,用状态机控制行计数器。
硬件实现要点:
- CCD需要多相时钟(通常2-4相)来驱动电荷转移,时钟抖动直接影响画质
- CMOS需要生成行同步信号(HSYNC)和帧同步信号(VSYNC),时序容差通常在纳秒级
- 曝光时间寄存器通常以"行周期"为单位配置,需要根据帧率计算
举个例子,一个1080p的CMOS传感器,帧率30fps,每帧有1125行(含消隐区)。那么每行的时间大约是29.6μs。如果你想设置10ms的曝光时间,就需要配置为约338行周期。这个计算在硬件里要用乘法器或者查找表来实现。
避坑指南:我踩过的几个雷
做传感器驱动这么多年,有些坑我印象特别深:
- 复位噪声:CMOS像素复位时会产生KTC噪声,硬件上一定要做相关双采样(CDS)。我见过一个方案没做CDS,暗场噪声直接飙到50个电子,根本没法用。
- 时钟抖动:CCD对时钟抖动极其敏感。有一次我用普通的晶振给CCD提供垂直转移时钟,结果图像上出现横条纹。换成低抖动时钟发生器才解决。
- 电源纹波:传感器模拟电源的纹波会直接耦合到输出信号中。我建议模拟电源和数字电源分开供电,LDO输出端加10μF+0.1μF去耦电容。
- 温度影响:暗电流随温度指数增长。长曝光场景下(比如天文摄影),必须做温度补偿或者硬件制冷。
特别注意:CMOS传感器的卷帘快门在硬件设计时,一定要考虑闪光灯同步问题。如果你需要闪光灯,要么用全局快门CMOS,要么在硬件中预留"闪光灯触发延迟"寄存器,让MCU在最后一行曝光结束时触发闪光灯。
好了,关于CMOS和CCD的电荷积累与读出机制,我们就聊到这里。理解这些底层原理,后面讲曝光时间控制、增益调节的时候,你就能明白为什么有些策略对CMOS有效,对CCD却不行。做硬件设计,底层逻辑通了,上层实现就顺了。