ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LabVIEW声呐非接触测振:40kHz相位解调实现1mm振幅测量

LabVIEW声呐非接触测振:40kHz相位解调实现1mm振幅测量 老周上周打电话给我车间里一台泵体振动特别大领导要求测出振幅但设备不能停机表面全是油污激光测振仪预算又下不来。我说这事可以另辟蹊径最后用LabVIEW搭了一套基于40kHz声呐的非接触测振系统把1 mm振幅的振动稳稳当当地测了出来。这篇文章就把这套方案的选型思路、硬件链路、LabVIEW程序核心算法和现场标定经验完整写出来给准备做非接触测振的朋友做个参考。1. 方案选型为什么声呐敢接1 mm振幅的活1.1 四种测振方案摆在一起看测量机械振幅常规思路无非这么几类压电加速度计、电涡流位移传感器、激光多普勒测振仪以及我今天要说的声呐/超声波。我把它们放在一起对比过各有各的脾气。压电加速度计接触式需要把传感器粘在或拧在设备表面测点必须干净、平整。对于运转中的泵体表面都是油污根本贴不住而且传感器本身有质量对轻薄结构会产生附加质量影响。电涡流位移传感器非接触精度高但只对金属目标有效且对目标材质、表面形状敏感需要导电体形成涡流。现场还要安装支架离目标太近在很多设备布局里连探头都伸不进去。激光多普勒测振仪非接触分辨率能做到纳米级性能最好。但设备本体就要十几万起对被测表面反射率也有要求油污、锈蚀表面经常要贴反光膜在车间环境里显得太娇贵。声呐测振这里说的声呐其实是工作在空气中的超声波换能器向目标发射声波通过反射波携带的相位信息反推位移。它同样是非接触对目标材质几乎没有要求不怕油污探头可以离目标二三十厘米一套系统下来成本远低于激光测振仪。实际选型时泵壳是铸件表面粗糙且沾满油泥加速度计没法贴电涡流探头现场没有合适的安装空间激光测振仪预算不够。声呐方案可以说是唯一能兼顾“非接触、抗污染、中距离测量、成本可控”的选择。1.2 1 mm振幅对声呐意味着什么很多人一听声呐测1 mm振幅第一反应是“超声波测距分辨率也就毫米级怎么可能测到1 mm的动态变化”。这个直觉没有错但前提是大家都在用“飞行时间测距”的思路。声呐测振恰恰要绕开这个思路改用相位法。先看物理量级。空气中声速大约343 m/s40 kHz超声波波长为λ c / f 343000 / 40000 ≈ 8.575 mm如果目标沿声束方向振动1 mm声波来回要走2 mm的额外路程换算成时间差只有约5.8微秒。普通脉冲测距声呐要分辨这么小的时间变化不仅需要极高时钟精度还要回波脉冲前沿足够陡实际上非常困难所以市面上普通超声波测距模块做到1 cm精度就到头了。但如果用连续波相位法情况完全不同。2 mm的声程差对应相位变化量为Δφ 2π × 2δ / λ ≈ 84°84°的相位变化对锁相解调电路来说非常显著。LabVIEW里通过I/Q正交解调相位分辨率做到0.1°并不难等效位移分辨率可以达到微米级。所以结论是声呐测1 mm振幅完全可行前提是你必须做相位测量而不是飞行时间测距。2. LabVIEW数据采集与声呐信号链路搭建2.1 硬件组成与连接我搭建这套系统时用的是一块NI USB-6361采集卡它同时具备模拟输出和模拟输入并且模拟输出与模拟输入的采样时钟来自同一时基这对相位测量来说至关重要。完整硬件链路如下40 kHz声呐换能器一对发射与接收分开。分体式比收发一体式更稳因为连续波工作时收发一体探头内部的串扰很讨厌分体式可以物理隔开。发射驱动部分采集卡的AO0通道输出40 kHz正弦波经过一级功率放大电路接到发射换能器。如果没有现成驱动板可以用简单的MOSFET推挽电路但必须保证输出波形不失真。接收链路接收换能器输出微弱信号先经过前置放大器提升增益再做带通滤波中心频率40 kHz带宽5 kHz左右然后进入采集卡AI0通道。参考链路从AO0输出端分出一路信号直接接到AI1通道作为发射信号的相位基准。这样做的好处是发射链路到换能器的相位延迟、AO通道的固有延迟都能在后续解调时被自动扣除。接线时要注意差分输入方式。NI采集卡AI0和AI1都用差分接法屏蔽层在采集卡端单点接地避免形成地环路。如果现场干扰严重接收换能器到前置放大器这段用屏蔽双绞线并且尽量短。提示不要外接一个独立信号发生器给换能器激励然后让采集卡去采它。外接信号发生器和采集卡之间如果没有共时钟会存在缓慢的相位漂移测出来的振动曲线会像“漂在水面上”一样不稳定。2.2 采样率、抗混叠与同步采样率的选择直接影响解调精度。理论上40 kHz正弦波只需要80 kS/s就能满足奈奎斯特条件但正交解调对每周期采样点数有要求点数太少会导致幅度和相位误差明显。我最终设成500 kS/s每个周期能采12.5个点锁相解调效果已经比较理想。如果被测表面回波弱、噪声大可以把采样率再提高比如1 MS/s。但要清楚多通道同时采样时NI USB-6361的聚合采样率会下降两个通道同时用最高只能到1 MS/s左右和500 kS/s比也没有质的提升。反而过高的采样率会带来更多数据量和更大的处理负担所以500 kS/s在Matlab和LabVIEW里都是比较均衡的选择。采集卡的抗混叠滤波器是硬件级的但软件里还是要再加一道数字带通滤波。带通滤波器我会用LabVIEW的Butterworth滤波函数中心频率设置成略低于40 kHz带宽根据现场噪声情况调整。带宽太宽会引入气流噪声太窄又会把振动引起的边带信号滤掉一般先设±2 kHz再在实测中微调。采样同步方面DAQmx任务里要把AI采样时钟作为整个循环的主时钟AO波形连续输出则由AI采样时钟派生。这样发射正弦波和接收回波之间的相位关系始终由同一块晶振控制不会出现两个设备各自晶振不一致的问题。3. LabVIEW程序实现从回波相位到振动曲线3.1 程序整体架构与关键节点LabVIEW程序的框架我建议采用生产者/消费者模式一个循环负责从DAQmx缓冲区读原始波形另一个循环负责解算和显示。直接在一个循环里又读数据又算相位又刷新图表容易在Windows下丢数尤其在波形刷新频率较高时。整体流程如下生产者循环用DAQmx读取函数连续读取AI0和AI1两个通道每个通道读取一块固定长度数据例如每200 ms读一次然后通过队列送给消费者。消费者循环从队列取出一块数据先分别对参考通道和回波通道做带通滤波。相位解调计算回波通道相对参考通道的瞬时相位差。位移换算用标定系数将相位差转换为位移值并减去初始零位。波形显示用波形图表显示位移时间曲线同时用FFT函数计算振动频谱。数据记录用TDMS文件格式将原始相位和位移曲线存盘方便事后分析。这里最容易被忽视的是队列深度。如果生产速率偶尔高于消费速率队列会堆积导致读到的数据越来越旧。建议队列深度设成比一次读取数据量多十倍的缓冲这样即使前面卡顿后续数据也能补上不丢数据。3.2 I/Q解调LabVIEW里的核心算法相位差提取的核心是I/Q正交解调。原理看起来复杂拆开就三步。假设采集到的回波信号为r(t) B × cos(2π f t φ)其中φ就是我们要的相位。现在生成两路本振信号cos(2π f t)和sin(2π f t)。把回波信号分别与它们相乘I lowpass(r(t) × cos(2π f t))Q lowpass(r(t) × sin(2π f t))乘出来以后高频分量被低通滤波器滤掉只剩下包含相位的直流分量于是φ atan2(Q, I)这里有个关键操作参考通道也要做同样的I/Q解调得到φ_ref然后用φ_echo减去φ_ref。不能直接用软件里生成的正弦函数当基准因为从AO输出到AI采集之间还有物理延迟这个延迟会随着环境温度缓慢变化。用实际采集到的参考信号做解调能自动把这一部分误差消掉。LabVIEW里的具体实现不算复杂。先读取参考通道和回波通道两个数组根据采样率和中心频率生成相同长度的两路正弦和余弦数组然后调用“乘法”和“FIR低通滤波器”函数分别算出I和Q最后用“反正切”函数求相位。这些操作在一帧200 ms数据上运行速度非常快实时性完全够。位移换算公式为δ (Δφ - Δφ0) × c / (4π f)其中Δφ是当前相位差Δφ0是目标静止时的初始相位差。如果不想手动算声速也可以在标定阶段直接把相位差和位移拟合成一条直线后面直接用斜率换算。两种方式我在项目里都试过标定拟合法更抗温度误差。3.3 从位移波形提取1 mm振幅得到位移时间曲线后提取振幅方式取决于振动形式。如果振动是稳定的正弦信号最简单的办法是做FFT在振动频率处读出频谱峰值。这个峰值就是单边振幅。比如系统采集了10秒位移数据泵体振动频率约10 HzFFT在10 Hz处幅值如果是1.0 mm那这就是要求的振幅。如果振动波形不是正弦比如冲击、多频叠加那就用LabVIEW的“最大值最小值”函数先算出整个波形的峰峰值再除以2得到单边振幅。但这个方法只对对称振动准确。如果波形不对称我建议同时在界面上显示峰峰值和单边幅值避免和客户验收时扯皮。这里必须说一个容易被忽略的坑题目里“1 mm振幅”到底指单边幅值还是峰峰值很多人默认是单边但实际验收时按峰峰值算就是2 mm。我的做法是在LabVIEW前面板上同时放两个显示控件一个标注“单边振幅”一个标注“峰峰值”让现场人员自己对应验收标准。这一个小细节能省掉后面很多沟通成本。4. 标定、误差分析与现场排查技巧4.1 现场标定怎么做得准声呐相位法虽然分辨率高但必须经过现场标定因为实际声速、探头安装角度、目标表面反射特性都会影响绝对位移值。我的标定步骤是找一个千分表或者精度更高的位移台把目标固定在一个能产生已知微小位移的装置上。没有位移台就用塞尺垫片每次垫0.1 mm记录相位差。从0 mm开始以0.1 mm步进一直加到2 mm每个位置保持几秒记录LabVIEW输出的相位差。把相位差和位移值做线性拟合得到mm/rad系数。同时看一眼拟合的线性度如果R²低于0.99说明声路里有明显干扰要排除问题再继续。现场没有位移台时也可以把一个已知厚度的垫块贴在目标表面用垫块前后表面交替作为被测面。不过这个方法操作比较麻烦还是位移台最稳妥。标定完成后要在软件里设置温度修正。空气声速随温度变化大约每摄氏度0.6 m/s温度改变5°C声速变化近1%对1 mm振幅测量会造成不可忽视的偏差。所以我在程序里加了一个温度输入控件用温度计实时更新修正声速或者每隔一段时间让系统在目标静止时自动校零。4.2 声呐测振的五个坑这套系统我前前后后调试了两个星期踩过不少坑挑最典型的五个说。第一个是表面倾斜问题。声波和光一样会发生镜面反射如果被测表面相对声束有一个较大倾角回波可能完全偏向另一侧接收换能器什么都收不到。泵体外壳这类粗铸面反而好一些因为表面粗糙有漫反射成分接收角度宽容一些。遇到光滑管道我会故意让探头偏一个很小的角度让反射声波仍能落进接收换能器。第二个是气流干扰。车间里压缩空气管漏气、风扇直吹、设备发热形成热气流都会让空气密度局部变化导致声速抖动相位曲线出现高频“毛刺”。我一开始被这个坑折腾了两天后来发现漏气点用一块波纹板挡在声路旁边信号立刻安静了。现场测振之前一定先蹲在测点附近观察几分钟确认没有明显气流。第三个是串扰问题。分体式换能器虽然好但如果发射和接收探头靠得太近发射声波会直接从空气中漏到接收端形成固定相位偏置。解决方法很简单拉开两个探头的距离或者在它们之间加一块隔声板。第四个是混响。车间里到处是金属构件声波会经过多条路径到达接收探头形成多径干涉。连续波相位法对这类干扰非常敏感读数会出现周期性波动。如果混响严重建议改用“突发脉冲串”工作模式发射一串40 kHz脉冲然后只提取固定时间窗口内的回波相位把远处混响挡在窗口外面LabVIEW里用一个时间窗函数就能实现。第五个是Windows下的实时性问题。USB采集卡在普通Windows系统上如果电脑性能不够或后台任务多相位曲线可能出现规律性毛刺。我建议在系统设置里关闭USB节能模式把采集线程优先级调高并且不要在采集电脑上跑无关的大程序。如果还不行可以考虑换NI CompactRIO或者把解算任务放到实时系统里。4.3 故障速查表现场遇到问题我习惯按现象直接查原因下面这张表是我自己整理的速查表。现象可能原因排查与解决读数乱跳幅度达到几百μm气流干扰、混响、探头串扰遮挡声路、拉开收发距离、加隔声板测出的振幅明显偏小目标位移方向与声束不垂直调整探头角度使输出位移幅值最大基线缓慢漂移温度变化、探头表面发热增加温度补偿定期在静止状态校零相位出现大幅跳变超过相位测量量程、目标位移过大降低载波频率让波长变长或增加脉冲粗测波形出现规律性毛刺Windows实时性差、USB传输干扰关闭USB节能、升级实时系统、重新插拔USB口回波信号太弱目标表面太光滑、探头角度不对更换更粗糙的目标表面、调整角度或提高前置增益这套速查表不一定覆盖所有情况但能把现场80%的问题引到正确思路上。我个人做完这套系统最大的体会是LabVIEW程序本身只占两成工作量剩下八成都在和声场环境较劲。头两天数据一直乱跳我不停改算法最后发现是车间里一根压缩空气管在漏气气流把回波相位吹得七零八落。用一块波纹板挡在探头旁边之后信号立刻安静下来。所以如果你也要做类似项目一定要先花半天在测点附近蹲着观察确认没有气流、没有其他声源再回来写程序。这套思路后续还能扩展比如给连续波加一个低频脉冲粗测绝对距离用高频相位测微小振动一套链路就能同时覆盖几毫米到几百毫米的位移。先把1 mm这一关过了其他都是水到渠成的事。
返回列表