百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

MATLAB环境下基于电机电流特征分析的齿轮故障检测

bigegpt 2024-10-28 12:47 32 浏览

做多了基于机器学习和深度学习的机械故障诊断,感觉没意思了,换个口味,写一下基于现代信号处理的齿轮故障检测。本例来源于Mathworks公司的某一个大佬,主要讲解如何利用电机的电流信号识别齿轮系中的故障。

运行环境:MATLAB R2021B,低于此版本可能不能运行成功

完整代码面包多下载:

https://mianbaoduo.com/o/bread/Y5icmp5r

使用传统振动传感器进行齿轮的故障监测具有一定的挑战性,尤其是当振动传感器不易安装时。由于电流信号很容易获取,因此本例说明如何应用电机电流特征分析提取频谱特征,以检测电机驱动齿轮中的故障。

硬件

本例中的电流数据是Futaba S3003伺服器中采集的,该伺服器经过修改可以实现连续旋转。伺服系统将内部直流电机的高转速转换为输出的高扭矩。伺服系统由直流电机、一组尼龙金属齿轮和控制电路组成。本例移除了控制电路,允许直接监控直流电机的电流信号,使用红外光断续器采集伺服器输出的转速信号。伺服器和红外光断续器由3D 打印支架固定。

直流电机以恒定5伏电压驱动,四对齿轮提供 278:1 的减速比,花键处的轴转速约为 50 rpm。 由于电流测量值的变化太小而无法检测,因此使用单电源传感器接口放大器放大了电流信号。 然后使用抗混叠五阶椭圆低通滤波器对放大的电流信号进行滤波,使其平滑并消除噪声,然后通过模数转换器 (ADC) 将其发送到 Arduino Uno。

如上面流程图所示,首先分别使用放大器和抗混叠低通滤波器对电流信号进行放大和滤波。 Arduino Uno 通过 ADC 以 1.5 kHz 采样电流信号,并将其与转速计脉冲一起作为串行数据以 115200 的波特率传输到计算机。MATLAB 脚本从 Arduino Uno 获取串行数据并将其写入逗号分隔值 (CSV) 文件。 然后使用 MATLAB 读取和处理CSV 文件以提取频谱指标。

伺服齿轮系

Futaba S3003 由四对尼龙齿轮组成,如上图所示。 直流电机轴上的小齿轮 P1 与阶梯齿轮 G1 啮合,小齿轮P2与阶梯齿轮G2啮合,小齿轮P3与阶梯齿轮G3啮合,小齿轮 P4 与连接到输出花键的齿轮 G4 啮合。 阶梯式齿轮组 G1 和 P2、G2 和 P3 以及 G3 和 P4 是自由旋转齿轮,即它们不连接到各自的轴上。 当电机以 5 伏电压驱动时,该组驱动齿轮提供了 278:1 的减速比,从 13901 rpm 的电机速度到输出花键的50 rpm转速。 下表概述了每个齿轮啮合处的输出速度、齿轮啮合频率和累积齿轮减速的齿数和理论值。

在将故障引入阶梯齿轮 G2 和 G3 之前,共收集了 10 个健康数据集。 由于齿轮是用尼龙模制而成的,因此在齿空间中切割槽,在两个齿轮中引入了模拟裂纹。 齿距是沿正齿轮的节圆测量的两个相邻齿之间的间隙。 槽深度约为齿轮半径的 70%。 引入齿轮G2和G3的故障后,共记录了10个故障数据集。

数据可视化

考虑一组健康和故障数据,可视化当前信号和转速脉冲

healthyData = servoData.healthyData{1,1};
faultyData = servoData.faultyData{1,1};
healthyCurrent = healthyData.Signal;
faultyCurrent = faultyData.Signal;
healthyTacho = healthyData.Pulse;
faultyTacho = faultyData.Pulse;
tHealthy = healthyData.Time;
tFaulty = faultyData.Time;

figure
ax1 = subplot(221);
plot(tHealthy,healthyCurrent)
title('Current Signal - Healthy Gears')
ylabel('Current (mA)')
ax2 = subplot(222);
plot(tFaulty,faultyCurrent)
title('Current Signal - Faulty Gears')
ylabel('Current (mA)')
ax3 = subplot(223);
plot(tHealthy,healthyTacho)
title('Tachometer Pulse - Healthy Gears')
ylabel('Pulses, 8/rev')
ax4 = subplot(224);
plot(tFaulty,faultyTacho)
title('Tachometer Pulse - Faulty Gears')
ylabel('Pulses, 8/rev')
linkaxes([ax1,ax2,ax3,ax4],'x');
ax1.XLim = seconds([0 2]);

