CoaXPress 相机触发设置

相机触发设置

触发

在机器视觉、工业相机或科学成像领域,"触发"(Trigger) 是指控制相机何时开始采集图像的机制。它让相机不再连续拍摄(自由运行模式),而是根据外部信号或内部条件精确地在特定时刻曝光和采集图像,从而实现与运动物体、其他设备(如光源、PLC、机械臂)的高精度同步。

为什么需要触发?

  • 避免运动模糊:在传送带上抓拍高速移动的物体。
  • 节省带宽/存储:只在有目标时拍照。
  • 多相机同步:多个相机同时拍摄同一事件。
  • 与光源同步:闪光灯亮起瞬间曝光。
  • 提高系统确定性:确保图像采集时机可预测。

相机触发的主要类型

硬件触发(Hardware Trigger) ✅(最常用、最可靠)

原理:通过相机的 GPIO 接口(如 Hirose、M12 等) 接收一个电平信号(TTL/RS422/LVTTL 等)来启动曝光。

信号类型:

  • 上升沿触发(Rising Edge):信号从低→高跳变时触发。
  • 下降沿触发(Falling Edge):信号从高→低跳变时触发。
  • 高电平触发 / 低电平触发:持续电平有效期间可多次触发(较少用)。

优点:延迟低(微秒级)、抖动小、抗干扰强。

典型应用:工业流水线、机器人引导、激光同步。

示例:光电传感器检测到产品到达 → 发出 TTL 高电平 → 相机立即曝光。

软件触发(Software Trigger)

  • 原理:通过上位机软件(如 Halcon、OpenCV、厂商 SDK)发送指令触发相机拍照。
  • 实现方式:调用 API 函数(如 AcquisitionStart + 触发命令)。
  • 优点:无需额外接线,调试方便。
  • 缺点:受操作系统调度影响,延迟高且不稳定(毫秒级抖动),不适合高速或高精度场景。
  • 适用场景:实验室调试、低速检测、无硬件触发接口的相机。

自由运行(Free Running) ❌(严格来说不是"触发",但常作为对比)

  • 相机以最大帧率连续采集,不依赖外部信号。
  • 适用于静态场景或对同步无要求的应用。

编码器触发(Encoder Trigger)(高级硬件触发)

  • 原理:相机连接旋转编码器,根据物体移动的距离(而非时间)触发拍照。
  • 特点:实现"等距采样",即使传送带速度变化,图像间距仍一致。
  • 应用:印刷检测、长幅材料检测(如布料、金属卷材)。

多相机同步触发

  • 主从模式(Master-Slave):
  • 一台相机作为"主",发出同步信号;
  • 其他相机作为"从",接收该信号同时曝光。
  • 使用硬件线路(如 Sync Out / Sync In) 或 PTP(Precision Time Protocol) 实现纳秒级同步。
  • 应用:3D 重建、多视角检测。
  1. 曝光信号输出(Strobe / Flash Trigger)
  • 虽然不是"输入触发",但密切相关:
  • 相机在曝光开始时,通过 GPIO 输出一个闪光信号(Strobe Out),用于触发外部光源。
  • 确保只有曝光期间灯亮,节能且避免过曝。

触发相关的关键参数(在相机配置中常见)

参数 说明
Trigger Mode On / Off(是否启用触发)
Trigger Source Line0, Line1, Software, Action0(选择触发源)
Trigger Activation RisingEdge, FallingEdge, AnyEdge
Trigger Delay 触发后延迟多少微秒再曝光(用于补偿机械/光路延迟)
Exposure Mode TriggerWidth(曝光时间由触发脉冲宽度决定)或 Timed(固定曝光时间)

下面是一个相机的示例:

<Enumeration Name="TriggerSelector">

<ToolTip>Selects the type of trigger to configure.</ToolTip>

<Description>Selects the type of trigger to configure.</Description>

<DisplayName>Trigger Selector</DisplayName>

<Visibility>Beginner</Visibility>

<pIsLocked>IsRunning</pIsLocked>

<EnumEntry Name="FrameStart">

