用NI USB6363 bnc采集卡采集电压信号,电压信号为信号发生器,电压为vpp=4V,f=50hz的正弦波
采用NI Labview DAQmx组件与python nidaqmx实现电压信号采集
连线方面直接将信号发生器输出采集卡AI0口
安装Labview社区版,下载NI DAQmx驱动(推荐官网单独下载,本人在NI package manager下载失败了),最新版本兼容所选采集卡。 打开NI MAX工具,成功下载好驱动后,可以准确识别设备相关信息,并设置设备名称(一般为Dev1),后续python选择设备需要该信息

随后,右键选中设备,创建任务,选择模拟输入,电压,通道Dev1/ai0,输入名称后,选择连续采样,差分,默认采样率1000hz,设置单次采样点数为100,则时间窗为0.1s 点击运行开始采样。
如上图,0.1s内出现5次周期,可计算频率为50hz与信号发生器设置吻合,但是vpp=8V恰好为设置的两倍,根据示波器结果,排除信号发生器问题,最后章节再说明下原因。
python nidaqmx包安装后,如下所示,设置采集电压范围等信息
with nidaqmx.Task() as task:
task.ai_channels.add_ai_voltage_chan(
channel, # 采样通道channel = "Dev1/ai0" ,即设备称号/端口
min_val=-10.0,
max_val=10.0,
terminal_config=TerminalConfiguration.DEFAULT
)
# 设置采样时钟
task.timing.cfg_samp_clk_timing(
rate=sample_rate, # 采样率
sample_mode=nidaqmx.constants.AcquisitionType.FINITE, # 连续采样
samps_per_chan=samples_per_channel # 采样点数
)
# 读取数据
data = task.read(number_of_samples_per_channel=samples_per_channel)结果与DAQmx采集基本一致
根据GPT老师的回答,大多数信号发生器的默认输出阻抗为50Ω,并且其显示的 Vpp(峰峰值)幅度是假设负载也是 50Ω 的情况下计算的。
内部原理:发生器输出电路有一个 50Ω 串联电阻,形成电压分压器。
当负载为 50Ω 时:实际输出到负载的电压 = 设置值(分压一半在内部,一半在负载)。
当负载为高阻抗(High-Z) 时(如示波器或 NI DAQ 的输入阻抗 >10 GΩ,几乎开路):几乎无分压,实际输出电压 ≈ 设置值的 2 倍。
在信号发生器输出选项中将负载阻抗设为High Z,可以发现输出电压vpp自动变为了8V。
为了保险起见,重新修改vpp=4V,采集电压与输出电压vpp基本一致,说明GPT老师是对的!
本文章使用limfx的vscode插件快速发布