我在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_channels方法读取并绘制给定采样率和样本数量的信号,而不会遇到任何麻烦。但是,这是我对如何执行“检测零并触发输出”的最佳猜测:
writeLED = nidaqmx.Task('LED')
writeLED.ao_channels.add_ao_voltage_chan(LED_PIN)
writeLED.timing.cfg_samp_clk_timing(1)
writeLED.triggers.start_trigger.cfg_anlg_edge_start_trig(V_PIN,trigger_level = 0)
writeLED.write([5], auto_start=True)
这使我在cfg_anlg_edge行出现以下错误
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
我确定代码也存在其他问题。例如,样本时钟的操作似乎比我上面写的要复杂得多,但是我找不到能够解释这种情况下如何工作的任何东西。
在此先感谢您的帮助!
答案 0 :(得分:1)
对NI设备进行编程时,通常需要两本手册。
您需要两者,因为NI-DAQmx API支持NI制造的每个 DAQ设备,但并非每个设备都具有相同的功能。 “功能”不仅包括每种类型的通道数量,还包括 timing 和 triggering 子系统以及内部信号路由。不能保证与一台设备一起运行的DAQmx应用程序可以与另一台设备一起运行,因为该应用程序可能以第二台设备无法支持的方式使用API。
最后,在文档方面,任何给定的NI DAQ设备通常都属于相关设备系列,并且这些系列也都有名为用户指南的手册。这些用户指南充当API与设备规范之间的桥梁,可帮助您了解设备如何响应命令。对于6002,家族为"Low-Cost DAQ USB Device"。
您的确定是正确的
writeLED.triggers.start_trigger.cfg_anlg_edge_start_trig(V_PIN,trigger_level = 0)
是可能的,而USB 6002只是不是。此行要求模拟输出子系统使用模拟边沿触发,但要求6002使用模拟输出子系统仅具有以下触发功能:
对于此设备,您唯一的选择是software
触发器,因为PFI线是数字触发器,并且其触发电平指定为0.8 V至2.3 V。
更改您的Python程序,以从模拟输入流中检测过零,并在发生这种情况时使其在AO任务中依次调用stop()
和start()
。
停止启动顺序的原因是retriggering:您要点亮LED以便每个零交叉,但是除非任务已被停止,否则无法重新启动任务API或通过完成其任务)或配置为重新触发。由于6002在低成本系列中,因此该硬件功能不可用,因此您必须使用API停止AO任务或等待AO生成完成,然后再重新启动LED脉冲
答案 1 :(得分:1)
软件触发不是实时的,在打开LED之前您将有不确定的延迟。这取决于您的程序,界面,USB等待时间,计算机性能...
否则,您可以使用比较器(如lm393)来触发数字输入(PFI0或PFI1)。
尽管它只是一个LED,但延迟在几毫秒内变化可能并不重要。