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

做图像处理系统设计,第一关就是选传感器。我见过不少新手一上来就盯着分辨率看,结果像素时钟算错了,整个系统跑不起来。今天咱们就把CMOS和CCD这点事说透。

一、CMOS与CCD:两种主流传感器

说白了,这两种传感器都是把光信号转成电信号。但实现方式完全不同。

1. CCD传感器

CCD(电荷耦合器件)是上世纪的老将了。它的工作原理有点像接力赛——每个像素收集到的电荷,要一站一站传到最后才统一放大输出。

  • 优点:噪声低,动态范围大,图像质量好
  • 缺点:功耗高,读出速度慢,成本高
  • 典型应用:天文望远镜、医疗影像、高端工业相机
我的经验:2018年做医疗内窥镜项目时,甲方指定要CCD。说实话,那会儿我挺头疼的——CCD的驱动时序比CMOS复杂得多,光垂直转移时钟就折腾了两周。

2. CMOS传感器

CMOS(互补金属氧化物半导体)是现在的主流。每个像素自带放大器,可以独立读出数据。你想想看,这就像每个像素都有自己的小喇叭,不用排队等传递。

  • 优点:功耗低,速度快,集成度高(可以把ADC、DSP都做进去)
  • 缺点:固定模式噪声(FPN)比CCD大,但现代工艺已经改善很多
  • 典型应用:手机摄像头、安防监控、车载摄像头
关键区别:CMOS是逐行读出,CCD是逐像素转移。这个差异直接决定了你的FPGA接口设计思路。

二、分辨率与帧率:鱼和熊掌

分辨率决定图像有多清晰,帧率决定画面有多流畅。但这两者之间有个硬约束——带宽。

我给大家一个公式,做项目时经常用到:

总数据率 = 水平分辨率 × 垂直分辨率 × 帧率 × 每像素位数

举个例子:

分辨率 帧率 像素深度 总数据率
1920×1080 30fps 8bit 约498Mbps
1920×1080 60fps 8bit 约996Mbps
3840×2160 30fps 8bit 约1.99Gbps
注意:这个数据率是纯像素数据,还没算消隐区。实际带宽需求要加20%-30%的余量。我曾经有个项目,就是没算消隐区,结果MIPI接口带宽不够,画面出现撕裂。

三、像素时钟与行场同步信号

这是FPGA工程师最需要搞明白的部分。传感器输出的信号,说白了就三根线:像素时钟、行同步(HSYNC)、场同步(VSYNC)。

1. 像素时钟(PCLK)

像素时钟是传感器的心跳。每个时钟沿(通常是上升沿)输出一个像素数据。计算公式:

PCLK = 水平总像素 × 垂直总行数 × 帧率

注意这里的「总像素」和「总行数」都包含了消隐区。比如1080p的传感器,实际有效像素是1920×1080,但加上消隐区后,水平总像素可能是2200,垂直总行数是1125。

避坑指南:我曾经在调试OV5640时,直接用有效分辨率算PCLK,结果时序总对不上。后来查datasheet才发现,水平消隐占了280个像素时钟。嗯,从那以后我养成了习惯——先看datasheet里的「Timing Diagram」。

2. 行同步信号(HSYNC)

HSYNC表示一行数据的开始。高电平期间,传感器输出有效像素数据。低电平是行消隐期。

  • HSYNC高电平宽度 = 水平有效像素数
  • HSYNC周期 = 水平总像素数

3. 场同步信号(VSYNC)

VSYNC表示一帧图像的开始。同样有有效区和消隐区。

  • VSYNC高电平宽度 = 垂直有效行数
  • VSYNC周期 = 垂直总行数

四、知识体系总览

下面这张图,是我做培训时必讲的。它把传感器基础的核心逻辑串起来了:

摄像头传感器基础知识体系 传感器类型 CCD CMOS 关键参数 分辨率 帧率 输出接口信号 PCLK HSYNC VSYNC 核心公式 PCLK = 水平总像素 × 垂直总行数 × 帧率 时序关系 • 每个PCLK上升沿输出一个像素数据 • HSYNC高电平期间输出一行有效像素 • VSYNC高电平期间输出一帧有效图像

五、实际项目中的注意事项

最后分享几个实战经验:

  1. 时钟域同步:传感器输出的PCLK和FPGA内部时钟是异步的。一定要做跨时钟域处理,否则亚稳态会让你怀疑人生。
  2. 消隐区利用:行场消隐期不是垃圾时间。我习惯在消隐期做数据打包、DMA传输,充分利用带宽。
  3. 寄存器配置:现在的CMOS传感器都有I2C/SPI配置接口。分辨率、帧率、输出格式都在寄存器里设。记得上电后先读ID寄存器确认通信正常。
一句话总结:选传感器看应用场景,算带宽留余量,抓时序看datasheet。这三条做到了,摄像头接口设计就稳了。
可可精品资料库