输出花键每转八个脉冲,对应于伺服轮上的八个孔。

计算额定转速

计算额定速度,以检测齿轮系统中感兴趣的频率,并将其与功率谱上的频率正确匹配,感兴趣的频率是以Hz为单位的实际输出速度值。使用1500Hz的采样频率值,可视化转速计信号,并使用tachorpm函数计算额定转速。

fs = 1500;
figure
tachorpm(healthyTacho,fs,'PulsesPerRev',8)
figure
tachorpm(faultyTacho,fs,'PulsesPerRev',8)
rpmHealthy = mean(tachorpm(healthyTacho,fs,'PulsesPerRev',8))
rpmFaulty = mean(tachorpm(faultyTacho,fs,'PulsesPerRev',8))

rpmHealthy = 49.8550

rpmFaulty = 49.5267

在正常数据集和故障数据集之间,输出轴速度有非常小的差异。实际额定rpm值也接近理论值50 rpm。

构造频带

构造频带是计算频谱指标的重要前提。利用齿轮系中驱动齿轮的齿数和名义转数,首先计算感兴趣的频率,感兴趣的频率是以Hz为单位的实际输出速度值,其值接近下表中列出的理论值。

%齿数
G4 = 41; G3 = 35; G2 = 50; G1 = 62;
P4 = 16; P3 = 10; P2 = 10; P1 = 10;
rpm = rpmHealthy;
%感兴趣的频率
FS5 = mean(rpm)/60;
FS4 = G4/P4*FS5;
FS3 = G3/P3*FS4;
FS2 =  G2/P2*FS3;
FS1 =  G1/P1*FS2;
FS = [FS1,FS2,FS3,FS4,FS5]

接下来,使用faultBands函数构造所有输出速度的频带,其中包括以下感兴趣的频率。

FS1 at 231 Hz, its first two harmonics, and 0:1 sidebands of FS2

FS2 at 37.3 Hz, its first two harmonics, and 0:1 sidebands of FS3

FS3 at 7.5 Hz and its first two harmonics

FS4 at 2.1 Hz and its first two harmonics

[FB1,info1] = faultBands(FS1,1:2,FS2,0:1);
[FB2,info2] = faultBands(FS2,1:2,FS3,0:1);
[FB3,info3] = faultBands(FS3,1:2);
[FB4,info4] = faultBands(FS4,1:2);
FB = [FB1;FB2;FB3;FB4]

输出FB是一个16 × 2的数组,包含以上感兴趣的频率。

提取功率谱密度(PSD)数据

计算并可视化运行正常和故障数据的功率谱,利用结构信息中的信息在频谱图上绘制感兴趣的频率,并放大部分频率

蓝色表示正常频谱,红色表示故障数据频谱。从图中可以观察到故障频率振幅的增加:

1FS1 at 231 Hz, its second harmonic 2FS1 at 462 Hz, and their respective sidebands

放大图,观察以下频率的振幅增加情况:

1FS2 at 37.2 Hz and its sidebands

1FS3 at 7.5 Hz and its second harmonic 2FS3 at 15 Hz

1FS4 at 2.1 Hz and its second harmonic 2FS4 at 4.2 Hz

利用pspectrum函数分别计算健康信号和故障信号的PSD

[psdHealthy,fHealthy] = pspectrum(healthyCurrent,fs,'FrequencyResolution',0.5);
[psdFaulty,fFaulty] = pspectrum(faultyCurrent,fs,'FrequencyResolution',0.5);

计算频谱指标

使用频带数据和PSD数据,使用faultBandMetrics函数计算健康数据和故障数据的频谱指标

spectralMetrics = faultBandMetrics({[psdHealthy,fHealthy],[psdFaulty,fFaulty]},FB)

