第二讲:摄像头传感器基础

各位同学,今天我们来聊聊摄像头传感器的那些事儿。做多摄像头同步,不懂传感器基础,后面会踩很多坑。我自己在项目里就吃过不少亏,今天把这些经验分享给你们。

一、CMOS与CCD传感器:到底选哪个?

先说结论:现在市面上99%的嵌入式摄像头方案,用的都是CMOS。CCD基本退出了消费级市场。为什么?我给你们分析分析。

1. CCD传感器

CCD的全称是电荷耦合器件。它的工作原理,说白了就是把光信号转成电荷,然后整块芯片上的电荷像传送带一样,一个像素一个像素地往外搬。

  • 优点:图像质量好,噪声低,动态范围大
  • 缺点:功耗高、速度慢、成本高、不能做片上处理

我记得十年前做工业相机时,还用过CCD方案。那时候为了低噪声,不得不忍受它那蜗牛般的帧率。现在想想,真是折磨。

2. CMOS传感器

CMOS就灵活多了。每个像素旁边都带着自己的放大器,甚至还有模数转换器。每个像素独立工作,想读哪个就读哪个。

  • 优点:功耗低、速度快、集成度高、成本低
  • 缺点:噪声相对大一些(但这些年进步很大)

做多摄像头同步,我强烈建议用CMOS。为什么?因为CMOS支持灵活的读出控制,你可以精确控制每一帧的曝光和读出时刻。CCD那种全局传输的方式,做同步太痛苦了。

关键区别:CMOS是每个像素独立读出,CCD是整行整列传输。这个差异直接决定了同步方案的复杂度。

二、MIPI CSI-2接口协议

MIPI CSI-2,这是摄像头和处理器之间的通信协议。说白了,就是摄像头怎么把图像数据传给主控芯片。

我刚开始接触MIPI时,被那些D-PHY、C-PHY、Lane、Data Type搞得一头雾水。后来做多了才发现,其实核心就几个概念。

1. 物理层:D-PHY

目前最常用的是D-PHY。它用差分信号传输,一对线叫一个Lane。一个摄像头通常用1到4个Lane。

Lane数量 最大带宽(每Lane) 典型分辨率
1 Lane 1 Gbps VGA ~ 720p
2 Lane 2 Gbps 1080p @ 30fps
4 Lane 4 Gbps 4K @ 30fps

嗯,这里要注意:带宽不是简单的加法。实际有效带宽还要考虑协议开销,大概打个八折。

2. 协议层:CSI-2

CSI-2定义了数据怎么打包。它把图像数据分成一个个包,每个包有包头、数据、包尾。

// CSI-2 数据包结构示例
// 短包(控制信息)
0x00 0x01 0x02 0x03  // 帧开始
0x00 0x01 0x02 0x03  // 行开始

// 长包(图像数据)
0x2B 0x00 0x00 0x00  // 数据标识符
0x00 0x10 0x00 0x00  // 数据长度(4096字节)
[图像数据...]         // 实际像素数据
0x00 0x00 0x00 0x00  // 校验和

我个人习惯把CSI-2协议分成三层理解:

  • 应用层:图像格式、像素排列
  • 协议层:包结构、数据类型
  • 物理层:电气特性、时钟同步

实战技巧:调试MIPI时,先用示波器看时钟和数据线的眼图。眼图清晰了,协议层的问题就好排查。我曾经花了两天查一个图像花屏的问题,最后发现是PCB走线阻抗不匹配。

三、帧同步信号:VSYNC和HSYNC

做多摄像头同步,这两个信号是命根子。VSYNC是帧同步,HSYNC是行同步。它们告诉处理器:一帧开始了、一行结束了。

1. VSYNC(垂直同步)

VSYNC信号每帧触发一次。高电平表示一帧有效数据开始传输。

// VSYNC时序示例
// 假设帧率为30fps,每帧33.3ms
// 有效数据时间:30ms
// 消隐时间:3.3ms

VSYNC:  __|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|__________
        |<-- 有效数据 -->|<-- 消隐 -->|
        |<------ 33.3ms ------>|

做多摄像头同步时,我一般把主摄像头的VSYNC作为基准,其他摄像头都跟着它走。说白了,就是让所有摄像头在同一时刻开始曝光。

2. HSYNC(水平同步)

HSYNC每行触发一次。高电平表示一行有效数据开始传输。

// HSYNC时序示例
// 假设分辨率为1920x1080
// 每行有效像素:1920
// 每行总像素:2200(含消隐)

HSYNC:  _|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|_____________
        |<-- 有效像素 -->|<-- 消隐 -->|
        |<--- 2200像素 --->|

你想想看,如果两个摄像头的HSYNC相位差了一点点,那图像数据就会错位。做双目视觉时,这种错位会导致深度计算完全错误。

避坑指南:我曾经遇到过一个坑——两个摄像头虽然VSYNC对齐了,但HSYNC差了半个像素周期。结果图像看起来没问题,但做立体匹配时怎么都对不上。后来用示波器一量,才发现是PCB走线长度不一致导致的延迟。

3. 同步方案实战

做多摄像头同步,我推荐两种方案:

  1. 硬件同步:用FPGA或CPLD产生统一的VSYNC和HSYNC信号,分发给所有摄像头。精度最高,延迟最小。
  2. 软件同步:通过I2C配置摄像头寄存器,让它们工作在同一个帧率。精度稍差,但实现简单。

我个人偏好硬件同步。虽然成本高一点,但省心。软件同步总会有漂移,时间长了帧就错开了。

核心要点:多摄像头同步的本质,就是让所有摄像头的VSYNC上升沿对齐。对齐了,后面的数据处理才有意义。

四、总结

这一讲我们聊了三个核心知识点:

  • CMOS vs CCD:选CMOS,没毛病
  • MIPI CSI-2:理解D-PHY和包结构
  • VSYNC/HSYNC:同步的命根子

下一讲,我们会深入摄像头模组的硬件设计,包括电源、时钟、复位这些细节。到时候我会分享一个我踩过的坑——电源纹波导致图像闪烁的问题。嗯,那故事挺有意思的。

今天就到这里。有问题随时问我。