LabVIEW与NI采集卡振动信号采集全攻略:从传感器选型到频谱分析
2026/9/21 1:28:03 网站建设 项目流程

我最早接触振动信号采集,是在实验室帮师兄搭一套轴承故障检测平台。当时第一反应是“这不就接根线、读个数嘛”,结果从传感器选型到数据乱七八糟,折腾了整整一周才跑通第一版能用的程序。后来带过不少实习生,几乎每个人都会在同样几个地方卡住。所以这篇我干脆把一套完整的 LabVIEW + NI 采集卡振动信号采集方案从头拆到尾,附带可以直接抄的源码思路和那些文档里死活不会写的坑。

这套方案适用于:机械振动监测、轴承故障诊断、电机运行状态评估,以及任何需要把加速度传感器信号变成计算机里可以分析的数据的场合。NI 采集卡在工控领域用得最多的是 USB-6002、USB-6212、USB-4431 这几款,前两者便宜够用,后者自带 IEPE 恒流源,测加速度计非常方便。软件方面用 LabVIEW 2020 及以上版本,配合 NI-DAQmx 驱动,社区版完全够用,不一定要花钱买正版授权。

1. 整体方案设计与系统架构

1.1 先搞清楚被测对象和传感器选型

振动信号采集第一步不是打开 LabVIEW,而是确定被测对象到底是什么类型的振动。

从频率角度粗分,一般旋转机械的振动集中在 10Hz 到 10kHz 之间。电机轴承故障的早期特征频率往往在几百赫兹到几千赫兹,齿轮箱的啮合频率可能更高。如果是测建筑结构、桥梁的模态,那就是低频大位移,几赫兹到几十赫兹。不同场景直接决定了你用什么样的传感器和采样率。

从传感器类型角度,压电式加速度计是最常见的选择。它输出电荷信号,需要经过电荷放大器或者 IEPE 恒流源供电才能被采集卡读取。这里有一个新手极容易忽略的点:如果你的采集卡没有 IEPE 供电功能,传感器接上去信号几乎是零,要么加一个信号调理模块,要么直接换自带 IEPE 的采集卡(比如 USB-4431)。很多人信号采不出来,不是程序写错了,是硬件供电压根没通。

1.2 系统硬件连接拓扑

整个系统的链路不复杂,传感器 - 采集卡 - 电脑 - LabVIEW 程序。

传感器出来的信号分两种:一种是电压输出型,直接进采集卡的 AI 通道;一种是 IEPE 型,需要采集卡提供 4mA 左右的恒流源供电,信号叠加在直流偏置上,采集卡内部会做隔直处理。接线方式上,单端接地(RSE)四通道以内的测量基本够用,但如果现场有严重的电磁干扰,或者传感器信号线超过三米,建议优先用差分输入(DIFF)模式,抗共模干扰能力会好很多。

NI 的 USB-6212 是 16 通道 16 位 400kS/s 的采集卡,性价比很高,支持差分和单端模式切换,还可以配置数字触发口。如果你是要长期做振动监测项目,建议直接买它而不是 USB-6002,后者只有 12 位分辨率,动态范围差了 16 倍,分析频谱时底噪会明显抬高。

1.3 为什么选 LabVIEW 而不是 Python / C++

做振动采集,很多人问为什么不直接用 Python 加 pydaqmx 或者 C++。说实话 Python 做数据分析确实方便,但采集这块需要考虑实时性和波形显示的流畅度。

LabVIEW 的核心优势在于 DAQmx 驱动已经把缓冲、触发、时钟同步这些底层逻辑封装好了。你不需要关心 DMA 传输怎么配置,不需要手动管理环形缓冲区,只需要摆好几个节点 — 这就是图形化编程对硬件控制场景的最大价值。再加上它自带的波形图控件和 TDMS 文件格式,采样显示存储一条龙,开发效率确实比 Python 高不少。

不过它也有明显的劣势:跨平台差、代码 diff 困难、版本兼容性偶尔抽风。所以这套方案的核心思路是:采集直接用 LabVIEW 做,后续复杂的数据分析(比如小波变换、深度学习故障诊断)把 TDMS 文件导出后交给 Python 处理,各干各擅长的事。

