В этом примере показано, как идентифицировать неисправности в зубчатой передаче с помощью анализа сигнатуры тока двигателя (MCSA) сигнала тока, приводящего в действие серводвигатель хобби-класса. MCSA является полезным методом диагностики неисправностей, которые вызывают колебания крутящего момента или скорости, и доказано, что он идеально подходит для анализа неисправностей двигателя. Обнаружение неисправности зубчатой передачи с помощью традиционных вибрационных приборов является сложной задачей, особенно в тех случаях, когда зубчатая передача не является легкодоступной для контрольно-измерительных приборов с акселерометрами или другими вибрационными датчиками, такими как внутренние работы атомной электростанции. Этот пример иллюстрирует применение текущего анализа сигнатур для извлечения спектральных метрик для обнаружения неисправностей в приводных передачах серводвигателя хобби-класса. Упрощенный рабочий процесс для получения спектральных метрик из текущего сигнала выглядит следующим образом:
Вычислить номинальную частоту вращения для определения интересующих частот.
Построение частотных диапазонов, в которых могут присутствовать сигналы отказа.
Извлеките данные спектральной плотности мощности (PSD).
Вычисляют спектральные метрики в интересующих диапазонах частот.

Для этого примера данные электрического тока собирали из стандартного сервопривода для хобби Futaba S3003, который был модифицирован для непрерывного вращения. Сервоприводы преобразуют высокую скорость внутреннего двигателя постоянного тока в высокий крутящий момент на выходном шлице. Для этого сервоприводы состоят из двигателя постоянного тока, набора нейлоновых или металлических приводных шестерен и схемы управления. Цепь управления была удалена, чтобы обеспечить непосредственный контроль сигнала тока на электродвигателе постоянного тока. Сигнал тахометра на выходном шлице сервопривода собирали с помощью инфракрасного фотоинтерруптора вместе с восьмиступенчатым стандартным серводвигателем диаметром 35 мм. Восемь отверстий в колесе были расположены на равном расстоянии друг от друга, и ИК-фотоинтерруптор был размещен таким образом, что на вращение рупора сервоколеса приходилось ровно восемь импульсов. Серво- и фотоинтерруптор удерживались на месте с помощью специальных 3-D печатных креплений.

Двигатель постоянного тока приводился в движение при постоянных 5 вольтах, а при четырёх парах шестерен, обеспечивающих снижение скорости 278:1, скорость вала на шлице составляла около 50 об/мин. Потребление тока рассчитывали, используя закон Ома, измеряя падение напряжения на резисторе 0,5 Ом. Поскольку изменение значений измерения тока было слишком малым для обнаружения, сигнал тока усиливался с помощью усилителя интерфейса с одним источником питания. Усиленный токовый сигнал затем фильтровали с использованием сглаживающего эллиптического фильтра пятого порядка нижних частот для его сглаживания и устранения шума перед отправкой его на Arduino Uno через аналого-цифровой преобразователь (АЦП).

Как показано на блок-схеме, сигнал тока сначала усиливали и фильтровали с использованием усилителя и сглаживающего фильтра нижних частот соответственно. Arduino Uno произвел выборку текущего сигнала через АЦП на частоте 1,5 кГц и направил его в компьютер вместе с импульсами тахометра в виде последовательных данных со скоростью 115200 бод. Сценарий MATLAB извлекал последовательные данные из Arduino Uno и записывал их в CSV-файл. CSV-файлы затем считывались и обрабатывались с использованием MATLAB для извлечения спектральных метрик.

Сервопривод Futaba S3003 состоит из четырех пар нейлоновых передач, как показано на приведенном выше рисунке. Шестерня, P1 на валу двигателя постоянного тока, входит в зацепление со ступенчатой шестерней G1. Шестерня P2 является формованной частью ступенчатой шестерни G1 и входит в зацепление со ступенчатой шестерней G2. Шестерня P3, являющаяся формованной частью шестерни G2, входит в зацепление со ступенчатой шестерней G3. Шестерня P4, отформованная из G3, входит в зацепление с конечной зубчатой G4, которая прикреплена к выходному шлицу. Ступенчатые зубчатые передачи G1 и P2, G2 и P3, а также G3 и P4 являются свободными вращающимися шестернями то есть не прикреплены к своим соответствующим валам. Набор приводных шестерен обеспечивает уменьшение 278:1 от скорости двигателя 13901 об/мин до приблизительно 50 об/мин на выходном шлице, когда двигатель приводится в действие при 5 вольтах. В следующей таблице представлены количество зубьев и теоретические значения выходной скорости, частот зубчатой сетки и совокупного редуктора на каждой зубчатой решетке.

