2. 硬件触发方案:硬件触发原理(GPIO、PWM、Trigger信号),外部信号发生器与主从模式设计
各位同学,咱们接着聊。上一章我讲了软件触发那些坑,说白了就是延迟不可控。你想想看,一个摄像头还好,要是四个、八个摄像头同时拍,软件轮询根本没法保证它们在同一时刻曝光。那怎么办?硬件触发。
硬件触发,说白了就是让摄像头自己“听”一个外部信号。这个信号一到,所有摄像头同时开始曝光。没有软件介入,没有操作系统调度延迟。嗯,这才是多摄像头同步采集的硬核方案。
2.1 硬件触发信号的本质
先搞清楚一个概念:触发信号到底是什么?
我个人习惯把它理解成一个“电脉冲”。这个脉冲的上升沿或者下降沿,就是摄像头开始曝光的命令。常见的触发信号有三种形态:
- GPIO 电平触发:一个引脚拉高或拉低,摄像头检测到电平变化就开始干活。简单粗暴,但容易受干扰。
- PWM 脉冲触发:用一定频率和占空比的方波来控制曝光节奏。我在项目中遇到过用 PWM 控制全局快门相机的场景,帧率可以精确到微秒级。
- Trigger 专用信号:很多工业相机(比如 Basler、海康)都有专用的 Trigger 输入口。这个信号经过光耦隔离,抗干扰能力强,适合长距离传输。
核心要点:触发信号的电气特性必须匹配。3.3V 的 GPIO 去触发 5V 的相机?不行的,电平转换是必须的。我曾经因为没加电平转换,烧掉过一个相机的触发口,教训深刻。
2.2 外部信号发生器方案
什么时候需要外部信号发生器?
当你的主控芯片(比如 FPGA 或 MCU)自身没有足够精确的定时器,或者你需要一个独立于主控的时钟源时。外部信号发生器就是一个专门的脉冲产生设备。
我常用的方案有两种:
- 专用信号发生器模块:比如用 Si5351 或者 AD9833 这类 DDS 芯片,可以产生频率可调的方波。精度高,但需要 SPI/I2C 配置。
- FPGA 内部 PLL 分频:如果你已经在用 FPGA,其实没必要外挂信号发生器。FPGA 内部的 PLL 加上计数器,就能产生非常精确的触发脉冲。我习惯用 Verilog 写一个简单的分频器:
// 一个简单的触发脉冲生成器
module trigger_gen (
input clk, // 系统时钟,比如 50MHz
input rst_n, // 复位
output reg trigger // 触发信号输出
);
reg [31:0] cnt;
parameter DIV = 50_000_000; // 1秒触发一次
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
cnt <= 0;
trigger <= 0;
end else begin
if (cnt == DIV - 1) begin
cnt <= 0;
trigger <= 1; // 产生一个时钟周期的脉冲
end else begin
cnt <= cnt + 1;
trigger <= 0;
end
end
end
endmodule
提示:外部信号发生器的输出阻抗要匹配。50 欧姆的 BNC 线缆,如果信号源输出阻抗不匹配,会产生反射,导致触发抖动。我建议在信号输出端串联一个 50 欧姆的电阻。
2.3 主从模式设计
主从模式,这是多摄像头同步的核心架构。说白了,就是选一个摄像头当“老大”,其他摄像头都听它的。
具体怎么玩?
- 主摄像头:它的曝光开始信号会通过一个 GPIO 引脚输出。这个信号就是其他摄像头的触发源。
- 从摄像头:配置成“外部触发模式”,等待主摄像头的信号到来才开始曝光。
我在项目中遇到过一个问题:主摄像头的曝光结束信号和触发信号之间有延迟。你想想看,如果主摄像头曝光了 10ms,它的触发输出是在曝光开始瞬间还是曝光结束瞬间?不同厂家实现不一样。我建议用示波器实测一下,别信 datasheet 上的时序图。
警告:主从模式有一个致命陷阱——级联延迟。如果从摄像头 A 触发从摄像头 B,B 再触发 C,每一级都会引入几十纳秒到几微秒的延迟。对于高速同步(比如 1000fps 以上),这个延迟不可接受。解决方案是:所有摄像头直接连接到同一个触发源,不要级联。
2.4 硬件触发时序的实测与调试
理论讲完了,咱们聊聊实战。硬件触发方案好不好,最终要看示波器上的波形。
我个人的调试步骤是这样的:
- 先测触发源:用示波器看触发信号的上升沿。抖动要小于 1 微秒,否则同步精度没保障。
- 再测摄像头响应:把触发信号和摄像头的曝光信号(很多相机有 Strobe 输出)同时接到示波器上。测量从触发到曝光开始的延迟。
- 最后测多路同步:把所有摄像头的 Strobe 信号都接到示波器上。理想情况是它们完全重合。如果偏差超过一个像素的曝光时间,就要调整了。
| 测试项 | 合格标准 | 常见问题 |
|---|---|---|
| 触发信号抖动 | < 1 μs | 信号反射、电源噪声 |
| 触发到曝光延迟 | < 10 μs | 摄像头内部处理延迟 |
| 多路同步偏差 | < 1 行时间 | 线缆长度不一致 |
避坑指南:我曾经因为线缆长度不一致,导致两个摄像头的触发信号相差了 5 纳秒。对于 1000fps 的相机来说,5 纳秒不算什么。但对于全局快门相机,如果曝光时间只有 1 微秒,5 纳秒的偏差就可能导致图像错位。解决办法很简单:所有触发线缆等长。
2.5 总结与建议
硬件触发方案,说白了就是“用硬件信号说话”。它比软件触发可靠得多,但也不是万能的。
我给你的建议是:
- 如果摄像头数量少(2-4 个),用主从模式就够了。
- 如果摄像头数量多(8 个以上),一定要用外部信号发生器,或者 FPGA 直接输出多路同步触发信号。
- 别忘了电气隔离。长距离传输时,用光耦或者 RS-485 差分信号,别直接用 GPIO 拉线。
嗯,硬件触发这部分就讲到这里。下一章我会讲如何用 FPGA 实现精确的触发时序控制,包括相位调整和延迟补偿。到时候咱们再细聊。