2. 软件环境配置与硬件调试

2.1 NI-DAQmx 驱动的选择与安装

LabVIEW 本身并不直接支持硬件访问,所有数据采集功能都是通过 NI-DAQmx 驱动提供的。安装 LabVIEW 后,需要单独安装对应版本的 NI-DAQmx 驱动。

这里强调版本对应关系:LabVIEW 2020 建议装 DAQmx 20.6,LabVIEW 2023 建议装 DAQmx 2023 Q1 及以上版本。不能随便装个最新的 DAQmx 就完事,我有一次在高版本 LabVIEW 上装了旧版 DAQmx,结果 DAQmx Create Channel 节点直接报错找不到。装完之后可以在 LabVIEW 的帮助菜单里找到“查找范例”,看看有没有 DAQmx ANSI C / LabVIEW 范例库,如果有,基本就说明驱动注册成功了。

安装过程中如果遇到杀毒软件拦截,尤其是 360 和某国产管家,建议先退出再装。NI 的驱动安装会向系统注册表写入大量硬件抽象层的配置,这类安全软件经常会误删关键 DLL 文件,导致安装到一半报错 1612 之类的错误码。这属于老生常谈的坑了,但几乎每个月都有人踩。

2.2 NI MAX 硬件验证:别急着写代码

驱动装好之后,先把采集卡插到电脑上。打开 NI MAX(Measurement & Automation Explorer),在“设备和接口”里应该能看到你的设备型号。点开设备,右侧会显示序列号、固件版本、通道数等信息。

再往下有个非常重要的功能:“自检”和“测试面板”。自检用来确认设备没有被系统识别异常,测试面板则可以手动选通道、选采样率、开始采集,实时看到原始波形。

我强烈建议新手在这里先把硬件链路验证通过,再写 LabVIEW 程序。在测试面板里点“开始”,然后把传感器放在桌面上敲一敲,看看电压是否有变化。如果这里没有信号,就不用浪费时间写程序了,先解决接线和传感器供电的问题。养成这个习惯之后,你会少走很多弯路。

2.3 采样率的设置逻辑

采样率是振动采集中最核心的参数,没有之一。

根据奈奎斯特采样定理,采样率必须大于信号最高频率的两倍。但工程上我们通常留出至少 2.56 到 5 倍的裕量。原因在于:实际的抗混叠滤波器不是理想低通滤波器,在截止频率附近存在过渡带。如果你的分析目标是 5kHz 以内的振动信号,理论上 10kHz 采样率就够,但建议直接上 25.6kHz 或 50kHz,以获得更平坦的通带和更好的信噪比。

另外还有一个容易忽略的细节:采样率要和后续分析的目标频率范围匹配。如果你的采样率设太高(比如 200kS/s),数据量会爆炸,磁盘写入速度跟不上。以 USB-6212 的 400kS/s 为例,单通道 50kHz 采样率,每秒数据量约 100KB,连续采集一小时就是 360MB,存储压力还是不小的。合理做法是:先确认关心的振动频率范围,然后在这个范围乘以 10 作为采样率,既有足够的分辨率又不至于浪费存储。

3. 核心代码架构与实现细节

3.1 程序整体框架:生产者消费者

LabVIEW 程序不能一上来就堆代码。一个可用于实际项目的振动采集程序,至少需要三个并行模块:数据采集模块(生产者)、数据显示模块(消费者)、数据存储模块(文件写入)。

为什么要拆开?因为数据采集是硬实时任务,数据到达率由硬件时钟决定。如果采集循环里同时做波形显示、文件写入,显示一卡顿就会拖慢采集循环,导致缓冲区溢出、数据丢失。拆成生产者消费者模式之后,采集循环只负责把数据放进队列,显示和存储循环按自己的节奏从队列里取数据,哪怕显示卡了也不影响采集。

这一结构听起来复杂,其实用 LabVIEW 实现不困难。采集循环用 DAQmx Read 节点连续读取,每次读出的波形数据通过“队列操作”函数入队;显示循环用“元素出队”取出并绘制;存储循环同理。三个循环用“通知”或“队列”同步,停止时通过“用户事件”广播退出信号。

