0

我在让数字计数器按照我想要的方式在我想使用 MATLAB 控制的 NI-DAQ 上工作时遇到了一些问题。

设置:我在 NI-6229 DAQ 的 ctr0 输入上接收到 TTL 脉冲,我想计算在各种条件下我收到了多少个脉冲。输入的脉冲被选通成 350 纳秒的块,例如在 DAQ 之前有一个开关;并且此开关默认关闭,并以半规则间隔打开 350 ns 并再次关闭。(我控制何时发生这种情况,但它不是固定频率。)

期望的结果:我想获取一段时间(长时间)的数据,但我需要知道哪些数据来自哪个窗口。理想情况下,输出应该是一个向量,其中每个条目是一个 350 ns 窗口期间接收到的脉冲总数。至少,我需要一些方法来区分来自不同采集窗口的计数。

这是我到目前为止所尝试的:

s = daq.createSession('ni');
ch = addCounterInputChannel(s,'Dev1','ctr0','EdgeCount');
 
for iDx = 1:7
    resetCounters(s)
    pause(1)
    test(iDx) = inputSingleScan(s);
end
display(test)
test =
650   639   662   653   599   631   662

如您所见,我每秒收到大约 600 次计数(这是一个合理的数字)。因此,布线等按预期工作。但是,我不知道如何分解它,所以我知道哪些计数来自哪个计数窗口。

接下来我尝试添加一个与采集窗口同步的触发器。它会在每个采集窗口之前的某个任意时间(由我选择)产生一个 TTL 脉冲。我将此触发器连接到 DAQ 上的一个数字输入通道,并设置计数器通道以将此信号用作时钟。(当我尝试将其用作触发器时,我得到一个设备不支持此通道上的触发器错误)。我尝试将速率设置为计数窗口的大致频率。

s = daq.createSession('ni');
ch = addCounterInputChannel(s,'Dev1','ctr0','EdgeCount');
clk = addClockConnection(s,'external','Dev1/PFI7','ScanClock');
s.Rate = 1*125000;
[data, timeStamps,triggerTime] = startForeground(s);

这给了我一个增加计数和计数时间的向量,但它实际上并没有告诉我任何关于计数器窗口的信息。更令人困惑的是,通过这种设置,1 秒后获得的计数器总数现在很大程度上取决于我选择的数量,s.Rate这在物理上没有意义。

有人对我如何区分来自不同采集窗口的计数有任何建议吗?

如果有帮助,我可以显示更多输出或提供更多详细信息。非常感谢!

4

0 回答 0