第二节:摄像头传感器基础
做图像处理系统设计,第一关就是选传感器。我见过不少新手一上来就盯着分辨率看,结果像素时钟算错了,整个系统跑不起来。今天咱们就把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周期 = 垂直总行数
四、知识体系总览
下面这张图,是我做培训时必讲的。它把传感器基础的核心逻辑串起来了:
五、实际项目中的注意事项
最后分享几个实战经验:
- 时钟域同步:传感器输出的PCLK和FPGA内部时钟是异步的。一定要做跨时钟域处理,否则亚稳态会让你怀疑人生。
- 消隐区利用:行场消隐期不是垃圾时间。我习惯在消隐期做数据打包、DMA传输,充分利用带宽。
- 寄存器配置:现在的CMOS传感器都有I2C/SPI配置接口。分辨率、帧率、输出格式都在寄存器里设。记得上电后先读ID寄存器确认通信正常。
一句话总结:选传感器看应用场景,算带宽留余量,抓时序看datasheet。这三条做到了,摄像头接口设计就稳了。