3.2 关键节点逐个拆解

先说 DAQmx Create Virtual Channel。这个节点必须设置对物理通道和测量类型,否则后面全部白搭。

物理通道的填写格式是“设备名/ai0”,比如Dev1/ai0。设备名可以在 NI MAX 里查到,默认是 Dev1,但如果电脑上装过多个 NI 设备,后面的数字会递增,千万别写死,最好通过属性节点动态获取设备名。

测量类型选“加速度”还是“电压”?这里的坑在于:LabVIEW 里虽然提供了加速度测量类型,但它的本质只是在电压测量基础上做了一次灵敏度换算(即电压值除以传感器灵敏度,得到 g 值),并没有做硬件滤波。所以如果你的传感器灵敏度是 100mV/g,测量类型选加速度,输入灵敏度填 0.1(单位是 V/g),读出来的数据就直接是 g 值。但如果你需要做频谱分析,建议还是以电压形式采集原始值,自己换算,这样数据更灵活,不会因为传感器灵敏度参数填错导致整段数据作废。

接着是 DAQmx Timing 节点。采样模式选“连续采样”,采样率填目标采样率,每通道采样数这个参数很多人不懂。它指的是每读取一次缓冲区返回多少个点。这个值会影响读取频率和实时性:设得越大,每次读到的数据越多,CPU 开销越小,但波形显示的更新延迟越大。比较折中的做法是采样率 / 10,比如 50kHz 采样率,每通道采样数设 5000,也就是每秒读 10 次,实时性很好,CPU 占用也不高。

最后是 DAQmx Start Task 和 DAQmx Read。注意不要在循环内重复创建任务和控制 Start,应在循环外创建并启动任务,循环内只做 Read,这样能避免反复分配硬件资源导致的卡顿。

3.3 一个最小可运行的采集程序

以下是基于 LabVIEW 图形化编程思路编写的客户端代码流程,我会用文字严格描述每一个控件的连接方式,方便你在 block diagram 里对照摆放:

  1. 在程序框图上放置DAQmx Create Virtual Channel.vi,将物理通道设为Dev1/ai0,测量类型为“加速度”,传感器灵敏度填0.1(对应 100mV/g),按 Ctrl+H 打开即时帮助可以看到每一项的说明。
  2. 放置DAQmx Timing.vi,采样模式选“连续采样”,采样率填50000,每通道采样数填5000
  3. 放置DAQmx Start Task.vi,连线后执行一次。
  4. 放置 While 循环,循环内放置DAQmx Read.vi,将读取类型设为“波形”->“单通道”->“N 通道 N 采样”,输出自然是波形数据。
  5. 循环内把波形数据显示到前面板的波形图控件,同时用“获取波形分量”函数取出 Y 数组,计算 RMS 值显示。
  6. 循环停止条件用“停止按钮”或“错误发生”都行,退出循环后调用DAQmx Clear Task.vi释放资源。

这段逻辑用 LabVIEW 的图形化方式摆放,大概 20 个节点左右,半小时内就能搭完。关键核心不在于多复杂,而是每个节点的输入输出必须连接正确。

3.4 数据存储:为什么选 TDMS 而不是 Excel

数据存储我会直接推荐 TDMS 格式。

TDMS 是 NI 专为测试测量场景设计的二进制格式,写入速度极快,并且天生保留通道名称、单位、采样率等元数据。用 Excel 存 CSV 在小数据量下很方便,但连续采集一小时后数据文件轻松上 GB,CSV 的写入和后续读取都会变得非常痛苦,而且文本格式还无法完整保存时间戳信息。

LabVIEW 里写入 TDMS 只需要用到TDMS OpenTDMS WriteTDMS Close三个函数。需要注意的是,TDMS Write 应采用“多通道-波形”模式,它能一次性把带时间戳的波形数据写完,下次用TDMS Read读取时直接还原成波形,不需要手动拼接时间轴。

另外,TDMS 文件不仅可以给 LabVIEW 自己读取,Python 的npTDMS库也可以轻松解析。这就解决了“采集和数据分析分离”的诉求:现场设备采集存 TDMS,回办公室用 Python 做二次开发。