<Value>0x0</Value>

</EnumEntry>

<EnumEntry Name="FrameBurstStart">

<Value>0x1</Value>

</EnumEntry>

<pValue>TriggerSelectorReg</pValue>

</Enumeration>

<IntReg Name="TriggerSelectorReg">

<Address>0x8900</Address>

<Length>4</Length>

<AccessMode>RW</AccessMode>

<pPort>Device</pPort>

<Endianess>BigEndian</Endianess>

</IntReg>

<Enumeration Name="TriggerMode">

<ToolTip>Controls if the selected trigger is active. </ToolTip>

<Description>Controls if the selected trigger is active. </Description>

<Visibility>Beginner</Visibility>

<pIsLocked>IsRunning</pIsLocked>

<EnumEntry Name="On">

<Value>0x1</Value>

</EnumEntry>

<EnumEntry Name="Off">

<Value>0x0</Value>

</EnumEntry>

<pValue>TriggerModeReg</pValue>

</Enumeration>

<IntReg Name="TriggerModeReg">

<Address>0x8904</Address>

<Length>4</Length>

<AccessMode>RW</AccessMode>

<pPort>Device</pPort>

<pInvalidator>TriggerSelectorReg</pInvalidator>

<pInvalidator>UserSetLoadReg</pInvalidator>

<Endianess>BigEndian</Endianess>

</IntReg>

<Enumeration Name="TriggerSource">

<ToolTip>This feature defines the source of the trigger signal.</ToolTip>

<Description>This feature defines the source of the trigger signal.</Description>

<DisplayName>Trigger Source</DisplayName>

<Visibility>Beginner</Visibility>

<pIsLocked>IsRunning</pIsLocked>

<EnumEntry Name="Software">

<DisplayName>Software Trigger</DisplayName>

<Value>0x0</Value>

</EnumEntry>

<EnumEntry Name="CXPTrigger">

<DisplayName>CXP Trigger</DisplayName>

<Value>0x4</Value>

</EnumEntry>

<EnumEntry Name="Line0">

<DisplayName>Line Trigger 0</DisplayName>

<pIsImplemented>DIN1ConnectorType</pIsImplemented>

<Value>0x8</Value>

</EnumEntry>

<EnumEntry Name="Line1">

<DisplayName>Line Trigger 1</DisplayName>

<pIsImplemented>DIN1ConnectorType</pIsImplemented>

<Value>0x9</Value>

</EnumEntry>

<pValue>TriggerSourceReg</pValue>

</Enumeration>

<IntReg Name="TriggerSourceReg">

<Address>0x8908</Address>

<Length>4</Length>

<AccessMode>RW</AccessMode>

<pPort>Device</pPort>

<pInvalidator>TriggerSelectorReg</pInvalidator>

<pInvalidator>UserSetLoadReg</pInvalidator>

<Endianess>BigEndian</Endianess>

</IntReg>

<Enumeration Name="TriggerActivation">

<ToolTip>This feature defines the activation mode of the trigger signal.</ToolTip>

<Description>This feature defines the activation mode of the trigger signal.</Description>

<DisplayName>Trigger Activation</DisplayName>

<Visibility>Beginner</Visibility>

<pIsLocked>IsRunning</pIsLocked>

<EnumEntry Name="RisingEdge">

<DisplayName>Rising Edge</DisplayName>

<Value>0x4</Value>

</EnumEntry>

<EnumEntry Name="FallingEdge">

<DisplayName>Falling Edge</DisplayName>

<Value>0x5</Value>

</EnumEntry>

<EnumEntry Name="AnyEdge">

<DisplayName>Any Edge</DisplayName>

<Value>0x6</Value>

</EnumEntry>

<pValue>TriggerActivationReg</pValue>

</Enumeration>

<IntReg Name="TriggerActivationReg">

<Address>0x890C</Address>

<Length>4</Length>

<AccessMode>RW</AccessMode>

<pPort>Device</pPort>

<pInvalidator>TriggerSelectorReg</pInvalidator>

<pInvalidator>UserSetLoadReg</pInvalidator>

