Этот пример показов, как идентифицировать отказы в train передач с помощью анализа сигнатуры тока двигателя (MCSA) текущего сигнала, управляющего сервоприводом уровня хобби. MCSA является полезным методом для диагностики отказов, которые вызывают крутящий момент или колебания скорости, и было доказано, что он идеален для анализа отказа двигателя. Обнаружение отказа передачи с помощью традиционных инструментов вибрации является сложной задачей, особенно в тех случаях, когда train передачи не легко доступны для инструментирования с акселерометрами или другими датчиками вибрации, такими как внутренние работы степени ядерного объекта. Этот пример иллюстрирует, как применить анализ сигнатур тока для извлечения спектральных метрик, чтобы обнаружить отказы в приводных передачах сервопривода хобби-класса. Упрощенный рабочий процесс получения спектральных метрик из текущего сигнала следующий:
Вычислите номинальную частоту вращения для обнаружения интересующих частот.
Создайте полосы частот, где могут присутствовать сигналы отказа.
Извлечение степени спектральной плотности (PSD).
Вычислите спектральные метрики в интересующих полосах.
В этом примере данные электрического тока были собраны со стандартного сервопривода Futaba S3003 hobby, который был изменен для непрерывного вращения. Сервоприводы преобразуют высокую скорость внутреннего двигателя постоянного тока в высокий крутящий момент на выход сплайне. Для этого сервоприводы состоят из двигателя постоянного тока, набора нейлоновых или металлических ведущих передач и схемы управления. Схема управления была удалена, чтобы позволить непосредственно контролировать сигнал тока на двигатель постоянного тока. Сигнал тахометра на выход сплайне сервопривода был собран с помощью инфракрасного фотоинтерруптора вместе с восьмиотверстием диаметром 35 мм. Восемь отверстий в колесе были равномерно разнесены, и ИК-фотоинтерруптор был помещен таким образом, чтобы на вращение рупора сервопривода приходилось ровно восемь импульсов. Сервопривод и фотоинтерруптор удерживались на месте пользовательскими 3-D печатными установками.
Двигатель постоянного тока вращался на постоянной 5 вольтах, и с четырьмя парами передач, обеспечивающих снижение скорости 278:1, скорость вала в сплайне составляла около 50 об/мин. Потребление тока вычисляли по закону Ом путем измерения падения напряжения на резисторе 0,5 Ом. Поскольку изменение значений измерения тока было слишком маленьким для обнаружения, токовый сигнал был усилен с помощью одного усилителя интерфейса датчика питания. Усиленный токовый сигнал затем фильтровали с помощью сглаживающего эллиптического lowpass фильтра пятого порядка, чтобы сглаживать его и устранять шум перед отправкой его в Arduino Uno через аналого-цифровой преобразователь (АЦП).
Как показывает блок-схема, токовый сигнал был сначала усилен и фильтрован с помощью усилителя и сглаживающего lowpass, соответственно. Arduino Uno дискретизировал текущий сигнал через АЦП на 1,5 кГц и передал его в компьютер вместе с импульсами тахометра в качестве последовательных данных со скоростью 115200 бод. Скрипт MATLAB взял последовательные данные из Arduino Uno и записал их в файл с разделенными запятыми значениями (CSV). Файлы CSV затем считывали и обрабатывали, используя MATLAB, чтобы извлечь спектральные метрики.
Сервопривод S3003 Futaba состоит из четырех пар нейлоновых передач, как показано на приведенном выше рисунке. Шестерня, P1 на валу двигателя постоянного тока, зацепляется со ступенчатой шестерней G1. Шестерня P2 является отформованной частью ступенчатой зубчатой G1 и зацепляется со ступенчатой зубчатой G2. Шестерня P3, которая является отформованной частью зубчатой G2, зацепляется со ступенчатой шестерней G3. Шестерня P4, которая отформована с G3, зацепляется с конечным зубчатым G4, который крепится к выходу сплайну. Ступенчатая передача устанавливает G1 и P2, G2 и P3, а G3 и P4 являются бесплатными вращающимися шестернями то есть они не прикреплены к соответствующим валам. Набор приводных передач обеспечивает сокращение 278:1 от скорости двигателя 13901 об/мин до приблизительно 50 об/мин на выход сплайне, когда двигатель вращается на 5 вольт. В следующей таблице описаны количество зубьев и теоретические значения скорости выхода, частоты mesh передачи и совокупного сокращения передач на каждом mesh передачи.
Всего было собрано 10 исправных наборов данных перед внедрением отказов в G2 и G3 ступенчатых передач. Поскольку передачи были отформованы из нейлона, имитированные трещины были введены в обе передачи путем резки пазов в зубчатом пространстве хобби ножом. Пространство зубьев представляет собой зазор между двумя смежными зубьями, измеренный по окружности тангажа цилиндрической шестерни. Глубины паза составляли около 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 об/мин как для анализа исправного, так и для анализа неисправного сигнала.
Построение полос частот является важным необходимым условием для вычисления спектральных метрик. Используя количество зубьев ведущих передач в зубчатом train и номинальные обороты в минуту, сначала вычислите интересующие вас частоты. Интересующие частоты являются фактическими значениями выходной скорости в герцах, значения которых близки к теоретическим значениям, перечисленным в таблице ниже.
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 Гц, его первые две гармоники и боковые полосы FS3 0:1
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.
Функция помощника helper
P- lotXLines
использует информацию в структуре 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] Мостер, P.C. «Обнаружение отказа передачи и классификация с использованием обучающих машин». Звук и вибрация. 38. 22-27. 2004
Classification Learner | faultBandMetrics
| faultBands
| pspectrum