第三章 图像采集与接口:GigE Vision、USB3 Vision、Camera Link接口对比、触发模式与带宽计算
各位同学,大家好。这一章我们聊聊图像采集的“最后一公里”——接口与触发。说实话,很多刚入行的工程师,选相机时只看分辨率,结果项目现场各种掉帧、延迟、触发不准。我当年就吃过这个亏,所以今天把这几个核心问题掰开揉碎了讲清楚。
3.1 三大工业相机接口:GigE Vision、USB3 Vision、Camera Link
工业相机接口,说白了就是相机和电脑之间“怎么说话”。目前主流就三种:GigE Vision、USB3 Vision、Camera Link。它们各有各的脾气,选错了,后面调试能让你怀疑人生。
3.4.1 GigE Vision:长距离传输的老大哥
GigE Vision 基于千兆以太网,最大优势就是距离——理论100米,实际用好的网线也能到80米以上。我在一个汽车焊装线项目里,相机离工控机有50多米,只能用GigE。而且它支持PoE(Power over Ethernet),一根网线搞定供电和数据,少拉一根电源线,现场布线清爽很多。
但缺点也很明显:带宽只有1 Gbps(实际有效约900 Mbps),而且CPU占用率偏高。为什么?因为数据包要经过网络协议栈,不像USB那样直接走内存。不过现在有了Jumbo Frame(巨型帧)技术,把包大小从1500字节提到9000字节,能明显降低CPU开销。我建议你,只要交换机支持,一定开启Jumbo Frame。
- 最大带宽:1 Gbps(千兆)/ 10 Gbps(万兆,但相机端支持较少)
- 传输距离:100米(Cat6网线)
- 供电:支持PoE(IEEE 802.3af/at)
- CPU占用:较高(需优化网络驱动)
3.4.2 USB3 Vision:即插即用的便利派
USB3 Vision 是后来者,但普及速度极快。它的带宽是5 Gbps(USB 3.0),实际有效约3.5 Gbps,比GigE快3倍多。而且CPU占用低,因为数据直接通过DMA(直接内存访问)传输,不经过网络协议栈。
但它的致命伤是距离——USB 3.0线缆最长5米,加中继器也只能到10米左右。我记得有个3C电子项目,相机装在机械臂末端,线缆要跟着臂来回甩,USB线不到半年就断了。后来换了GigE加拖链电缆才解决。
另外,USB3 Vision 的供电能力有限(5V/900mA),有些高功率相机需要外接电源。你选型时一定要看相机功耗,别指望一根USB线搞定一切。
3.4.3 Camera Link:老牌劲旅,但正在退场
Camera Link 是这三个里最“硬核”的。它用MDR或SDR连接器,带宽极高——Base模式2.04 Gbps,Medium模式4.08 Gbps,Full模式5.44 Gbps。而且延迟极低,适合线阵相机或高速面阵相机。
但代价也大:需要专用的采集卡,线缆又粗又贵(一根5米的Camera Link线要上千块),而且最大传输距离只有10米。我在一个液晶面板检测项目里用过Camera Link,图像质量确实好,但调试起来太痛苦了——采集卡驱动、FPGA配置、时钟同步,每一步都可能踩坑。
现在随着CoaXPress和10GigE的兴起,Camera Link正在被逐步替代。我个人建议,除非你维护老设备,新项目尽量别选Camera Link。
| 特性 | GigE Vision | USB3 Vision | Camera Link |
|---|---|---|---|
| 最大带宽 | 1 Gbps | 5 Gbps | 5.44 Gbps (Full) |
| 传输距离 | 100米 | 5米 | 10米 |
| CPU占用 | 高 | 低 | 低(需采集卡) |
| 供电方式 | PoE | USB总线/外接 | 外接电源 |
| 成本 | 低 | 低 | 高(含采集卡) |
| 适用场景 | 长距离、多相机 | 短距离、高帧率 | 高速线阵、老设备 |
3.2 触发模式:硬件触发 vs 软件触发
触发,就是告诉相机“什么时候拍”。选错了触发方式,轻则图像错位,重则整个产线停摆。我见过一个项目,用软件触发做高速检测,结果每次拍照都慢半拍,产品都过去了才拍——嗯,那画面太美我不敢看。
3.2.1 硬件触发:工业现场的硬道理
硬件触发,说白了就是用一根信号线,从传感器或PLC直接连到相机的GPIO口。信号一来,相机立刻曝光,延迟通常在微秒级。为什么这么可靠?因为硬件触发不依赖操作系统,不经过CPU调度,是真正的“硬实时”。
我在一个锂电池极片检测项目里,产线速度是每分钟300片,每片停留时间只有200毫秒。如果用软件触发,Windows的线程调度一抖,200毫秒就过去了。后来改用硬件触发,用光电传感器直接触发相机,再也没丢过片。
硬件触发有两种常见模式:
- 上升沿触发:信号从低到高时触发一次。适合传感器输出脉冲信号的场景。
- 下降沿触发:信号从高到低时触发。有些PLC输出的是常闭信号,就用这个。
3.2.2 软件触发:灵活但不可靠
软件触发,就是通过API发送命令让相机拍照。比如用Halcon的grab_image_start,或者OpenCV的VideoCapture::read。优点是灵活——可以在任意时刻触发,不需要额外硬件。但缺点也很明显:延迟不确定。
为什么?因为软件触发要经过操作系统调度。Windows不是实时系统,一个高优先级线程可能打断你的拍照命令。延迟从几毫秒到几十毫秒不等。对于静态拍照(比如人工放料),软件触发完全够用。但对于高速流水线,千万别用。
我个人的经验是:能用硬件触发,就别用软件触发。 哪怕只是多花几十块钱加个传感器,也比后面调试省心得多。
3.3 帧率与带宽计算:别让相机“饿死”
帧率,就是相机每秒能拍多少张。带宽,就是接口每秒能传多少数据。这两个参数必须匹配,否则相机拍得再快,数据传不出去也是白搭。
3.3.1 帧率计算公式
帧率受三个因素限制:
- 传感器帧率: 相机芯片本身能跑多快。比如IMX250传感器,在500万像素下最高能到120fps。
- 曝光时间: 曝光时间越长,帧率越低。公式:最大帧率 = 1 / (曝光时间 + 读出时间)。
- 接口带宽: 数据从相机传到电脑的速度。公式:最大帧率 = 接口带宽 / (单帧数据量)。
实际帧率取这三个的最小值。举个例子:
- 相机:500万像素(2592×2048),8位灰度,单帧数据量 = 2592×2048×1 = 5.3 MB
- 接口:USB3 Vision,有效带宽3.5 Gbps = 437.5 MB/s
- 理论帧率 = 437.5 / 5.3 ≈ 82 fps
- 但传感器最高只支持60 fps,所以实际帧率就是60 fps
3.3.2 带宽计算实战
假设你要做一个项目,要求:
- 分辨率:1920×1080
- 像素格式:8位灰度
- 帧率:30 fps
- 传输距离:50米
单帧数据量 = 1920×1080×1 = 2.07 MB
所需带宽 = 2.07 MB × 30 fps = 62.1 MB/s = 497 Mbps
GigE Vision 的1 Gbps带宽,实际可用约700 Mbps,完全够用。而且50米距离只有GigE能搞定。所以这个项目选GigE Vision 最合适。
但如果帧率要求100 fps呢?
所需带宽 = 2.07 MB × 100 = 207 MB/s = 1.66 Gbps
GigE就不够了,得上USB3 Vision(5 Gbps)或者10GigE。
3.3.3 多相机系统的带宽分配
多相机系统里,带宽是共享的。比如一个USB3控制器接4个相机,总带宽5 Gbps,每个相机平均只有1.25 Gbps。如果某个相机需要高帧率,其他相机就得降低分辨率或帧率。
我做过一个项目,4个相机同时采集,每个相机500万像素,30 fps。单相机带宽 = 5.3 MB × 30 = 159 MB/s = 1.27 Gbps。4个相机加起来就是5.08 Gbps,刚好超过USB3的5 Gbps。结果现场经常掉帧,后来把帧率降到25 fps才稳定。
所以,多相机系统一定要算总带宽。我习惯用Excel做个表格,把每个相机的分辨率、帧率、像素格式列出来,自动计算总带宽,再对比接口上限。这样选型时心里有底。
好了,这一章的内容就到这里。接口选型、触发方式、带宽计算,这三样是图像采集的基石。下一章我们讲相机标定,那是定位精度的关键。各位回去可以算算自己项目的带宽,看看有没有瓶颈。