电压信号采集

用NI USB6363 bnc采集卡采集电压信号,电压信号为信号发生器,电压为vpp=4V,f=50hz的正弦波

采用NI Labview DAQmx组件与python nidaqmx实现电压信号采集

连线方面直接将信号发生器输出采集卡AI0口

NI Labview DAQmx采集

安装Labview社区版,下载NI DAQmx驱动(推荐官网单独下载,本人在NI package manager下载失败了),最新版本兼容所选采集卡。 打开NI MAX工具,成功下载好驱动后,可以准确识别设备相关信息,并设置设备名称(一般为Dev1),后续python选择设备需要该信息

alt text

随后,右键选中设备,创建任务,选择模拟输入,电压,通道Dev1/ai0,输入名称后,选择连续采样,差分,默认采样率1000hz,设置单次采样点数为100,则时间窗为0.1s 点击运行开始采样。

如上图,0.1s内出现5次周期,可计算频率为50hz与信号发生器设置吻合,但是vpp=8V恰好为设置的两倍,根据示波器结果,排除信号发生器问题,最后章节再说明下原因。

python nidaqmx采集

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插件快速发布