传感器工作原理:CMOS与CCD在曝光中的电荷积累与读出

做ISP硬件这么多年,我接触过各种各样的传感器。说实话,CMOS和CCD之争,在曝光控制这个环节上体现得最明显。很多刚入行的工程师容易把这两者混为一谈,觉得不就是个感光元件嘛。但实际做项目时,你会发现它们的电荷积累和读出机制完全不同,直接决定了你的曝光策略该怎么设计。

今天我们就来拆开看看,这两种传感器到底是怎么工作的。

电荷积累:从光子到电子的转换

不管是CMOS还是CCD,第一步都一样——光电转换。光子打到感光区域,产生电子-空穴对。这个过程中,每个像素就像一个微型水桶,光子是雨滴,电子就是接到的水。

但这里有个关键区别:电荷的存储和转移方式。

核心概念:曝光时间本质上就是控制这个"接水"过程的时间长短。时间越长,积累的电荷越多,信号越强,但也越容易饱和。

我在一个安防项目中遇到过这样的问题:同一颗传感器,白天和晚上的曝光参数完全不能复用。白天可能只需要几毫秒的曝光,晚上却要几十毫秒。这就是因为电荷积累速率随光照变化太大了。

CCD传感器:全局快门与电荷转移

CCD的工作原理,说白了就是"大家一起接水,然后排队倒水"。

它的结构决定了所有像素同时开始曝光,同时结束曝光。曝光结束后,每一行的电荷被逐行转移到读出寄存器,再串行输出。这个过程我画了个图,你一看就明白:

CCD传感器电荷积累与读出流程 感光区域(像素阵列) 所有像素同时曝光 → 同时结束曝光 电荷在像素内积累,不移动 垂直转移 垂直移位寄存器(逐行转移) 水平转移 水平移位寄存器(串行读出) 输出 特点: 全局快门,无卷帘效应;电荷转移效率高;读出速度受限于串行输出 适合高动态范围、低噪声场景(如工业相机、天文观测)

CCD的读出过程有个特点:电荷在转移过程中几乎不损失。这是因为它的电荷转移效率(CTE)非常高,通常能达到99.999%以上。但代价是什么?读出速度慢。你想想看,所有像素的电荷都要经过同一个输出节点,帧率自然上不去。

我曾经踩过的坑:在一个工业检测项目中,我选了CCD传感器,觉得噪声低、画质好。结果客户要求60fps的帧率,CCD根本跑不动。最后只能换CMOS,重新设计整个曝光控制逻辑。所以选型时一定要先确认帧率需求。

CMOS传感器:卷帘快门与像素级读出

CMOS的工作方式就完全不同了。每个像素都有自己的放大器和读出电路,相当于每个水桶旁边都站了个人,随时可以单独倒水。

这就带来了一个关键特性:卷帘快门(Rolling Shutter)。曝光不是同时开始的,而是逐行进行的。第一行开始曝光,过一段时间第二行才开始,以此类推。

CMOS传感器卷帘快门曝光时序 时间 → 行1 曝光 读出 行2 曝光 读出 行3 曝光 读出 行N 曝光 读出 行间延迟 曝光时间 = 200单位 卷帘快门的关键问题: 1. 各行曝光起始时间不同,拍摄运动物体会产生"果冻效应" 2. 闪光灯同步困难——需要等所有行都曝光完才能触发 3. 但读出速度快,支持高帧率(60fps~240fps甚至更高) 4. 像素级CDS(相关双采样)可以降低固定模式噪声

你可能会问:卷帘快门有什么问题?嗯,最典型的就是果冻效应。拍快速运动的物体时,物体会变形——因为不同行的曝光时间点不一样。我在做手机摄像头项目时,客户反馈拍风扇叶片时叶片是歪的,就是这个原因。

我的建议:如果项目需要拍摄高速运动物体,或者要用闪光灯同步,优先考虑全局快门CMOS或者CCD。如果追求帧率和成本,卷帘快门CMOS是主流选择。

CMOS vs CCD:曝光控制的关键差异

我把两者的核心差异整理成了一张表,方便你对照:

对比维度 CCD CMOS
快门类型 全局快门(所有像素同时曝光) 卷帘快门(逐行曝光,主流)
部分支持全局快门
电荷读出方式 逐行转移到读出寄存器,串行输出 像素级直接读出,并行处理
读出速度 慢(受限于串行输出) 快(可支持高帧率)
噪声特性 读出噪声低,电荷转移效率高 像素级放大器引入固定模式噪声(需CDS校正)
动态范围 较高(典型70-85dB) 中等(典型60-75dB,HDR模式可达100dB+)
功耗 高(需要多路时钟驱动) 低(像素级电路可关断)
曝光控制灵活性 全局曝光时间统一,调整简单 可逐行调整曝光参数,但需处理卷帘效应
典型应用 工业相机、天文、医疗、高端摄影 手机、安防、车载、消费电子

曝光控制中的硬件设计要点

了解了原理,我们来看看在硬件层面怎么落地。我个人习惯把曝光控制分成三个层次:

  1. 像素级控制:曝光时间、复位时序、电荷转移时钟
  2. 行/帧级控制:帧同步、行同步、卷帘快门时序生成
  3. 系统级控制:自动曝光算法、增益调节、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却不行。做硬件设计,底层逻辑通了,上层实现就顺了。