До появления неисправностей в ступенчатых передачах G2 и G3 было собрано в общей сложности 10 здоровых наборов данных. Поскольку зубчатые колеса были отформованы из нейлона, в обе шестерни были введены имитационные трещины путем разрезания прорезей в пространстве зубьев хобби-ножом. Зубчатое пространство представляет собой зазор между двумя соседними зубьями, измеренный вдоль начальной окружности цилиндрического зубчатого колеса. Глубина щели составляла около 70 процентов радиуса зубчатой передачи. Всего было зафиксировано 10 неисправных наборов данных после введения неисправностей в передачи G2 и G3.

Файл mcsaData.mat содержит servoData, таблица расписаний 10 на 2, где каждое расписание соответствует одному набору данных. Первый столбец servoData содержит 10 расписаний здоровых данных, в то время как второй столбец содержит 10 расписаний неисправных данных. Каждый набор данных содержит около 11 секунд данных, отобранных при 1500 Гц.
Загрузите данные.
load('mcsaData.mat','servoData') servoData
servoData=10×2 table
healthyData faultyData
___________________ ___________________
{16384x2 timetable} {16384x2 timetable}
{16384x2 timetable} {16384x2 timetable}
{16384x2 timetable} {16384x2 timetable}
{16384x2 timetable} {16384x2 timetable}
{16384x2 timetable} {16384x2 timetable}
{16384x2 timetable} {16384x2 timetable}
{16384x2 timetable} {16384x2 timetable}
{16384x2 timetable} {16384x2 timetable}
{16384x2 timetable} {16384x2 timetable}
{16384x2 timetable} {16384x2 timetable}
head(servoData.healthyData{1,1})ans=8×2 timetable
Time Pulse Signal
______________ _____ ______
0 sec 0 66.523
0.00066667 sec 0 62.798
0.0013333 sec 0 63.596
0.002 sec 0 64.128
0.0026667 sec 0 60.669
0.0033333 sec 0 62.798
0.004 sec 0 65.459
0.0046667 sec 0 56.678
Каждое расписание в servoData содержит один набор данных с сигналом тахометра в первом столбце и текущим сигналом во втором столбце.
В этом примере рассмотрим по одному набору здоровых и неисправных данных и визуализируйте текущий сигнал и импульсы тахометра.
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]);
Выходной шлиц сервопривода имеет восемь импульсов на вращение, соответствующих восьми отверстиям на сервоприводе.
Вычислите номинальную скорость, чтобы определить интересующие частоты в зубчатой системе и правильно сопоставить их с частотами на спектрах мощности. Используя значение частоты дискретизации 1500 Гц, визуализируйте сигнал тахометра и вычислите номинальную частоту вращения с помощью tachorpm.
fs = 1500;
figure
tachorpm(healthyTacho,fs,'PulsesPerRev',8)
figure
tachorpm(faultyTacho,fs,'PulsesPerRev',8)
rpmHealthy = mean(tachorpm(healthyTacho,fs,'PulsesPerRev',8))rpmHealthy = 49.8550
rpmFaulty = mean(tachorpm(faultyTacho,fs,'PulsesPerRev',8))rpmFaulty = 49.5267
Обратите внимание, что существует очень небольшая разница в частоте вращения выходного вала между исправными и неисправными наборами данных. Фактические номинальные значения частоты вращения также близки к теоретическому значению 50 об/мин. Следовательно, рассмотрим одно и то же значение 49,9 об/мин для анализа здоровых и неисправных сигналов.
Построение полос частот является важной предпосылкой для вычисления спектральных метрик. Используя количество зубьев ведущих шестерен в зубчатой передаче и номинальную частоту вращения, сначала вычислите интересующие частоты. Представляющими интерес частотами являются фактические значения выходной скорости в герцах, значения которых близки к теоретическим значениям, перечисленным в таблице ниже.

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]
FS = 1×5
231.0207 37.2614 7.4523 2.1292 0.8309
Затем создайте полосы частот для всех выходных скоростей, которые включают в себя следующие частоты, представляющие интерес, используя faultBands.
FS1 на частоте 231 Гц, его первых двух гармониках и 0:1 боковых полосах FS2
FS2 при 37,3 Гц, его первых двух гармониках и 0:1 боковых полосах FS3
FS3 при 7,5 Гц и его первых двух гармониках
FS4 при 2,1 Гц и его первых двух гармониках
[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
187.9838 199.5348
225.2452 236.7962
262.5066 274.0577
419.0045 430.5556
456.2659 467.8170
493.5273 505.0784
28.8776 30.7407
36.3299 38.1929
43.7822 45.6452
66.1390 68.0021
⋮
Продукция FB представляет собой массив диапазонов частот 16 на 2 для этих интересующих частот.
Вычислите и визуализируйте спектр мощности здоровых и неисправных данных. Также постройте график интересующих частот на графике спектра с использованием информации в структуре info.
figure pspectrum(healthyCurrent,fs,'FrequencyResolution',0.5) hold on pspectrum(faultyCurrent,fs,'FrequencyResolution',0.5) hold on info1.Labels = regexprep(info1.Labels,'F0','FS1'); info1.Labels = regexprep(info1.Labels,'F1','FS2'); helperPlotXLines(info1,[0.5 0.5 0.5]) info2.Labels = regexprep(info2.Labels,'F0','FS2'); info2.Labels = regexprep(info2.Labels,'F1','FS3'); helperPlotXLines(info2,[0.5 0.5 0.5]) info3.Labels = regexprep(info3.Labels,'F0','FS3'); helperPlotXLines(info3,[0.5 0.5 0.5]) info4.Labels = regexprep(info4.Labels,'F0','FS4'); helperPlotXLines(info4,[0.5 0.5 0.5]) legend('Healthy Data','Faulty Data','Location','South') hold off

График синим цветом указывает здоровый спектр, в то время как график красным цветом указывает спектр неисправных данных. По графику наблюдать увеличение амплитуд частот отказов:
1FS1 на частоте 231 Гц, его вторая гармоника 2FS1 на частоте 462 Гц и соответствующие боковые полосы
Увеличьте изображение графика, чтобы увидеть увеличение амплитуд следующих оставшихся частот:
1FS2 при 37,2 Гц и его боковых полосах
1FS3 на частоте 7,5 Гц и его вторая гармоническая 2FS3 на частоте 15 Гц
1FS4 на частоте 2,1 Гц и его вторая гармоническая 2FS4 на частоте 4,2 Гц

Использовать 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.002071 193.75 0.010883 0.50813 231.06 0.46652 0.0019579 272.5 0.01184 0.0020489 424.06 0.011224 0.54985 462 0.8955 0.0024297 493.69 0.0091051 0.0029648 29.812 0.0035477 0.015581 37.25 0.011131 0.0028858 44.688 0.0041316 0.011896 67.062 0.0072763 0.059124 74.5 0.033566 0.013218 82 0.007988 5.7905 7.4375 2.3115 0.068452 14.938 0.027653 0.79002 2.125 0.14381 0.098478 4.25 0.018058 3.9737
0.0098034 192.44 0.017915 3.6923 229.44 2.9976 0.0035208 266.44 0.015639 0.005705 421.75 0.019292 1.2974 459.69 3.2184 0.0053275 495.88 0.016296 0.0031679 28.938 0.004428 0.023981 37 0.014445 0.0136 44.438 0.0089112 0.01142 66.625 0.0077036 0.068403 74 0.037017 0.012242 81.438 0.0075801 7.7931 7.375 3.0192 0.15693 14.812 0.058259 2.4212 2.125 0.44071 0.55162 4.25 0.10029 9.9837
Выходные данные представляют собой таблицу показателей 2 на 49 для частотных диапазонов в FB. Первая строка содержит метрики для здоровых данных, в то время как вторая строка содержит ошибочные метрики данных. Обратите внимание, что следующие показатели имеют значительно более высокие значения для неисправных данных, чем для здоровых данных:
PeakAmplitude2 для частоты на 231 Гц с разницей 3,1842 ед.
TotalBandPower с разницей 6,01 ед.
Следовательно, используйте эти две метрики, чтобы создать график рассеяния, чтобы сгруппировать неисправные и исправные наборы данных по отдельности.
Создание графика рассеяния для классификации здоровых и неисправных данных с использованием двух спектральных метрик PeakAmplitude2 и TotalBandPower для всех 20 наборов данных в таблице servoData.
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

Обратите внимание, что исправные наборы данных и неисправные наборы данных сгруппированы в различных областях графика рассеяния.
Следовательно, можно классифицировать неисправные и исправные данные, анализируя текущую сигнатуру сервопривода.
Чтобы использовать все доступные спектральные метрики для классификации, используйте Classification Learner.
Вспомогательная функция helperPlotXLines использует информацию в структуре info для построения графика центральных линий полосы частот на графике спектра мощности.
function helperPlotXLines(I,c) for k = 1:length(I.Centers) xline(I.Centers(k),'Label',I.Labels(k),'LineStyle','-.','Color',c); end end
[1] Moster, P.C. «Обнаружение и классификация отказов передач с использованием учебных машин». Звук и вибрация. 38. 22-27. 2004