0

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

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

我一直在努力的是:

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

2)以及如何在 11 次触发后更改 ch2 输出。

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

我的主要限制是:

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

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

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

我附上了我正在尝试做的频道的时间图。 渠道图

4

1 回答 1

0

警告

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

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

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

由于从 USB-6003 获取数字数据的唯一方法是按需获取,因此您唯一的选择就是等待;没有办法通知新的边缘已经到达。其他设备(如 PCIe-63xx X 系列或 cDAQ-940x 设备)支持数字输入变化检测,这会导致将软件事件发送到程序。如果您拥有其中一种设备,则无需等待。

建议

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

新的触发和数据策略

在此处输入图像描述

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

  1. 将 FGEN 触发信号的频率加倍。
  2. 如果电平不需要改变,则重复模拟输出样本。
  3. 如果模拟输入样本与输出电平变化同时发生,则将其丢弃。

模拟输出样本为:

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 需要定期读取模拟输入数据并写入更多模拟输出数据以使驱动程序满意。

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

  • 模拟输入是DAQmxGetReadAvailSampPerChan文档
  • 模拟输出是DAQmxGetWriteSpaceAvail文档

参考

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

于 2016-01-18T01:18:16.330 回答