:触发机制详解——阈值、边沿、超时强制与预触发)
面对偶发的毛刺、缓慢过程里的突变、随机到来的事件“盲目连续采集既浪费存储又可能错过关键时刻。触发机制就是采集卡的猎手本能”——等信号、认条件、出手采集。本文以一款真实采集卡的触发源码为骨讲透边沿检测原理、超时强制策略、触发通道选择与预触发思想。全文约4000字。一、为什么需要触发三个没有触发就无解的场景偶发事件继电器触点弹跳、传感器瞬时失效——一年发生几次连续采集几天就撑爆硬盘不连续采又怕错过事件对齐想知道按键按下瞬间电流波形长什么样——采集起点必须对准事件而不是随机开始重复信号平均对同一事件重复采集再平均降噪——每次采集的起点必须严格一致否则平均变成模糊。触发的本质把何时采的决定权交给信号本身。二、边沿触发的电路本质一次过线检测看一段真实采集卡固件的触发检测代码来自DABL-7606用户手册的示波器核心代码if(_uadc.trig_flag0)// 未触发状态{// 上升沿触发检测// 条件1当前值 触发值达到触发电平// 条件2上一次值 触发值确保是上升沿if((_uadc.getAdc[trig_Ch]trigValue)(_uadc.trig_Data_ttrigValue)){_uadc.trig_flag1;// 触发成功}// 保存当前值用于下一次比较_uadc.trig_Data_t_uadc.getAdc[trig_Ch];// 超时强制触发约1秒// 防止长时间无触发导致无法采集if(_uadc.trig_cntsamplingRate){_uadc.trig_flag1;// 强制触发}_uadc.trig_cnt;}短短十几行浓缩了边沿触发的全部要素条件1条件2联合判断上升沿当前值≥阈值 且 上一次值阈值——两个条件缺一不可。只有条件1会把一直在阈值上方波动误判为连续触发加上条件2确保是从下往上穿越这个动作保存上次值trig_Data_t寄存上一次采样值为下一次比较服务——这是边沿检测的记忆触发标志位trig_flag置1后状态机切入采集记录模式不再检测触发。三、超时强制触发工程柔性的典范注意代码里的第三段约1000次采样无触发则强制触发trig_cnt samplingRate即累计采样数超过一个采样率数值对应的时间。这个设计非常务实场景你把触发阈值设成1V但信号永远在0.5V波动阈值设错了/信号没来没有超时机制采集卡永远等待上位机看起来卡死有超时机制约1秒后强制采一帧用户至少能看到信号没到阈值这个事实从而修正设置。这是等待理想包容现实的交互设计——工具永远不该因为用户的失误而僵死。四、触发通道选择与多通道联动真实产品的触发配置包含三个要素触发通道号哪个通道负责喊到 触发阈值多大的变化算事件 触发极性上升/下降。手册描述“触发阈值是指信号触发的电压。比如触发电压为1V时当信号首次到达1V则触发示波器进行采集1帧采集完成后再上传。”多通道时的两种模式单通道触发指定CH3为触发源——只有CH3过线才采其他通道作为陪采记录事件时刻的现场数字触发联动DI口接外部开关/传感器脚踏开关、继电器辅助触点数字沿到来即触发——模拟波形与数字事件同帧上传事件与波形的时间关系有图为证。触发与数字输入DI的组合是工程利器脚踏开关踩下的瞬间8路模拟通道同时开拍——实验分段的完美标记法。五、预触发看见事件之前的世界边沿触发有个天然缺陷触发发生时才开始采集事件前沿的波形丢了触发前后几μs的细节恰是最有价值的部分。解法是预触发连续采样 → 存入环形缓冲(长度N_preN_post) ↑触发点 [--预触发区--|--后触发区--] ↑触发后继续采N_post点, 然后把 环形缓冲里触发前的历史一起输出采集卡持续把数据写进环形缓冲区但不上传触发发生时缓冲区里触发之前的N_pre点被保留连同触发之后的N_post点一起成帧。这样你就得到了跨越事件前后的完整波形——毛刺之前电路状态、冲击之前的基线、故障之前的渐变全部可见。高端示波器的深度内存可调预触发位置0~100%就是这套机制的产品化。开源采集卡中SRAM记录仪DI触发组合触发前数据在环形SRAM里滚动也是同一思想的实现。六、触发参数设置方法论6.1 阈值怎么定阈值 基线 噪声带 事件幅度的一半。太低噪声误触发帧帧都是噪声太高小事件漏触发。实操先无触发采集几秒统计基线μ和噪声σ阈值设μ5σ高斯噪声下误触发率约千万分之一再根据事件实际幅度微调。6.2 触发通道怎么选选信噪比最高、事件特征最明显的通道。电流尖峰比电压敏感→触发电流通道振动先于温度变化→触发振动通道。6.3 触发后行为单次模式触发采一帧后停止——留给分析自动重触发采完自动复位等待下一次——事件统计触发记录仪联动触发启动长时记录事件触发的流式采集。七、动手实验触发系统完整演练importnumpyasnp# 实验: 用采集卡触发捕获继电器弹跳# 接线: 继电器线圈接DO驱动, 触点接5V下拉电阻→CH1# 设置: 阈值2.5V, 上升沿触发cfgdict(trig_ch1,trig_value2.5,fs50_000)frames[]foriinrange(20):# 20次开合set_do(relay_on);sleep(0.1)set_do(relay_off);sleep(0.1)frames.append(read_wave(**cfg))# 每次触发一帧# 分析: 每帧的弹跳次数与稳定时间forj,finenumerate(frames):xf.ch1 bounces((x[:-1]2.5)(x[1:]2.5)).sum()settlenp.argmax(x4.9)/fs*1e3print(f第{j1}次: 弹跳{bounces}次, f{settle:.2f}ms后稳定)# 典型结果: 弹跳3~8次, 稳定时间1~5ms# → 这就是继电器选型与软件消抖设计的实测依据没有触发机制这个实验几乎无法做弹跳只有几ms人手无法对准有了触发20次开合的统计规律一分钟内到手。八、常见问题FAQQ1为什么不触发就一直没数据检查三件事阈值是否高于信号峰值永远够不着、极性是否反了下降沿事件配了上升沿、信号是否接在触发通道上。超时强制机制至少保证1秒一帧让你诊断。Q2触发阈值能设负电压吗取决于卡的量程与固件。双极性量程±5V/±10V通常支持负阈值。Q3触发精度多高触发判决发生在采样点之间判决延迟≤1个采样周期触发点的时间分辨率1/fs。要更精的触发时刻可用插值过阈值的两点间线性插值。Q4软件触发和硬件触发差在哪硬件触发卡内逻辑检测延迟固定、不漏帧软件触发数据上传后上位机判条件延迟受通信抖动影响。事件统计用硬件触发。九、总结触发三要素通道、阈值、极性两道保险边沿双条件防误判、超时强制防僵死一个高阶武器预触发环形缓冲看历史。触发机制让采集卡从被动录像机升级为主动猎手——在正确的时间出手一次拿到关键证据。下一篇讲整张卡的心跳时钟系统。下一篇预告《时钟系统采样率的来源、晶振精度与时间戳》