Python 使用NIDAQmx触发输出任务
我在NIDAQ usb6002上执行我认为应该是一项非常简单的任务时遇到了问题:我在模拟输入通道上测量了一个低频正弦波,当它过零时,我想点亮一个LED 1秒。我试图使用nidaqmx-pythonapi,但还不能通过文档澄清我的一些基本问题 如果有人能提供关于我的设置的代码或基本逻辑的任何想法,那将非常有帮助 以下是我到目前为止所做的尝试。我从一些导入和频道的定义开始:Python 使用NIDAQmx触发输出任务,python,nidaqmx,daq-mx,Python,Nidaqmx,Daq Mx,我在NIDAQ usb6002上执行我认为应该是一项非常简单的任务时遇到了问题:我在模拟输入通道上测量了一个低频正弦波,当它过零时,我想点亮一个LED 1秒。我试图使用nidaqmx-pythonapi,但还不能通过文档澄清我的一些基本问题 如果有人能提供关于我的设置的代码或基本逻辑的任何想法,那将非常有帮助 以下是我到目前为止所做的尝试。我从一些导入和频道的定义开始: import matplotlib.pyplot as plt from math import * import nidaq
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_通道方法读取和绘制给定采样率和采样数的信号,而不会遇到任何问题。但这里是我对如何执行“检测零位并触发输出”的最佳猜测:
这给出了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页听起来应该是:
我确信代码也有其他问题。例如,似乎样本时钟操作比我上面写的要复杂得多,但我还没有找到任何东西来解释它在这种情况下是如何工作的
提前感谢您的帮助 对于NI,它是“RTFMs”
对NI设备进行编程时,通常需要两本手册
writeLED.triggers.start_trigger.cfg_anlg_edge_start_trig(V_PIN,trigger_level = 0)
是可能的,只是不适用于USB 6002。该线路要求模拟输出子系统使用模拟边缘触发器,但6002的模拟输出子系统仅具有以下触发功能:
- 软件
- PFI0
- PFI 1
软件
触发器,因为PFI线路是数字触发器,其触发电平指定在0.8 V和2.3 V之间
更改Python程序以检测模拟输入流的过零,当它检测到过零时,调用它,然后执行AO任务
停止-启动顺序的原因是:您希望为每个过零点亮LED,但任务无法重新启动,除非它已停止(通过API或通过完成其任务)或配置为重新触发。由于6002属于低成本系列,此硬件功能不可用,因此您必须使用API停止AO任务或等待AO生成完成,然后再重新启动LED脉冲
软件触发不是实时的,在led亮起之前会有不确定的延迟。这取决于您的程序、接口、usb延迟、pc性能 否则,您可以使用比较器(如lm393)触发数字输入(PFI0或PFI1) 虽然它只是一个LED,但如果延迟在毫秒内变化,它可能并不重要
writeLED.triggers.start_trigger.cfg_anlg_edge_start_trig(V_PIN,trigger_level = 0)