3、硬件触发方案设计:GPIO触发模式、PWM触发模式、外部信号源触发
硬件触发,说白了就是给两个相机一个“齐步走”的口令。这个口令必须足够精准,才能保证左右眼看到的画面是同一时刻的。我这些年调试过的双目系统,十有八九的同步问题都出在触发信号上。今天咱们就把三种最常用的硬件触发方案掰开揉碎了讲清楚。
3.1 GPIO触发模式:最直接的“拍肩膀”
GPIO触发,就是用一个高低电平的变化来告诉相机:“现在,拍!” 这是最基础、也最常用的方式。
工作原理:主控芯片(比如STM32、FPGA)拉高一个GPIO引脚,相机检测到上升沿(或下降沿),立即开始曝光。就这么简单。
关键参数:
- 触发电平:3.3V 或 5V,取决于相机IO口耐受电压。我习惯用3.3V,兼容性更好。
- 脉冲宽度:一般要求大于相机的最小触发脉宽(查手册,通常是50μs~1ms)。
- 响应延迟:从GPIO拉高到相机开始曝光,中间有几十纳秒到几微秒的延迟。这个延迟在双目标定中会被标定掉,但抖动(jitter)才是杀手。
核心要点:GPIO触发模式下,两个相机的触发信号必须来自同一个GPIO引脚,或者两个引脚由同一个时钟源驱动。否则,两个信号的相位差会随时间漂移。
我在项目中遇到过一个问题:用两个独立的定时器分别控制左右相机的GPIO,结果发现画面总是有1~2行的错位。查了半天,原来是两个定时器的时钟源不同,导致触发时刻有微小偏差。后来改成同一个定时器的两个通道输出,问题就解决了。
3.2 PWM触发模式:连续稳定的“节拍器”
如果你需要相机以固定帧率连续工作,比如30fps或60fps,那PWM触发模式就派上用场了。它本质上就是一个周期性的方波信号。
为什么用PWM?
- GPIO模式需要软件不断去拉高拉低,CPU负担重。
- PWM由硬件定时器自动产生,CPU只需要配置一次,之后完全不用管。
- PWM的占空比可以控制曝光时间(如果相机支持)。
配置示例(以STM32为例):
// 假设目标帧率30fps,周期33.33ms,高电平脉宽1ms
TIM_HandleTypeDef htim2;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 84-1; // 84MHz / 84 = 1MHz
htim2.Init.Period = 33333-1; // 1MHz / 33333 ≈ 30Hz
HAL_TIM_PWM_Init(&htim2);
TIM_OC_InitTypeDef sConfigOC;
sConfigOC.Pulse = 1000; // 高电平1000μs = 1ms
sConfigOC.OCMode = TIM_OCMODE_PWM1;
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
个人经验:PWM频率不要设得太高。我曾经为了追求低延迟,把帧率设到120fps,结果相机曝光时间太短,画面暗得没法看。后来才明白,帧率要跟光照条件和相机灵敏度匹配。
避坑指南:PWM信号的上升沿抖动通常很小(纳秒级),但如果你用RC滤波电路去整形,反而会引入额外的延迟和抖动。我曾经这么干过,结果同步精度从纳秒级掉到了微秒级。嗯,后来我再也不在触发信号上加滤波了。
3.3 外部信号源触发:最灵活的“外挂”
有时候,主控芯片的GPIO或PWM不够用,或者你需要更精确的时序控制。这时候,外部信号源(比如信号发生器、FPGA、专用时钟芯片)就是最佳选择。
典型场景:
- 需要亚微秒级的同步精度(比如高速运动物体的三维重建)。
- 主控芯片的定时器资源不够,或者精度达不到要求。
- 需要多个相机(3个以上)严格同步,且触发信号需要长距离传输。
信号发生器怎么用?
- 设置输出波形:方波,频率=目标帧率。
- 设置幅值:3.3V或5V,匹配相机IO电平。
- 设置占空比:一般50%即可,但要注意高电平时间要大于相机最小触发脉宽。
- 用BNC线或SMA线连接到两个相机的触发输入口。
重要提醒:外部信号源的地线必须与相机的地线共地!否则信号会飘,严重时可能烧坏相机IO口。我见过有人用信号发生器直接接相机,没共地,结果相机触发口冒烟了。
FPGA方案:如果你手头有FPGA,那是最好的外部信号源。FPGA可以产生任意频率、任意占空比的信号,而且多个输出通道之间的延迟可以精确控制到皮秒级。我习惯用FPGA内部的PLL产生一个基准时钟,然后用计数器分频出触发信号,这样所有通道的相位差可以做到完全一致。
3.4 三种方案对比
| 方案 | 精度 | 灵活性 | CPU占用 | 适用场景 |
|---|---|---|---|---|
| GPIO触发 | 微秒级 | 高 | 高(需软件控制) | 低速、非连续采集 |
| PWM触发 | 微秒级 | 中 | 低(硬件自动) | 固定帧率连续采集 |
| 外部信号源 | 纳秒~皮秒级 | 最高 | 无 | 高精度、多相机同步 |
3.5 核心知识体系
下面这张图,是我自己总结的硬件触发方案选择逻辑。你想想看,做双目同步,第一步就是搞清楚你的精度需求和应用场景。
我的习惯:做原型验证时,先用GPIO触发,简单粗暴。等系统稳定了,再根据实际需求换成PWM或外部信号源。这样前期调试快,后期性能也有保障。
好了,三种硬件触发方案就讲到这里。记住一句话:触发信号的精度,决定了双目同步的上限。不管你用哪种方案,信号路径越短、干扰越少、时钟越统一,效果就越好。
公众号:蓝海资料掘金营,微信deep3321