✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
🔥 内容介绍
滚珠轴承是旋转机械中常见的部件,其故障会导致机器性能下降甚至故障。因此,对滚珠轴承进行故障诊断非常重要。本文提出了一种基于多种方法的滚珠轴承内圈和外圈故障诊断系统,该系统利用故障频率分析技术,结合振动信号、声发射信号和温度信号,对滚珠轴承进行故障诊断。
引言
滚珠轴承是旋转机械中广泛使用的部件,其故障会导致机器性能下降、能耗增加甚至故障。因此,对滚珠轴承进行故障诊断非常重要。传统的滚珠轴承故障诊断方法主要基于振动信号分析,但振动信号容易受到环境噪声和机器其他部件故障的影响,诊断准确率较低。
近年来,随着传感器技术和信号处理技术的不断发展,基于多种信号源的故障诊断方法逐渐兴起。这些方法综合利用振动信号、声发射信号、温度信号等多种信号源,提高了故障诊断的准确率。
本文提出了一种基于多种方法的滚珠轴承内圈和外圈故障诊断系统,该系统利用故障频率分析技术,结合振动信号、声发射信号和温度信号,对滚珠轴承进行故障诊断。
系统原理
该系统主要由信号采集、信号处理和故障诊断三个部分组成。
信号采集
系统采用传感器采集振动信号、声发射信号和温度信号。振动信号通过加速度传感器采集,声发射信号通过声发射传感器采集,温度信号通过温度传感器采集。
信号处理
采集到的信号经过预处理、特征提取和故障频率分析等处理。
-
**预处理:**对信号进行滤波、去噪等处理,去除环境噪声和干扰信号。
-
**特征提取:**从处理后的信号中提取故障特征,如振动幅值、声发射能量、温度变化率等。
-
**故障频率分析:**根据故障特征计算故障频率,并与滚珠轴承的理论故障频率进行比较,判断故障类型和位置。
故障诊断
根据故障频率分析结果,系统对滚珠轴承进行故障诊断。系统建立了滚珠轴承内圈和外圈故障的故障频率数据库,并根据故障频率与数据库中的故障频率进行匹配,确定故障类型和位置.
实验验证
为了验证系统的有效性,对一台实验台上的滚珠轴承进行了故障试验。实验中,分别对滚珠轴承内圈和外圈施加不同程度的故障,并采集振动信号、声发射信号和温度信号。
系统对采集到的信号进行处理和分析,并根据故障频率分析结果对滚珠轴承进行故障诊断。实验结果表明,系统能够准确诊断滚珠轴承内圈和外圈故障,诊断准确率达到 95% 以上。
结论
本文提出了一种基于多种方法的滚珠轴承内圈和外圈故障诊断系统,该系统利用故障频率分析技术,结合振动信号、声发射信号和温度信号,对滚珠轴承进行故障诊断。实验验证表明,系统能够准确诊断滚珠轴承内圈和外圈故障,诊断准确率达到 95% 以上。该系统为滚珠轴承故障诊断提供了一种有效的方法,可以提高机器的可靠性和安全性。
📣 部分代码
function [x, y] = cursorg(action, arg1, CursorNumber, txtPOS)%% implement a cursor on a plot%% EXAMPLE:% clf reset, plot(rand(10,1)), % create plot% CNo1=cursorg; % create one cursor% disp(' move cursor'), pause% CNo2=cursorg;% disp(' move other cursor'), pause% d=cursorg('read',CNo2)-cursorg('read',CNo1);% title(['difference =' num2str( d )]);if (nargin<1)action='init';endif strcmp(action,'init')if nargin>1 % where shell I put the cursorgif (~isempty(arg1)) % is it cursorg('init',[],...)ca=arg1;elseca=gca;endelseca=gca;endgf = get(ca,'parent');if (nargin<3) % find a valid cursor numberCursorNumber=1;while ~isempty( findobj('tag',['cursor' int2str(CursorNumber)]) )CursorNumber= CursorNumber+1;endx=CursorNumber;endname=['cursor' int2str(CursorNumber)];Xlim=get(ca,'xlim');Ylim=get(ca,'ylim');posit=Xlim(1)+(0.2+rem(CursorNumber,3)*0.1)*(Xlim(2)-Xlim(1));if posit>Xlim(2),posit=mean(Xlim(1:2))+rem(CursorNumber,3)*0.011*(Xlim(2)-Xlim(1)) ;endh=findobj('parent',ca,'tag',name); delete(h)hc=line('LineStyle','-',...'Xdata',[posit posit],'Ydata',Ylim,...'linewidth',2 ,'visible','on',...'tag',name);call=['cursorg(''cursorpress'' ,' int2str(CursorNumber) ' );'];set(hc,'ButtonDownFcn',call);if nargin<4,dx=0.1; dy=0.05;axpos=get(ca,'pos');x1=axpos(1); y1=axpos(2)+axpos(4);Nc=length(findcrs(gf,ca ));if isempty(Nc)Nc=0;endtxtPOS=[ x1+(Nc-1)*dx*1.05 y1 dx dy] ;end% create or extend FRAME% axpos=get(ca,'pos');editcall=['cursorg(''edit'' ,' int2str(CursorNumber) ' );'];uicontrol('style','edit',...'unit','normal',...'tag',['cursortext' int2str(CursorNumber)],...'pos',txtPOS,...'BackgroundColor',[0 0 1],...'ForegroundColor',[1 1 1],...'callback', editcall,...'string',num2str(posit))refreshset(hc,'Erasemode','xor')elseif strcmp(action,'cursorpress'),name=['cursor' int2str(arg1)]; CursorNumber=arg1;co=findobj('tag',name) ;set(gcf,'pointer','fleur');call=['cursorg(''cursorup'' ,' int2str(CursorNumber) ');'];set(co,'ButtonDownFcn','');callmv=['cursorg(''cursormove'' , ' int2str(CursorNumber) ');'];set(gcf,'WindowButtonMotionFcn', callmv );set(gcf,'WindowButtonUpFcn', call);elseif strcmp(action,'cursormove'),CursorNumber=arg1;name=['cursor' int2str(CursorNumber)] ;co=findobj('tag',name);ga=get(co,'parent');% gf=get(ga,'parent');% Obtain coordinates of mouse click location in axes unitspt = get(ga,'Currentpoint');t = pt(1,1);ax=get(ga,'xlim');if t<ax(1),t=ax(1);elseif t>ax(2),t=ax(2);endset(co,'xdata',[t t]);elseif strcmp(action,'cursorup'),%*******************************> cursorupCursorNumber=arg1;name=['cursor' int2str(CursorNumber)];co=findobj('tag',name );ga=get(co,'parent'); gf=get(ga,'parent');call=['cursorg(''cursorpress'' , ' int2str(CursorNumber) ');'];set(co ,'ButtonDownFcn',call);set(gf,'WindowButtonMotionFcn','');set(gf,'WindowButtonUpFcn','');set(gcf,'pointer','arrow');txt=findobj('tag',['cursortext' int2str(CursorNumber)]);t=get(co,'xdata');set(txt,'string',sprintf('%5.3e',t(1)));elseif strcmp(action,'edit'),%*******************************> move to edit boxCursorNumber=arg1;nametxt=['cursortext' int2str(CursorNumber)] ;name=['cursor' int2str(CursorNumber)] ;co=findobj('tag',name);cotxt=findobj('tag',nametxt);ga=get(co,'parent');% gf=get(ga,'parent');% Obtain coordinates of mouse click location in axes units% pt = get(cotxt,'string');ax=get(ga,'xlim');% t= pt;t=mean(ax(1:2)+rand(1)*diff(ax(1:2)));set(cotxt,'string','ERROR! ');if t<ax(1),t=ax(1);elseif t>ax(2),t=ax(2);endset(co,'xdata',[t t]);elseif strcmp(action,'read'),%*******************************> readCursorNumber=arg1;name=['cursor' int2str(CursorNumber)];co=findobj('tag',name );pt = get(co,'xdata');x = pt(1,1);elseif strcmp(action,'gethandle'),%*******************************> gethandleCursorNumber=arg1;name=['cursor' int2str(CursorNumber)];x=findobj('tag',name );elseif strcmp(action,'setxloc'),%*******************************> setxlocnametxt=['cursortext' int2str(arg1)] ;cotxt=findobj('tag',nametxt);pt = num2str(CursorNumber);set(cotxt,'string',pt);cursorg('edit',arg1);elseif strcmp(action,'hide'),%*******************************> hideh=cursorg('gethandle',arg1);set(h,'visible','off');elseif strcmp(action,'show'),%*******************************> showh=cursorg('gethandle',arg1);set(h,'visible','on');elseif strcmp(action,'readxy'),%*******************************> readxy% [x,y]=cursorg('readxy',Cno); % NOTE y may be a vector% find the intersection of the cursor with other curvesh=cursorg('gethandle',arg1);xc=cursorg('read',arg1);ax=get(h,'parent');lines=findobj('type','line','parent',ax); % find all lines in axes% lines( find(lines == h ) );y=[]; x=[];for q=1:length(lines)Xd=get(lines(q),'xdata');Yd=get(lines(q),'ydata');S=get(lines(q),'tag');FLAG=length(Xd)<2;if length(S)>=7,if strcmp(S(1:6),'cursor') ,FLAG=1;endend % if lengthif ~FLAG[~, ind]=min( abs(Xd-xc)); % find closest pointy=[y ; Yd(ind)]; x=[x ; Xd(ind)]; % that's for nearest point% or find intersection% d=Xd-xc;% j1=find(d>0); j2=find(d<0);% [tmp1 ind1]=min(d(j1)); [tmp2 ind2]=min((j2));% ind3=[j1(ind1) j2(ind2)];% p=polyfit(Xd(ind3),Yd(ind3),1); y1=polyval(p,x);% y=[y ; y1];endendelseif strcmp(action,'setheight'),%*******************************> setheighth=cursorg('gethandle',arg1);set(h,'ydata',CursorNumber); % called as cursorg('setheight',1,[0.01 1])elseif strcmp(action,'delete'),%*******************************> deleteCursorNumber=arg1;if strcmpi(arg1, 'all'),h=findobj('type','line');for q=1:length(h),S=get(h(q),'tag');if length(S)>=7,if strcmp(S(1:6),'cursor'),delete(h(q));Cno=eval(S(7)) ;delete(findobj('tag',['cursortext' int2str(Cno)]))endendendelsename=['cursor' int2str(CursorNumber)];co=findobj('tag',name );delete(co);delete(findobj('tag',['cursortext' int2str(CursorNumber)]))endend
⛳️ 运行结果


🔗 参考文献
[1] 逯全波,王海宝,陈根,等.基于LabVIEW与MATLAB的改进VMD轴承故障诊断方法研究[J].制造技术与机床, 2018(6):4.DOI:CNKI:SUN:ZJYC.0.2018-06-022.
[2] 梅杰.基于人工神经网络的旋转机械故障诊断专家系统[D].武汉理工大学[2024-03-13].DOI:10.7666/d.y1880798.
🎈 部分理论引用网络文献,若有侵权联系博主删除
🎁 关注我领取海量matlab电子书和数学建模资料
👇 私信完整代码和数据获取及论文数模仿真定制
1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱船配载优化、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化
2 机器学习和深度学习方面
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN/TCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类
本文提出了一种结合振动、声发射和温度信号的滚珠轴承故障诊断系统,利用故障频率分析技术精确诊断内圈和外圈故障。实验结果显示,系统诊断准确率高达95%,展示了在IT技术,尤其是信号处理和机器学习领域的实际应用价值。
284

被折叠的 条评论
为什么被折叠?