3.5 简单的频谱分析实现

振动信号采集不就是为了看频谱,否则光看时域波形根本看不出轴承故障。在 LabVIEW 里做频谱分析,首选自带的Spectrum Measurements函数。

这个函数的使用要点有三个:一是窗函数选择,做振动分析一般用 Hanning 窗,因为它能有效抑制频谱泄露;二是平均模式,推荐选“RMS”平均,平均次数设 10 次以上,能有效压低噪声底;三是输出格式,选“幅度谱”并勾选“转换成 dB”,方便观察微弱故障特征。

有一点必须要提醒:频谱分析的结果分辨率受到采样点数的限制。采样率 50kHz、采样点数 5000 点时,频率分辨率只有 10Hz。这意味着两个相隔不到 10Hz 的振动频率分量在频谱上是无法分辨的。所以当你需要精密分析(比如滚动轴承故障特征频率提取)时,要么提高采样点数(读更多的数据做 FFT),要么降低采样率(牺牲高频段换取低频分辨率),二选一,没有免费午餐。

4. 避坑实录:文档里不会告诉你的细节

4.1 接线接触不良导致的“幽灵信号”

我调试过程中被坑得最惨的一次,是传感器接线端子松了。现象非常诡异:时域波形看起来有信号,但幅度特别小,且频谱上全是 50Hz 电源谐波。一开始怀疑是采集卡坏了,换了通道还是一样,最后用万用表量传感器输出端子才发现地线端虚接,信号根本没能正常传输。

这类问题很难通过程序排查。建议所有基于 BNC 或者螺柱端子的接线,接完后都要做“拉力测试” — 轻轻拉一下线缆,看信号波形是否有明显波动。另外,BNC 转接头尽量选带锁扣的,别用直插式。

4.2 悬浮接地与共模电压超限

如果电脑用的是两脚插头的电源适配器或者电池供电,采集卡的地和被测设备的地之间可能存在电位差,也就是所谓的“接地环路”。这时信号输入采集卡后,共模电压可能超过采集卡的允许范围,轻则波形漂移,重则烧毁模拟输入前端。

判断方法很简单:信号线和地线都接好后,给传感器断电,看采集卡读到的电压是否为 0。如果不是 0,就要考虑加装信号隔离器,或者改用差分输入方式,把共模干扰变成差模抑制掉。

4.3 缓冲溢出问题:错怪硬件的常见错误

连续采集过程中,LabVIEW 偶尔会报“缓冲区溢出”错误(DAQmx 错误代码 -200279)。根本原因不是采集卡不行,而是采集循环的执行速度跟不上缓冲区填充速度。

解决思路有三个方向,按性价比排序:

  1. 增加 DAQmxTiming 里的每通道采样数,让每次 Read 一次取更多数据,降低读取频率;
  2. 把显示和存储移出采集循环,用队列异步处理,彻底解耦;
  3. 检查电脑是否处于高 CPU 占用状态,LabVIEW 的实时性高度依赖前台进程调度,后台跑个大型编译任务都可能导致采集卡缓冲区溢出。

大多数情况下,第一个方法就能解决问题。如果用了第三个方法还报错,那才需要怀疑是驱动或硬件问题。

4.4 IEPE 传感器输出直流偏置的原因

使用 IEPE 加速度计时,传感器输出的电压不是零,而是有一个直流偏置,通常在 8V 到 12V 之间。这是正常的,不要慌。

LabVIEW 里如果测量类型选“加速度”,DAQmx 会自动做 AC 耦合处理,直流偏置会被隔掉。但如果选了电压测量,你会在时域波形里看到明显的高电压直流分量,这是正常现象,把它当成故障就闹笑话了。最好的做法是测量类型选“加速度”,让驱动帮你完成隔直后的灵敏度换算。

4.5 时域波形有“毛刺”但频谱上找不到原因

有时时域波形会有周期性的毛刺,但在频谱上又看不到对应的峰值。这种情况大概率是传感器安装问题:磁性座吸附不牢、胶水固化不完全,或者安装面不平导致传感器产生高频谐振。

