本项目是一个用于数据采集系统的软件触发和中间触发功能模块,基于C#开发,提供思路及实例代码。
在进行数据采集时,用户可以设定某些信号的特定条件,例如一个数字信号的高电平 (logic high) 或低电平 (logic low),或是一个电压信号的特定值,一旦满足这些特定条件,数据采集卡才真正开始采集并将其传送到系统中,这便是触发的基本原理。当某一个满足触发条件的信号进入数据采集卡后,板上的逻辑电路 (FPGA 或 PLD) 便会驱动 ADC 开始进行采样的工作。最直觉的想法是,一旦有触发发生,立刻开始采样。但是由于 FPGA 与 PLD 的进步,我们可以在这些逻辑组件中规划更多种的触发模式。下面是中高端数据采集卡常见的触发模式。
Post-trigger(普通触发)
Post-trigger 是最简单的触发模式。当用户下达开始采集的命令后,FPGA 或 PLD 会启动 DMA 并等待触发事件。当触发发生后立即开始采样,直到满足用户设定的采样点数或用户下达停止命令为止。诸如突波检测、多张数据采集卡的同步都可以使用这种触发模式。
Middle-trigger(中间触发)
Middle-trigger 是 pre-trigger 的延伸。在 middle-trigger 中,用户可以同时取得触发事件前后的数据。如图所示,用户可以指定 M (触发前) + N (触发后) 笔数据,用以观察在触发前后信号变化的情形。
以中间触发功能的实现通常需要配套硬件的支持,在大部分低端采集卡和小型数据采集设备中不具备此功能,但该功能可以通过软件实现。
设置数据采集系统模式为连续采集,首先设定一个存储触发后数据的数组buffer1,大小为N,设定一个信号阈值,当采集数据大于阈值时,开始把采集数据拷入数组,实现触发点后N个信号的采集。
添加一个队列作为存储触发前数据的buffer2,数据采集时依次从队尾入队,队首数据出队,队列大小维持为M,即所需要采集的触发前点数,类似出入栈,触发时,把该时刻的buffer2拷入数据数组,跟buffer1拼接,即实现触发前后指定M+N个数据的采集。