<Endianess>BigEndian</Endianess>

</IntReg>

<Command Name="TriggerSoftware">

<ToolTip>Generates an internal trigger. TriggerSource must be set to Software.</ToolTip>

<Description>Generates an internal trigger. TriggerSource must be set to Software.</Description>

<DisplayName>Software Trigger</DisplayName>

<Visibility>Beginner</Visibility>

<pValue>TriggerSoftwareReg</pValue>

<CommandValue>0</CommandValue>

</Command>

<IntReg Name="TriggerSoftwareReg">

<Address>0x8910</Address>

<Length>4</Length>

<AccessMode>WO</AccessMode>

<pPort>Device</pPort>

<Endianess>BigEndian</Endianess>

</IntReg>

CoaXPress 独有的触发

CXP设备除了上述提到的触发外,还支持通过Low Speed Up connection 发送触发信号,这个触发通常是指由HOST发送到Device。

我们来看一个示例,下面是EoSens 25CXP+ 系列相机的触发源选项:

<Enumeration Name="TriggerSource">

<ToolTip>This feature defines the source of the trigger signal.</ToolTip>

<Description>This feature defines the source of the trigger signal.</Description>

<DisplayName>Trigger Source</DisplayName>

<Visibility>Beginner</Visibility>

<pIsLocked>IsRunning</pIsLocked>

<EnumEntry Name="Software">

<DisplayName>Software Trigger</DisplayName>

<Value>0x0</Value>

</EnumEntry>

<EnumEntry Name="CXPTrigger">

<DisplayName>CXP Trigger</DisplayName>

<Value>0x4</Value>

</EnumEntry>

<EnumEntry Name="Line0">

<DisplayName>Line Trigger 0</DisplayName>

<pIsImplemented>DIN1ConnectorType</pIsImplemented>

<Value>0x8</Value>

</EnumEntry>

<EnumEntry Name="Line1">

<DisplayName>Line Trigger 1</DisplayName>

<pIsImplemented>DIN1ConnectorType</pIsImplemented>

<Value>0x9</Value>

</EnumEntry>

<pValue>TriggerSourceReg</pValue>

这里面的Software 是指HOST 写DEVICE 寄存器完成单次触发,CXPTrigger是指HOST 可以插入数据包向DEVICE 发送触发,Line0/1是相机上的硬件IO端口,典型是12PIN输入端口。其中很显然,触发精度、时延准确度依次为Software、CXPTrigger、Line0/1

下面重点说明CXPTrigger的使用。

HOST 端 如何发送CXP Trigger

下面内容节选自IP手册,最终解释权归星测电子所有。

Trigger触发接口

用于Device和Host互相发送、接收触发信号(目前没有厂商支持Device向HOST发送)。相机的触发来源通常有3个:

  • CoaXPress 软件触发,通过Host向Device设备写寄存器实现;
  • CoaXPress 协议触发,通过Host LINK层触发输入信号实现,相对于软件触发实时性强,实际应用中使用较多,无需为相机连接额外的触发接线;
  • CoaXPress 相机外部硬件触发,通过相机的外部硬件接线实现,实时性最强,触发信号发出到相机收到触发信号的延迟可以忽略不计,但是需要额外接触发信号线

本章节描述通过Host IP Link层向CoaXPress Device设备发送触发信号的接口。

表 2‑1 trigger接口