还有一种常见因素:数据线离变频器或大功率电机过近,耦合进了高频噪声。这种情况毛刺是随机出现而不是周期性的。建议先观察毛刺出现的频率是否固定:固定就是机械谐波或安装问题,不固定基本就是电磁干扰,把信号线换成带屏蔽的双绞线并单端接地,能解决绝大多数噪声问题。

5. 进阶思路:这套系统还能怎么扩展

5.1 多通道同步采集

很多机械振动诊断场景需要同时采集多个测点,比如轴承座的水平方向和垂直方向,或者齿轮箱的输入轴和输出轴。多通道采集在 LabVIEW 里实现起来很简单,把 AI Create Virtual Channel 的物理通道写成Dev1/ai0:3就行。

但注意,通道数的增加会使每通道的采样率降低。NI 采集卡的总采样率是固定的(比如 USB-6212 是 400kS/s),如果你用了 4 个通道,每通道最高只能 100kS/s。在设计系统时一定要算好这个账,避免后期发现采样率不够用。

5.2 触发采集与状态监测

如果振动信号是瞬态的(比如开关机瞬间的冲击响应),连续采集会浪费大量存储空间。这时用触发采集更合适:DAQmx Trigger 节点配置为模拟边沿触发,当信号幅值超过设定阈值才开启采集,并保留触发前的若干预触发数据。

这个功能在 LabVIEW 里非常好用,但新手往往不知道触发阈值和触发斜率的设置逻辑。阈值不要设得太接近噪声底,否则触发频率会非常高,等于没触发。建议先用非触发模式采集完整数据,观察稳态振动幅值,再设置阈值为稳态幅值的 1.5 到 2 倍。

5.3 与 Python 联动做后续 AI 分析

我最推崇的流程是:LabVIEW 负责现场采集和实时预警,Python 负责离线深度分析。TDMS 文件作为这两个环节之间的桥梁,已经在实际项目中验证过多次:采集现场用 LabVIEW 显示波形和频谱,同时后台把原始数据写入 TDMS;下班后用 Python 读取 TDMS,进行小波包分解、包络谱分析、特征提取,甚至可以结合机器学习模型做故障模式识别。

这样既发挥了 LabVIEW 在实时采集领域的优势,又能借助 Python 的庞大科学计算生态。不会 Python 也没关系,先学会导出 TDMS,数据格式是通用的,早晚有一天你会用得上。

6. 完整项目实践的几点体会

最后分享几个实操中颠覆我认知的细节。首先是波形图表控件的刷新机制,用“波形图表”显示连续数据时,它默认只有 1024 个历史数据点,也就是说你看到的波形只有前 1024 个点,后面的会被丢掉。如果需要显示完整波形,必须把图表的历史长度设置为采集长度一致,否则看起来像是数据丢帧了实际只是显示问题。

其次是 LabVIEW 运行内存的管理。一个采集程序跑一整天,内存占用从 200MB 慢慢涨到 1GB,大多数人会以为是程序写得太烂,然而那只是 LabVIEW 前端界面控件的缓存增长。如果连续跑数天,建议定期重启程序,或者在设计中加入“定时清理前面板历史数据”的逻辑。

再有就是关于采样时钟的重要细节。NI 采集卡默认使用的是板载时钟,稳定性还不错。但如果以后你有多设备同步的需求(比如同时用采集卡和高速相机),一定得关注外部时钟和触发同步的问题。这属于振动测试系统走向高级的必经之路,提前有概念总比临时抱佛脚好。

还有一个经验是:务必把传感器灵敏度和采样率等关键参数显示在界面上,同时写入 TDMS 文件的属性中。我遇到过不少同事,三个月后回看采集数据,死活想不起来当初用的灵敏度是 100mV/g 还是 10mV/g,整段数据直接废掉。数据的可追溯性,在工程实践里和采集本身一样重要。

如果你只是临时验证一下传感器是否正常,用 NI MAX 的测试面板就够了;但如果要做实验数据采集或设备监测,把这套生产者消费者框架搭好,后续任何项目的需求变化都只是加节点的问题。这套思路帮我完成了至少六个不同场景的振动采集项目,从实验室验证到现场产线监测,核心框架一次都没有推翻重写过。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询