使用NIDAQmx触发输出任务

2024-04-29 18:23:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在NIDAQ usb6002上执行我认为应该是一个非常简单的任务时遇到了困难:我有一个低频正弦波,我正在模拟输入通道上测量,当它超过零时,我想点亮一个LED灯1秒。我正在尝试使用nidaqmx Python API,但无法用文档澄清一些基本问题。https://nidaqmx-python.readthedocs.io/en/latest/

如果有人能提供关于代码或我的设置的基本逻辑的任何想法,那将是非常有帮助的。在

以下是我迄今为止所做的尝试。我从一些导入和我的渠道定义开始:

import matplotlib.pyplot as plt
from math import *
import nidaqmx
from nidaqmx import *
from nidaqmx.constants import *
import time

V_PIN = "Dev1/ai6"
LED_PIN = "Dev1/ao0"

我了解任务和事情一般是如何工作的-我可以用task.ai_频道方法没有任何麻烦。但我对如何执行“检测零并触发输出”有一个最好的猜测:

^{pr2}$

这给出了cfg_anlg_边线的以下错误

DaqError: Requested value is not a supported value for this property. The property value may be invalid because it conflicts with another property.
Property: DAQmx_StartTrig_Type
Requested Value: DAQmx_Val_AnlgEdge
Possible Values: DAQmx_Val_DigEdge, DAQmx_Val_None

我不知道为什么这里不支持模拟输入通道。本文档的第245页让它听起来应该是:https://media.readthedocs.org/pdf/nidaqmx-python/latest/nidaqmx-python.pdf

我相信代码也有其他问题。例如,看起来时钟操作的示例比我上面写的要复杂得多,但是我还没有找到任何东西来解释它在这种情况下是如何工作的。在

提前感谢您的帮助!在


Tags: 代码from文档httpsimportleddev1value
2条回答

对于NI,它是“RTFMs”

编程NI设备时,通常需要两个手册。在

  1. NI-DAQmx Help(用于编程部分)
  2. device specification(用于设备部分)

您需要两者,因为NI DAQmx API支持NI制造的所有DAQ设备,但并非每个设备都具有相同的功能。”“能力”包括每种信道的数量,还包括定时触发子系统以及内部信号路由。与一个设备一起运行的DAQmx应用程序不能保证与另一个设备一起运行,因为该应用程序可能以第二个设备无法支持的方式使用API。在

最后,在文档方面,任何给定的NI-DAQ设备通常属于相关设备的系列,并且这些系列有一个名为用户指南的手册。这些用户指南充当API和设备规范之间的桥梁,帮助您了解设备如何响应命令。对于6002,该系列是"Low-Cost DAQ USB Device"。在

NI 6002模拟输出的模拟触发器

你的决定是正确的

writeLED.triggers.start_trigger.cfg_anlg_edge_start_trig(V_PIN,trigger_level = 0)

可以,对于USB 6002,不是。本线要求模拟输出子系统使用模拟边缘触发器,但6002的模拟输出子系统仅具有以下触发功能:

  • 软件
  • PFI 0
  • PFI 1

对于这个设备,您唯一的选择是software触发器,因为PFI线路是数字触发器,它们的触发电平被指定为0.8v到2.3v之间

更改Python程序以检测来自模拟输入流的零交叉,当它检测到时,让它在AO任务上调用^{},然后调用^{}。在

停止-启动序列的原因是retriggering:您希望为每个过零点点亮指示灯,但任务不能重新启动,除非它已被停止(由API或通过完成其任务)或配置为重新触发。由于6002属于低成本系列,因此该硬件功能不可用,因此您必须使用API停止AO任务或等待AO生成完成,然后再重新启动LED脉冲

6002 AO Specification

clip from 6002 specifications showing the analog output subsystem capabilities

软件触发不是实时的,在led亮起之前会有不确定的延迟。这取决于你的程序,接口,usb延迟,电脑性能。。。在

否则,您可以使用比较器(如lm393)触发数字输入(PFI0或PFI1)。在

虽然它只是一个LED,但如果延迟在毫秒内变化,它可能并不重要。在

相关问题 更多 >