我需要您的帮助,基于会话的接口Matlab DAQ工具箱。在MathWorks教程或示例中,我找不到多少帮助。我目前正在使用来自NI的USB6003数据采集卡。
基本上,在我的系统中,我有两个模拟输出通道(ch1和ch2)和一个模拟输入通道(ch3),我想要做的是以1V的步数将ch1中的输出电压从0V驱动到10V,用ch2常数,然后在ch1中对ch2中的不同电压重复循环。至于模拟输入ch3,我是在触发ch1后一段时间触发的。我的触发器是由函数生成器外部生成的。
我一直在挣扎的是:
1)如何在每个连续触发事件中输出ch1中的不同值。
2)以及在11个触发器之后,如何更改ch2输出。
3)如何将输入保存在触发事件之间的不同位置,这样就不会被下一个事件覆盖。
我的主要限制是:
1)我不能使用边缘计数器通道来计数触发器,因为我只有两个PFI通道,我需要这两个通道,一个用于触发ch1,另一个用于ch3 (我不能只使用一个)。
2)我不能使用“等待”或任何其他软件时间功能,因为我需要一个高速采集系统(用于激光显微镜)。
3)我需要至少有两个会话并行运行,因为我的DAQ不允许在同一个会话中同时执行任务。
我已经附上了一个频道的时间表,我想做什么。通道图
发布于 2016-01-18 01:18:16
注意事项
“我需要一个高速采集系统”
USB可能不是正确的选择。与其他计算机I/O (如PCIe或EtherCAT )相比,使用USB作为控制/数据传输机制的速度慢。如果在完成这项工作之后,您确定需要更低的延迟和抖动,那么我建议您尝试CompactRIO和LabVIEW实时。
复合性能是按需性质的USB6003.当输入和模拟输出都由电信号(启动触发器和采样时钟)控制,并由驱动程序自动传输数据时,数字输入和计数器只是软件定时,这意味着读取数据不是自动的,必须由用户通过读取命令提示。
由于从USB6003中获取数字数据的唯一方法是按需获取数据,所以您唯一的选择就是等待它;没有办法通知您新的edge已经到来。其他设备(如PCIe-63xx X系列或cDAQ-940x设备)支持数字输入变化检测,这将导致将软件事件发送到程序。如果你有这样的设备,你就不用等了。
建议
但是,如果您稍微改变了触发和数据策略,我仍然认为您可以实现您想要的那种I/O。然后,您将能够评估它的速度和可靠性,以决定是否需要升级DAQ硬件。
新的触发与数据策略

其核心思想是:与其将通道保持在它们自己的“时间基”上,不如将它们统一到一个单一的时间基上,并利用它来协调电压更新。通过将外部触发器的频率加倍,所有三个通道都可以共享相同的时间。换句话说,模拟输入任务和模拟输出任务都使用相同的外部信号作为它们的采样时钟。
模拟输出样本如下:
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暴露了多少,但您可以问驱动程序在设备的缓冲区中还留下了多少示例
DAQmxGetReadAvailSampPerChan (文档)DAQmxGetWriteSpaceAvail (文档)参考文献
NI USB-6003规范 http://digital.ni.com/manuals.nsf/websearch/666A752FCC177B0186257CD8006C24C8
https://stackoverflow.com/questions/34839987
复制相似问题