|---------------------------|-----------|------------------------------------------------------------------------------------------------------------|
| 信号名称 | 输入/输出 | 描述说明 |
| trigger_clk | 输入 | 可选trigger时钟输入。当TRIGGER_CLK_SYNC使能后,被用来对trigger 信号进行同步。默认disable,使用125M时钟输入。 |
| trigger_clrn | 输入 | 可选trigger复位输入。当TRIGGER_CLK_SYNC使能后,被用来复位同步逻辑。 |
| trigger_in | 输入 | trigger边沿选择。trigger_inn指示link n。0代表下降沿发送trigger,1代表上升沿发送trigger。 |
| trigger_in_chg | 输入 | Host向Device发送的trigger脉冲。trigger_in_chgn指示link n。 |
| trigger_ack | 输出 | device trigger响应信号,指示device是否收到了host发送的触发指令。trigger_ackn指示link n。 |
| trigger_out | 输出 | Device到Host下行链路trigger输出。trigger_outn\*3:n 指示link n。实际应用中,下行链路trigger 很少使用,绝大多数厂商不进行支持,在后续CXP协议中会考虑移除。 |
| trigger_delay_out | 输出 | 下行链路trigger延迟值。trigger_ackn\*7:n 指示link n。 |
| trigger_out_chg | 输出 | trigger_out有效指示信号。trigger_out_chgn指示link n。 |
| missed_triggers_count_out | 输出 | trigger丢失计数器输出,每个link 32bit。 |
| sent_triggers_count_out | 输出 | 发送trigger计数器输出,每个link 32bit。 |
| in_chg_triggers_count_out | 输出 | 有效trigger接收计数器,每个link 32bit。 |
| ack_triggers_count_out | 输出 | trigger响应计数器,每个link 32bit。 |

图 2‑1 uplink trigger timing,Host to Device

DEVICE 端如何接收CXP Trigger

下面内容节选自IP手册,最终解释权归星测电子所有。

Trigger触发接口

用于Device和Host互相发送、接收触发信号(目前没有厂商支持Device向HOST发送)。

表 2‑2 trigger接口

|-------------------|-----------|--------|-----------------------------------------------------------|
| 信号名称 | 输入/输出 | 位宽 | 描述说明 |
| trigger_in | 输入 | 4 | 触发输入,一个介于0和15之间的数字N,用于定义触发,对应于LinkTrigger0到LinkTrigger15。 |
| trigger_in_chg | 输入 | 1 | 此信号的上升沿触发并启动触发数据包,标志着触发信号有效标志。 |
| trigger_ack | 输出 | 1 | Trigger响应标志,表面HOST已经收到触发并给出了响应。 |
| trigger_out | 输出 | 1 | uplink上行触发输出,在从HOST接收到触发数据包时发生变化。 |
| trigger_delay_out | 输出 | 9 | uplink上行链路trigger延迟值。 |
| trigger_out_chg | 输出 | 1 | trigger_out_chg 信号表示触发输出已经发生变化并且有效。 |

uplink触发 HOST->Device:

在接收到uplink触发数据包时,IP分别在 trigger_out 和 trigger_delay_out 端口上输出接收到的触发电平和触发延迟。在 trigger_out_chg 端口上拉高一个单时钟周期的脉冲表示相关触发已到达。IP会自动向主机生成接收到的触发数据包的回应命令。下图表显示了uplink低速触发接口的时序图。

图 2‑2 uplink trigger timing, Host to Device

相关推荐
qq_411262423 小时前
ESP32-S3 AI相机硬件组成与通信配置说明
人工智能·数码相机
私人珍藏库4 小时前
[Android] OldRoll复古胶片相机高级版-徕卡-哈苏-宝丽来等等
数码相机·智能手机·app·工具·软件·多功能
私人珍藏库4 小时前
[Android] 红妆相机-拍照美颜图片美化工具
android·数码相机·app·软件·多功能
疯狂的维修1 天前
2.5D双目全景相机引导抓取调试
数码相机
2601_957418801 天前
相机USB有线连接技术讨论:PTP与MTP协议的原理与选择困境
数码相机
尤老师FPGA2 天前
威三学社-全新课程发布直播6月16日晚8点,B站直播间
数码相机
伶俜662 天前
鸿蒙实战(二) ArkUI AI 相机:从零实现实时滤镜与人脸贴纸
人工智能·数码相机
暂未成功人士!2 天前
雷达的标定 --- 雷达到相机(Lidar2Cam)标定 和 雷达到本体(Lidar2Baselink)标定的相关原理以及实现步骤
数码相机·雷达·坐标转换·标定·外参
互联网散修3 天前
鸿蒙实战:从零实现自定义相机(下)——填平预览拉伸、比例错乱、缩略图消失的六大坑
数码相机·华为·harmonyos