Автор работы: Пользователь скрыл имя, 24 Января 2011 в 16:58, дипломная работа
Целью дипломной работы является применение методов цифровой обработки сигналов при диагностирования двигателя.  Диагностирование двигателя заключается  в анализе и обработке цифровых сигналов полученных с датчиков давления, вибрации и индуктивного датчика, определяющего положение коленчатого вала.
    Для достижения цели дипломной работы были поставлены следующие задачи:
          o Произвести обзор литературы по цифровой обработке сигналов,  принципам и устройству дизельного двигателя
          o Разработать методы диагностики с использованием цифровой обработки сигналов
          o Получить цифровые сигналы с датчиков, установленных на исправные и неисправные танковые дизельные  двигатели В-84, В-92
          o Провести анализ и поиск способа обработки полученных цифровых сигналов
          o Разработать алгоритм обработки цифровых сигналов с датчиков
          o Получить результат диагностирования дизельных двигателей В-84, В-92
          o Сделать выводы о проделанной работе.
Введение	3
Глава 1. Цифровая обработка сигнала	5
1.1	Понятие сигнала и его виды	5
1.2 Дискретное преобразование Фурье	9
1.3 Аналогово-цифровое и цифро-аналоговое преобразование	12
1.4 Цифровые фильтры	14
Глава 2. Цифровые методы диагностирования двигателя	18
2.1 Основные принципы и особенности работы дизельных двигателей	18
2.1.1 Воздушная система запуска двигателя	20
2.2 Метод вибродиагностики	22
2.3 Метод диагностирования цилиндропоршневой группы с использованием датчика давления	24
t:=YM[n4]-YM[n3];
YR[n3]:=r*u-t*v;
YM[n3]:=t*u+r*v;
YR[n4]:=p;
YM[n4]:=q;
i:=i+n1;
end;
w:=u*c-v*s;
v:=v*c+u*s;
u:=w;
end;
end;
j:=1;
for i:=1 to nSp-1 do
begin
if i<j then
begin
p:=YR[j];
q:=YM[j];
YR[j]:=YR[i];
YM[j]:=YM[i];
YR[i]:=p;
YM[i]:=q;
end;
k:=Trunc(nSp/2);
while k<j do
begin
j:=j-k;
k:=Trunc(k/2);
end;
j:=j+k;
end;
FY[1]:=YR[1]/nSp;
SP1[1]:=GGG; SP2[1]:=0; SP[1]:=GGG;
if FFT=1 then begin
for i:=2 to nSp do
begin
SP1[i]:=YR[i]*2;
SP2[i]:=YM[i]*2;
       SP[i]:=Sqrt(SP1[i]*SP1[i]+
end;
end else begin
for i:=1 to nSp do FY[i]:=YR[i]/nSp+GGG;
end;
end;
 
Исходный текст программы. Процедуры обработки сигналов с датчиков.
//Процедура обработки данных с датчика оборотов
procedure TForm1.N4Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N7Click(Sender: TObject);
var i,j,q,k,x, tmp,
oldmin, oldmax,
delta, deltat,
lmin,lmax,
Mmax,Mmin,Mnul, fmax,
window: integer;
flag: integer;
oborot: double;
Ex: array [1..100] of ArrEx1;
begin
j:=0;
oldmin:=0;
oldmax:=0;
lmin:=rAm[1];
lmax:=rAm[1];
fmax:=0;
Ex[1,1]:=1;
Ex[1,2]:=0;
// Нахождение максимумов и нулей сигнала для определения циклов двигателя
for q:=1 to 99 do
begin
Mmax:=rAm[17];
for i:=0 to cnt-1 do
begin
flag:=1;
for k:=1 to q do
begin
if ((i>=Ex[k,1]) and (i<=Ex[k,2])) then
begin
flag:=0;
break;
end;
end;
if flag=1 then
if rAm[i]>rAm[Mmax] then
begin
Mmax:=i;
end;
end; {cnt}
if fmax=0 then fmax:=Mmax;
flag:=0;
if rAm[Mmax]<rAm[fmax]*0.4 then flag:=1;
Data.Lines.Add('------------ '+IntToStr(q));
if flag=1 then break;
//Определение области данных из диапозона
for i:=Mmax to cnt-1 do
begin
if rAm[i]*rAm[i-1]<=0 then
begin
Mnul:=i;
              
Ex[q+1,2]:=Mmax+abs(2*(Mmax-
              
Ex[q+1,1]:=Mmax-abs(2*(Mmax-
ArrNul[q+1]:=Mnul;
break;
end;
end;
end; {q}
      ArrNulCnt:=q; 
//Сортировка массива нулей сигнала
while (flag=1) do
begin
flag:=0;
for j:=2 to q-1 do
begin
if ArrNul[j] > ArrNul[j+1] then
begin
tmp:=ArrNul[j]; ArrNul[j]:=ArrNul[j+1]; ArrNul[j+1]:=tmp;
flag:=1;
end;
end;
end;
      // 
Определение количества 
for j:=2 to q do
begin
Data.Lines.Add('Sorted_ArrNul '+IntToStr(ArrNul[j]));
          
oborot:=2*(9000*60)/abs(
Data.Lines.Add('обороты об мин '+FloatToStr(oborot));
end;
end; 
// Процедура обработки цифровых сигналов с датчика давления и вибрации
procedure TForm1.N9Click(Sender: TObject);
var LocalCnt,MaxP,MinP,i,j,n,
:integer;
point1x,point1y,
point2x,point2y,b,k:double;
pointX,pointY: Array [1..2] of double;
ArrNulP: Array [1..10000] of integer;
ArrP,ArrMinD,ArrMaxD: Array [1..100] of integer;
tf:textFile;
begin
n:=1;
oldn:=2;
x:=1;
for j:=2 to ArrNulCnt-1 do
begin
          
LocalCnt:=abs(ArrNul[j]-
MaxP:=ArrNul[j];
MinP:=ArrNul[j];
for i:=ArrNul[j] to ArrNul[j]+(2*LocalCnt div 12) do
begin
if pAm[MaxP]<pAm[i] then MaxP:=i;
if pAm[MinP]>pAm[i] then MinP:=i;
end;
          
point1y:=(pAm[MaxP]+pAm[MinP])
point1x:=(MaxP+MinP)/2;
MaxP:=ArrNul[j+1];
MinP:=ArrNul[j+1];
for i:=ArrNul[j+1]-(2*LocalCnt div 12) to ArrNul[j+1] do
begin
if pAm[MaxP]<pAm[i] then MaxP:=i;
if pAm[MinP]>pAm[i] then MinP:=i;
end;
          
point2y:=(pAm[MaxP]+pAm[MinP])
point2x:=(MaxP+MinP)/2;
          
b:=((point2y*point1x)-(
k:=(point1y-b)/point1x;
          
series5.addxy(ArrNul[j],(k*
          
series5.addxy(ArrNul[j+1],(k*
for i:=ArrNul[j] to ArrNul[j+1] do
begin
            
if ((pAm[i]-((k*i)+b))*(pAm[i+1]-
begin
ArrNulP[n]:=i;
n:=n+1;
end;
end;
          
range:=abs(ArrNul[j+1]-ArrNul[
Data.Lines.Add('n= '+IntToStr(n));
d1:=1;
d2:=1;
for q:=oldn-1 to n-1 do
begin
              
if abs(ArrNulP[q-1]-ArrNulP[q])>=
begin
Data.Lines.Add('diapozon '+IntToStr(ArrNulP[q-1])+' '+IntToStr(ArrNulP[q]));
ArrP[x]:=ArrNulP[q]; //filtered null
if x>1 then
begin
                            
Data.Lines.Add('znak  '+FloatToStr(pAm[ArrP[x-1]+2]-
                            
if  pAm[ArrP[x-1]+range-1]-(k*(
begin
                              
                              
                              
                              
                              
                              
end
else
begin
                              
                              
                              
                              
                              
                              
end;
end;
x:=x+1;
end; //if range
end; //for q
oldn:=n;
      end; 
{j} 
 
 
 
 
 
 
 
 
 
 
 
 
Информация о работе Применение методов цифровой обработки сигналов при диагностировании двигателей