spectralMetrics=2×49 table
    PeakAmplitude1    PeakFrequency1    BandPower1    PeakAmplitude2    PeakFrequency2    BandPower2    PeakAmplitude3    PeakFrequency3    BandPower3    PeakAmplitude4    PeakFrequency4    BandPower4    PeakAmplitude5    PeakFrequency5    BandPower5    PeakAmplitude6    PeakFrequency6    BandPower6    PeakAmplitude7    PeakFrequency7    BandPower7    PeakAmplitude8    PeakFrequency8    BandPower8    PeakAmplitude9    PeakFrequency9    BandPower9    PeakAmplitude10    PeakFrequency10    BandPower10    PeakAmplitude11    PeakFrequency11    BandPower11    PeakAmplitude12    PeakFrequency12    BandPower12    PeakAmplitude13    PeakFrequency13    BandPower13    PeakAmplitude14    PeakFrequency14    BandPower14    PeakAmplitude15    PeakFrequency15    BandPower15    PeakAmplitude16    PeakFrequency16    BandPower16    TotalBandPower
    ______________    ______________    __________    ______________    ______________    __________    ______________    ______________    __________    ______________    ______________    __________    ______________    ______________    __________    ______________    ______________    __________    ______________    ______________    __________    ______________    ______________    __________    ______________    ______________    __________    _______________    _______________    ___________    _______________    _______________    ___________    _______________    _______________    ___________    _______________    _______________    ___________    _______________    _______________    ___________    _______________    _______________    ___________    _______________    _______________    ___________    ______________

      0.0020712           193.75         0.010881        0.50813            231.06         0.46652        0.0019579            272.5         0.011841       0.0020486           424.06         0.011225        0.54982               462         0.89544        0.0024293           493.69        0.0091045        0.002966           29.812        0.0035485        0.015582           37.25          0.011132       0.0028865           44.688        0.0041317        0.011896            67.062          0.0072753        0.059126             74.5           0.033568         0.013218                82          0.0079886         5.7904             7.4375           2.3115          0.068452            14.938          0.027653          0.79006             2.125           0.14382          0.09849             4.25            0.01806          3.9737    
       0.009804           192.44         0.017916         3.6921            229.44          2.9975        0.0035204           266.44         0.015639       0.0057056           421.75         0.019293         1.2974            459.69          3.2185        0.0053261           495.88         0.016296       0.0031674           28.938        0.0044271        0.023983              37          0.014447          0.0136           44.438        0.0089119        0.011419            66.625          0.0077035          0.0684               74           0.037016         0.012244            81.438          0.0075805         7.7931              7.375           3.0193           0.15692            14.812          0.058255           2.4211             2.125            0.4407          0.55167             4.25            0.10029          9.9838    

输出是FB中频率范围的一个2 × 49的指标表。第一行包含健康数据的指标,第二行包含故障数据的指标。注意,以下指标对于故障数据的值要比健康数据的值高得多:

PeakAmplitude2 for the frequency at 231 Hz with a difference of 3.1842 units

TotalBandPower with a difference of 6.01 units

因此,可以使用这两个指标创建散点图,分别对故障数据和健康数据进行分组。

创建散点图

创建散点图,使用表servoData中的所有20个数据集的两个谱指标PeakAmplitude2和TotalBandPower对健康数据和故障数据进行分类。

plotData = zeros(10,4);
for n = 1:max(size(servoData))
    hC = servoData.healthyData{n,1}.Signal;
    fC = servoData.faultyData{n,1}.Signal;
    
    [psdH,freqH] = pspectrum(hC,fs,'FrequencyResolution',0.5);
    [psdF,freqF] = pspectrum(fC,fs,'FrequencyResolution',0.5);
    
    sMetrics = faultBandMetrics({[psdH,freqH],[psdF,freqF]},FB);
    plotData(n,:) = [sMetrics{:,4}',sMetrics{:,49}'];
end
figure
scatter(plotData(:,1),plotData(:,3),[],'blue')
hold on;
scatter(plotData(:,2),plotData(:,4),[],'red')
legend('Healthy Data','Faulty Data','Location','best')
xlabel('Peak Amplitude 2')
ylabel('Total Band Power')
hold off

观察健康数据集和故障数据集被分组在散点图的不同区域。因此,通过分析伺服电机的电流特征,可以对故障和健康数据进行分类。

相关推荐

AI「自我复制」能力曝光,RepliBench警示:大模型正在学会伪造身份

科幻中AI自我复制失控场景,正成为现实世界严肃的研究课题。英国AISI推出RepliBench基准,分解并评估AI自主复制所需的四大核心能力。测试显示,当前AI尚不具备完全自主复制能力,但在获取资源...

