3. 图像传感器接口:CMOS传感器选型与MIPI CSI-2实战

图像传感器,说白了就是内窥镜的「眼睛」。选对了,图像清晰、色彩还原好;选错了,后面算法再怎么折腾也救不回来。我这些年经手过不少内窥镜项目,在传感器选型和接口设计上踩过的坑,今天一并倒给你们。

3.1 CMOS传感器选型:OV6946 vs IMX系列

先聊聊市面上最常见的两款传感器——OV6946和IMX系列。它们俩的定位完全不同,选哪个,取决于你的产品是走量还是走质。

3.1.1 OV6946:超小尺寸的「性价比之王」

OV6946是OmniVision专为一次性内窥镜设计的。它的封装尺寸只有3.6mm x 3.6mm,你想想看,比一粒米还小。我最早接触它是在一个泌尿科项目里,客户要求镜体直径做到5mm以内,当时翻遍所有datasheet,只有OV6946能塞进去。

参数 OV6946 IMX系列(典型)
分辨率 400x400 (0.16MP) 1920x1080 (2MP) 起
像素尺寸 1.75μm 2.0μm ~ 3.45μm
封装尺寸 3.6mm x 3.6mm 6.5mm x 6.5mm 以上
输出接口 MIPI CSI-2 (1-lane) MIPI CSI-2 (2/4-lane)
典型功耗 ~80mW ~200mW 以上
价格 低(批量$5以内) 高($15-$50)

关键决策点:如果产品定位是一次性使用、镜体直径小于6mm、对分辨率要求不高(比如诊断级而非手术级),OV6946是首选。但要注意它的帧率上限只有30fps,而且低照度表现一般。

3.1.2 IMX系列:高画质的「性能担当」

IMX系列是Sony的看家产品。我最近一个4K内窥镜项目用的就是IMX678,那画质,啧啧,血管纹理看得一清二楚。但代价是什么?封装尺寸大了一圈,功耗翻倍,而且驱动配置复杂得多。

我个人习惯这样选型:

  • IMX290/IMX327:1080p级别,适合可重复使用的硬镜,性价比高
  • IMX678/IMX715:4K级别,适合手术导航、显微外科等对细节要求极高的场景
  • IMX662:低照度王者,适合腹腔镜等需要减少光源功率的场景

我的经验:别只看分辨率。IMX系列真正的优势在于动态范围和信噪比。举个例子,同样是1080p,IMX290的SNR比OV6946高出约12dB,这意味着在弱光环境下,IMX290还能看清组织边界,而OV6946已经全是噪点了。

3.2 MIPI CSI-2协议详解

MIPI CSI-2是目前内窥镜图像传感器的主流接口。为什么?因为它用差分信号传输,抗干扰能力强,而且线数少——对于内窥镜这种空间受限的设备来说,少一根线就是多一分可靠性。

3.2.1 协议分层结构

CSI-2协议分三层,我画个简图帮你理解:

应用层(Application Layer)
    ↓ 像素数据打包
协议层(Protocol Layer)
    ↓ 长包/短包封装
物理层(PHY Layer - D-PHY/C-PHY)
    ↓ 差分信号传输
PCB走线 → 传感器

嗯,这里要注意:协议层定义了数据类型(RAW8/RAW10/YUV等)和帧结构,物理层则负责电气特性。我见过不少工程师只关注物理层布线,结果协议配置错了,图像花屏——说白了,两层都得吃透。

3.2.2 关键时序参数

CSI-2的时序,核心就三个参数:

  • HS(High Speed)模式:数据传输阶段,速率可达1.5Gbps/lane(D-PHY 2.0)
  • LP(Low Power)模式:控制信号阶段,速率低但功耗小
  • HBlank / VBlank:行消隐和场消隐,决定了帧率

我曾经在一个项目里,因为HBlank设置得太短,导致数据带宽不够,图像底部出现撕裂。排查了两天才发现是时序计算错了。公式其实很简单:

帧率 = 1 / (VTotal × HTotal × 像素时钟周期)
其中 VTotal = VActive + VBlank
     HTotal = HActive + HBlank

避坑指南:我曾经在IMX290上配置了1080p@60fps,结果发现实际只能跑到52fps。后来查datasheet才发现,IMX290的像素时钟上限是74.25MHz,而我的HTotal设得太小,导致时钟频率超限了。所以,一定要先确认传感器的PLL配置范围,再反推时序参数。

3.3 硬件设计要点

硬件设计这块,我总结了三个「生死攸关」的要点。任何一个没做好,图像质量都会大打折扣。

3.3.1 差分走线:等长、阻抗、屏蔽

MIPI是高速差分信号,走线要求极其严格:

  • 等长:同一对差分线,长度差控制在5mil以内。我习惯在PCB布局时先走一对线,然后复制粘贴,确保完全对称
  • 阻抗:100Ω差分阻抗,±10%容差。层叠结构要提前算好,别等板子打样回来再测
  • 屏蔽:MIPI走线两侧要包地,而且地孔间距不超过信号上升沿长度的1/10

举个例子,对于1.5Gbps的MIPI信号,上升沿大约100ps,对应的空间长度是:

L = 100ps × 6in/ns × 0.6(介电常数修正) ≈ 0.36英寸 ≈ 9mm
地孔间距 ≤ 9mm / 10 = 0.9mm

也就是说,每0.9mm就要打一个地孔。很多工程师觉得没必要,结果EMI测试直接挂掉。

3.3.2 电源去耦:别让纹波毁了图像

图像传感器对电源纹波极其敏感。我见过一个案例,图像上出现周期性横条纹,最后发现是DCDC的开关频率(2.2MHz)耦合到了传感器供电上。

我的做法是三级去耦:

  1. 大电容:10μF陶瓷电容,滤除低频纹波
  2. 中电容:0.1μF,滤除中频噪声
  3. 小电容:100pF,滤除高频尖峰

而且,这些电容要尽量靠近传感器的电源引脚,走线越短越好。我习惯在传感器背面直接放一组电容,用via打到正面,这样寄生电感最小。

3.3.3 时钟设计:抖动的代价

MIPI的参考时钟(通常是24MHz或27MHz)必须干净。时钟抖动会导致数据采样出错,表现为图像上的随机噪点。

我曾经在一个项目里,为了省成本用了有源晶振的便宜货,结果时钟抖动达到50ps RMS。MIPI D-PHY对时钟抖动的容忍度一般是0.2UI(单位间隔),对于1.5Gbps来说,0.2UI ≈ 133ps。虽然没超,但图像质量明显不如用温补晶振(TCXO)的版本。后来我学乖了,内窥镜项目一律用TCXO,抖动控制在5ps RMS以内。

总结一下:传感器选型决定了画质的上限,MIPI接口设计决定了能否把这个上限发挥出来。OV6946适合走量的一次性镜,IMX系列适合走质的可重复用镜。硬件设计上,差分走线、电源去耦、时钟质量,这三样缺一不可。嗯,今天就聊到这儿,下一章我们讲FPGA怎么接MIPI数据——那又是另一个故事了。