如何通过Matlab数据采集工具箱实现NI数字输出硬件最大采样率?
NI CompactDAQ 9178 + NI 9401 时钟配置解决方案(Matlab环境)
问题背景
使用NI CompactDAQ 9178机箱搭配NI 9401数字I/O卡,该卡在双通道配置下最大信号切换频率为20MHz,依赖机箱80MHz内部时钟(可降频至20MHz/100kHz)。但在Matlab数据采集工具箱中,9401无法直接引用机箱时钟,必须添加NI 9215模拟通道才能正常输出,却被模拟卡235294.117Hz的采样率上限限制。
问题1:是否可不借助模拟通道让9401引用机箱时钟?
可以实现,核心是通过Matlab直接调用NI-DAQmx的配置接口,手动绑定机箱内部时钟,无需依赖模拟通道。具体操作步骤:
- 创建NI数据采集会话:
s = daq.createSession('ni'); - 添加9401的数字输出通道(根据实际模块编号调整,示例中为
cDAQ1Mod2):addDigitalChannel(s, 'cDAQ1Mod2', 'port0/line0:1', 'OutputOnly'); - 手动指定机箱内部时钟为数字输出的时钟源,并设置目标速率:
s.Rate = 20000000; % 20MHz,按需调整 s.DigitalClockSource = '/cDAQ1/InternalClock'; - 生成输出数据并启动输出:
data = randi([0 1], 2, 100000); % 示例输出数据 startForeground(s, data);
如果部分Matlab版本的工具箱默认隐藏了DigitalClockSource选项,可以直接调用NI-DAQmx的底层API强制配置:
sessionHandle = s.SessionHandle; % 设置时钟源为机箱内部80MHz时钟 DAQmxSetDOClkSrc(sessionHandle, '/cDAQ1/InternalClock'); % 设置分频后的输出速率 DAQmxSetDOClkRate(sessionHandle, 20000000);
注:需确保已安装NI-DAQmx驱动,Matlab会自动加载对应的MEX接口。
问题2:若不可,能否用外部时钟为9401定时输出数据?
完全支持,且不受模拟卡采样率限制,最高可达到9401的20MHz上限。配置步骤:
- 创建会话并添加数字输出通道(同问题1步骤1-2)
- 指定外部时钟源(示例为机箱PFI0端子,可根据实际外部信号接入位置调整):
s.DigitalClockSource = '/cDAQ1/PFI0'; - 设置输出速率与外部时钟频率匹配:
s.Rate = 20000000; % 需与外部时钟频率一致 - (可选)配置触发条件(比如上升沿触发):
s.DigitalStartTriggerType = 'Edge'; s.DigitalStartTriggerSource = '/cDAQ1/PFI1'; s.DigitalStartTriggerEdge = 'Rising'; - 准备数据并启动输出:
startForeground(s, data);
内容的提问来源于stack exchange,提问作者user3308082
相关产品推荐
相关产品推荐

