刘栋,任天平
(郑州大学机械工程学院,河南郑州 450001)
六面顶压机是目前国内超高压高温静压法合成人造金刚石的主要生产设备。顶锤,主要材料是钨钴系列硬质合金,安装在六面顶压机活塞的大垫块顶部使用。当受油缸驱动一组6个顶锤闭合形成高压腔时,腔体内可达到10~20 GPa以上的压力和摄氏1 500℃以上的温度,承受着压应力、拉应力以及剪切应力,处于超临界状态下工作。由于顶锤内部的缺陷造成的应力集中不能通过塑性变形得到消除,以及顶锤校对不当、合成块放置不当等外界因素影响,顶锤发生破裂。如果未及时发现,进行卸压停热操作,将会导致高压腔内压力外泄,进而造成碎屑及合成块飞溅、“放炮”、多个顶锤损坏等危害,带来巨大的人员伤亡隐患和经济损失。六面顶压机顶锤破裂在线无损检测预报警显得非常重要,有显著的经济意义及社会意义。
现阶段对于顶锤破裂的检测,并无可靠实用的技术,主要是通过生产现场有经验的合成工通过听声音的方式来判断 (顶锤破裂时,发出类似锯条掰断的声音),以预防为主。基于此,认为当顶锤产生宏观裂纹进而产生声音时或之前,产生了音频段的特征信号。该特征信号可以是音频信号或者是顶锤破裂所产生的振动信号,文中采集的是振动信号而非音频信号以屏蔽环境噪声的干扰。经过现场信号采集,确定了顶锤破裂时存在该频谱分布异常的特征信号。通过对该特征信号的识别,实现顶锤破裂的报警。
作者提出一种基于声卡的顶锤破裂实时检测系统。采用计算机声卡而非传统的数据采集卡完成数据采集;采用C++多线程技术、C++和MATLAB混合编程的方式完成软件设计;利用MATLAB强大的信号分析能力,编写信号分析识别算法,封装成COM组件,供C++调用,完成信号分析以实现实时检测报警。
通过功能分析,顶锤破裂在线检测报警系统,在系统组成上分为传感检测模块、信号调理模块、数据采集模块、数据分析模块、人机显示模块、报警输出模块。如图1所示,传感器信号通过信号调理电路,利用计算机的线路输入 (line in)作为信号输入端口,将获取的A/D采样数值传入计算机中,进而通过编写的应用程序进行相关分析,若检测识别到顶锤破裂信号,报警输出。另外,声卡测量信号的引入应采用音频电缆或者屏蔽电缆以降低噪声干扰。
图1 系统组成
传统数据采集工作主要由专用的数据采集卡完成,价格昂贵并需要单独的驱动程序完成数据采集和获取。大多数分辨率为12/16位,并且受计算机插槽接口、地址、中断资源的限制,扩展性较差,同时在电磁干扰较强的场合可能无法对其进行电磁屏蔽,造成采样数据失真[1]。
而计算机声卡就是一款很好的双通道数据采集系统,同时具有A/D、D/A以及低通滤波功能,价格低廉、兼容性好、灵活通用、性能稳定。另外声卡使用DMA方式传递数据,极大地降低了CPU的占用率。一般声卡的16位转换精度对于许多工程测量和科学实验来讲已经足够了。当然声卡数据采集也具有其局限性,只适合采集音频域的信号,即输入信号范围为20~20 000 Hz的信号;不允许任意设定采样频率,因此不能控制整周期采样,需要通过相应的信号处理方法来弥补非整周期采样带来的问题[2]。虽然现今一些声卡的采样率提高到了96/192 kHz甚至更高,但是价格昂贵,而且某些是通过重采样技术转换得到的。
在顶锤破裂在线检测应用中,采集的振动信号频率位于音频段,同时现场的压机控制系统带有工控机,采用计算机声卡完成数据采集是一种很好的选择。声卡一般有mic in和line in两个音频输入口。声卡的mic in输入端有高增益的放大器,最大输入信号强度50 mVrms,容易引入噪声,使信号有较大失真,且容易造成信号过负荷;line in线路输入抗干扰强,输入电压不超过1.5 Vrms[3]。故使用line in口作为信号输入端口,其干扰小且动态特性良好。
但是直接测量信号可能过于嘈杂或危险,信号调理电路将信号处理成可以直接输入声卡line in口,主要包括信号的隔离和线性化处理、放大/衰减、阻抗匹配、滤波等,以使信号能够正确地被声卡所识别。
而后声卡将信号采样数据存入数据存储单元,信号分析模块对信号进行识别分析,检测到报警信号,通过报警输出模块,通知压机控制系统进行停热、卸压等故障操作。
关于软件设计,采用C++和MATLAB混合编程的方式,以C++为主,利用多线程技术和COM组件技术,结合两种编程语言特点,取长补短,提高程序运行效率,完成对信号的采集分析识别。
如图2所示,开启采集线程,利用Windows音频API函数驱动声卡完成数据采集操作,将采样数据存入内存数据缓冲区;预处理线程将从内存缓存区取出数据,进行端点检测等预处理,然后将疑似信号送入分析线程;分析线程完成信号识别,进而通过报警模块输出报警信号。
图2 系统软件架构
数据交互在内存中进行,以保证数据的快速存取。信号识别分为两级,预处理完成算法相对简单的前期识别处理,只有疑似信号才被送入分析线程,进行相对复杂的特征提取及模式识别算法实现,完成相对耗时的识别操作。通过这种方式,提高程序运行效率,保证信号识别处理的实时性。
通过C++和MATLAB混合编程的方式,利用MATLAB固有的函数和算法,缩短了程序开发周期;采用C++多线程技术,有效弥补了MATLAB不能并行工作的特点;另一方面,MATLAB是一种解释性执行语言,通过将其编写的算法封装成COM组件,某种程度上提高其执行效率[4]。
信号调理电路将传感器信号处理成可以直接输入声卡采集的信号,送入声卡的line in口完成A/D转换。信号调理电路由高通滤波器、两级放大电路、低通滤波器等部分组成,完成阻抗匹配、幅度调节及信号滤波。
3.1.1 阻抗匹配
外电路阻抗和声卡阻抗之间的对应关系对送入声卡的信号质量有显著影响。为了获得可接受的效果,外电路的输出阻抗必须小于声卡的输入阻抗。否则部分或者全部信号强度将会因为负载效应丢失,大部分声卡的输入阻抗为60~2 000 Ω[3],可以利用运放的输出阻抗无限小的特点,完成阻抗匹配。
3.1.2 幅度调节
保证输入电压范围不超过1.5 Vrms,不超出声卡line in口测量范围。为了提高输入阻抗,降低输出阻抗,采用两级放大电路,第一级采用同相放大器,第二级采用反相放大器。同相放大器具有很高的输入阻抗,对输入信号源影响很小,输入的信号电流很小,信号电压不会有太大的损失;反相放大器输出阻抗小,和声卡输入端完成阻抗匹配。两级电路按照1.5 Vrms来考虑选取电阻参数。
3.1.3 滤波
高通滤波器由一个小电容 (1 μf)和大电阻 (1 MΩ)组成一个RC滤波电路来实现,主要用于滤除工频干扰和低频噪声。
低通滤波采用二阶压控型低通滤波器,单位增益,主要用于降低高频干扰,根据特征信号频率选择截止频率。整个电路除了有关电阻电容外,选取高性能运放lm358,完成电路设计。
与一般的数据采集卡不同,声卡A/D任务通常都是连续状态的。为了节省CPU资源,计算机的CPU并不是在每次声卡A/D结束后都要响应一次中断,而是采用了缓冲区的工作方式[2]。
待测信号源源不断地送入声卡,创建3个音频缓冲区,采样数据保存在音频缓冲区中。当一个缓冲区满的时候,该缓冲区置满标志位,发送MM_WIM_DATA消息,将该缓冲区控制权归还给程序,自动将采样数据存入下一个缓存区,并执行waveInOpen函数指定的回调函数。在回调函数中,将缓冲区数据移入内存采样数据缓冲区,通知异步线程进行处理,并再次调用waveInAddBuffer将缓存区重新填入音频数据缓存队列,以实现循环采样,从而保证采样不间断,采样数据不丢失。
处理流程如图3所示,表1列出来用到的Windows音频 API函数[2]。
图3 声卡采集流程图
表1 Windows音频API函数
需要注意的是,调用waveInPrepareHeader函数准备缓冲区,是采用堆分配的方式,为其分配的内存区域被锁定了,无法通过delete或者free来释放了,必须调用waveInUnprepareHeader函数才能解锁定,然后才能释放。同时在退出系统停止采集时,需要首先调用waveInReset函数将内存从waveInAddBuffer函数的限定中释放,然后再使用waveInUnprepareHeader释放,最后调用delete或者free释放内存空间。
通过对现场提取的信号分析,可分为3类:噪声、近似信号、裂锤信号。噪声,是指工频干扰等引入的杂音背景声,能量小;近似信号,是指环境噪声等裂锤信号,能量较大。
图4为采集到的信号,分析发现信号具有短时性特点,事件长度在40~150 ms。在某些短时段呈现随机噪声特点,在某些短时段由呈现出周期性信号特性,其他时段为两者混合。只有在短时间内,信号才较平稳。因此对信号的分析识别,必须建立在短时性的前提下,分为两部分来实现。
图4 采集得到的信号
预处理操作,主要进行时域分析,主要任务是端点检测,获取近似信号和裂锤信号的起点和终点,从而截取信号,通知信号分析异步线程对其进行分析。有效的端点检测能够更有效地对信号进行分析训练和识别,大大减少识别的运算复杂度,提高程序运行效率,保证实时性。这里采用改进的短时能量和短时平均过零率双门限方法实现,采用动态阈值确定门限值,运算小、易于实现并且鲁棒性较好,有较好的识别效果。图5为短点检测算法MATLAB仿真效果图。另外一方面,针对裂锤信号短时相关函数、短时频谱等时域特征不同进行信号初步筛选。
图5 MATLAB断点检测算法测试
对截取出来的信号进行分析,通过时域及频域特征提取,完成信号识别。分析发现,特征段频谱分布明显不同。利用FFT进行频谱分析时,为保证频域分辨率,需要足够的时域数据序列,在44.1 kHz的采样率下,取4 096点 FFT,得到大约44.1 kHz/4 096=10.77 Hz的频率分辨率。同时为了减轻谱泄漏影响,需要加窗。但要注意应用窗函数的时候,频率分辨率本质上会降低,高能量的谱分量还会遮蔽低能量的谱分量,特别当原始时间数据的平均值为非零时更加明显,这与直流分量DC飘逸有关。通过计算时间序列的平均值并从原始序列的每一个样点中减掉这个平均值可以消除这个问题 (注意平均和减的过程必须在加窗前进行)[5]。对截取出来的信号分析算法是采用MATLAB语言编写的,将其封装成COM组件以供调用[3]。
图6为声卡数据采集及调用COM组件多线程处理的程序效果图,设定缓冲区大小为4 096,采样频率为44.1 kHz,CPU为双核1.8 GHz。这样92.9 ms完成一次采样,开启线程调用COM组件完成数据分析 (4 096点FFT及端点检测)。测试发现第一次调用COM组件用时较长,包含初始化COM库、创建COM接口实例以及调用COM方法,这一部分可以放到程序初始化过程中进行。初始化完成之后,调用COM组件封装的函数进行信号分析时,最长用时在20 ms左右,浮动变化,这是由于Windows并非为实时操作系统,系统为线程按照优先级分配时间片,执行相应任务。因此可以创建相应的循环队列数据结构类,将预处理截取的数据送入循环队列,顺序处理,从而提高时间容错能力[6]。
图6 信号采集与调用COM组件测试
结合金刚石六面顶压机顶锤工作场合及特性,提出一种基于声卡的顶锤破裂检测方案,利用声卡采集顶锤工作过程中的振动信号,采用C++和MATLAB混合编程的方式完成信号实时采集分析。该方案大大降低了软硬件成本,可扩展性强,并已得到工程应用,处于测试阶段,可行性得到了验证。但是在为提高信号识别的准确度而采用较复杂的信号分析算法时,实时性有待提高,需要进行算法优化以及进行实时操作系统移植予以解决。
[1]魏勇,孙士平.基于LabView与USB的虚拟仪器接口设计[J].现代电子技术,2009,31(8):163.
[2]田敏,李江全,邓江涛,等.案例解说MATLAB典型控制应用[M].北京:电子工业出版社,2010.
[3]蒋程鹏,吕建敏.基于LABVIEW的脉搏测试仪[J].医疗装备,2009(10):13-15.
[4]张亮,王继阳.MATLAB与 C/C++混合编程[M].北京:人民邮电出版社,2008:113-139.
[5]LYONS Richard G.数字信号处理[M].朱光明,程建远,刘保童,等,译.北京:机械工业出版社,2006.
[6]CHILDS Jeffrey S.C++类和数据结构[M].张杰良,译.北京:清华大学出版社,2009.