【Python第三方库安装】介绍8种情况,这里最全看这里就够了!

**本图文作品主要解决CMD或pycharm终端下载安装第三方库可能出错的问题**本作品介绍了8种安装方法,这里最全的python第三方库安装教程,简单易上手,满满干货!希望大家能愉快地写代码,而不要...

pyvips,一个神奇的 Python 库!(pythonvip视频)

大家好,今天为大家分享一个神奇的Python库-pyvips。在图像处理领域,高效和快速的图像处理工具对于开发者来说至关重要。pyvips是一个强大的Python库,基于libvips...

mac 安装tesseract、pytesseract以及简单使用

一.tesseract-OCR的介绍1.tesseract-OCR是一个开源的OCR引擎,能识别100多种语言,专门用于对图片文字进行识别,并获取文本。但是它的缺点是对手写的识别能力比较差。2.用te...

实测o3/o4-mini:3分钟解决欧拉问题,OpenAI最强模型名副其实!

号称“OpenAI迄今为止最强模型”,o3/o4-mini真实能力究竟如何?就在发布后的几小时内,网友们的第一波实测已新鲜出炉。最强推理模型o3,即使遇上首位全职提示词工程师RileyGoodsid...

使用Python将图片转换为字符画并保存到文件

字符画(ASCIIArt)是将图片转换为由字符组成的艺术作品。利用Python,我们可以轻松实现图片转字符画的功能。本教程将带你一步步实现这个功能,并详细解释每一步的代码和实现原理。环境准备首先,你...

5分钟-python包管理器pip安装(python pip安装包)

pip是一个现代的,通用、普遍的Python包管理工具。提供了对Python包的查找、下载、安装、卸载的功能,是Python开发的基础。第一步:PC端打开网址:选择gz后缀的文件下载第二步:...

网络问题快速排查,你也能当好自己家的网络攻城狮

前面写了一篇关于网络基础和常见故障排查的,只列举了工具。没具体排查方式。这篇重点把几个常用工具的组合讲解一下。先有请今天的主角:nslookup及dig,traceroute,httping,teln...

终于把TCP/IP 协议讲的明明白白了,再也不怕被问三次握手了

文:涤生_Woo下周就开始和大家成体系的讲hadoop了,里面的每一个模块的技术细节我都会涉及到,希望大家会喜欢。当然了你也可以评论或者留言自己喜欢的技术,还是那句话,希望咱们一起进步。今天周五,讲讲...

记一次工控触摸屏故障的处理(工控触摸屏维修)

先说明一下,虽然我是自动化专业毕业,但已经很多年不从事现场一线的工控工作了。但自己在单位做的工作也牵涉到信息化与自动化的整合,所以平时也略有关注。上一周一个朋友接到一个活,一家光伏企业用于启动机组的触...

19、90秒快速“读懂”路由、交换命令行基础

命令行视图VRP分层的命令结构定义了很多命令行视图,每条命令只能在特定的视图中执行。本例介绍了常见的命令行视图。每个命令都注册在一个或多个命令视图下,用户只有先进入这个命令所在的视图,才能运行相应的命...

摄像头没图像的几个检查方法(摄像头没图像怎么修复)

背景描述:安防监控项目上,用户的摄像头运行了一段时间有部分摄像头不能进行预览,需要针对不能预览的摄像头进行排查,下面列出几个常见的排查方法。问题解决:一般情况为网络、供电、设备配置等情况。一,网络检查...

小谈:必需脂肪酸(必需脂肪酸主要包括)

必需脂肪酸是指机体生命活动必不可少,但机体自身又不能合成,必需由食物供给的多不饱和脂肪酸(PUFA)。必需脂肪酸主要包括两种,一种是ω-3系列的α-亚麻酸(18:3),一种是ω-6系列的亚油酸(18:...

期刊推荐:15本sci四区易发表的机械类期刊

  虽然,Sci四区期刊相比收录在sci一区、二区、三区的期刊来说要求不是那么高,投稿起来也相对容易一些。但,sci四区所收录的期刊中每本期刊的投稿难易程度也是不一样的。为方便大家投稿,本文给大家推荐...

be sick of 用法考察(be in lack of的用法)

besick表示病了,做谓语.本身是形容词,有多种意思.最通常的是:生病,恶心,呕吐,不适,晕,厌烦,无法忍受asickchild生病的孩子Hermother'sverysi...