DAQ Matlab工具箱:如何在没有边缘计数器通道的情况下计算触发事件,以及如何在每个连续触发时输出不同的值

时间:2016-01-17 15:19:42

标签: matlab nidaqmx

我需要您对Matlab DAQ工具箱的基于会话的界面的帮助。我在MathWorks教程或示例中找不到太多帮助。我目前正在使用NI的USB-6003 DAQ。

所以基本上在我的系统中我有2个模拟输出通道(ch1和ch2)和1个模拟输入通道(ch3),我想要做的是将ch1中的输出电压从0V驱动到10V,步长为1V,ch2恒定,然后在ch1中重复循环,以获得ch2中的不同电压。对于模拟输入ch3,我在触发ch1后触发它一段时间。我的触发器由函数发生器从外部生成。

我一直在努力的是:<​​/ p>

1)如何在每个连续触发事件中输出ch1中的不同值。

2)如果在11次触发后,我可以改变ch2输出。

3)如何将输入保存在触发事件之间的不同位置,因此不会被下一个事件覆盖。

我的主要限制是:

1)我不能使用边缘计数器通道来计算触发器,因为我只有两个PFI通道,我需要两个,一个触发ch1而另一个ch3(我不能只使用一个)。

2)我不能使用等待或任何其他软件时间功能,因为我需要一个高速采集系统(它用于激光显微镜)

3)我需要两个并行运行至少2个会话,因为我的DAQ不允许在同一个会话中同时执行任务。

我附上了频道的时间图,说明了我要做的事情。 Channels diagram

1 个答案:

答案 0 :(得分:0)

注意

“我需要一个高速采集系统”

USB可能不是正确的选择。与其他计算机I / O(如PCIe或EtherCAT)相比,使用USB作为控制/数据传输机制的速度较慢。如果在您完成此工作后,您确定需要较低的延迟和抖动,我的建议是尝试CompactRIOLabVIEW Real-Time

复合性能是USB-6003的按需性质。虽然分析输入和模拟输出都由电信号(启动触发和采样时钟)控制,并且驱动器自动传输数据,但数字输入和计数器只是软件定时,这意味着读数据不是自动的并且必须由您(即用户)通过读取命令提示。

由于您可以按需从USB-6003获取数字数据的唯一方法,您唯一的选择是等待它;没有办法通知新的边缘已到达。其他设备(如PCIe-63xx X系列或cDAQ-940x设备)支持digital input change detection,这会导致software event被发送到程序。如果你有这些设备之一,那么你就不必等了。

建议

但是,如果稍微改变一下触发和数据策略,我仍然认为你可以实现你想要的那种I / O.然后,您将能够评估其速度和可靠性,以确定是否需要升级DAQ硬件。

新的触发和数据策略

enter image description here

核心思想是:不是将频道保留在自己的“时基”上,而是将它们统一到一个时基,并使用它来协调电压更新。通过将外部触发频率加倍,所有三个通道可以共享相同的时序。换句话说,模拟输入任务和模拟输出任务都使用与其采样时钟相同的外部信号。

  1. 将FGEN触发信号的频率加倍。
  2. 如果级别不需要更改,则重复模拟输出样本。
  3. 如果模拟输入样本与输出电平变化一致,则将其丢弃。
  4. 模拟输出样本将是:

    ch1  ch2
    
    0.0  0.0
    0.0  0.0
    1.0  0.0
    1.0  0.0
    2.0  0.0
    2.0  0.0
    0.0  1.0
    0.0  1.0
    

    新计划策略

    现在模拟输入和模拟输出都使用FGEN作为采样时钟,MATLAB例程只需准备操作然后监视/馈送它。硬件将能够在没有PC干预的情况下生成和采集,但PC需要定期读取模拟输入数据并写入更多模拟输出数据以保证驱动程序满意。

    我不知道DAQmx API MATLAB暴露了多少,但您可以询问驱动程序在设备缓冲区中剩余多少样本

    • 模拟输入为DAQmxGetReadAvailSampPerChandoc
    • 模拟输出为DAQmxGetWriteSpaceAvaildoc

    参考

    NI USB-6003规格 http://digital.ni.com/manuals.nsf/websearch/666A752FCC177B0186257CD8006C24C8