|
Разработка системы самоконтроля аналого цифрового преобразователя
program
ADC_model_fixed_1;
uses
crt;
type
o=array[1
.. 100,1 .. 100] of integer;
q=array[1
.. 100] of boolean;
w=array[1
.. 9] of boolean; { 9 - enabled input }
var
data : q;
error:o;
in_data :w;
i,j,e,n,x_coor,max,orig,a,s,d,counter:integer;
test1_comp,test3_comp:boolean;
const
t=true;
f=false;
{-----------------------------------------------------------------------}
procedure
clear_array;
begin
for i:=1 to 100 do data[i]:=f; {if t then
error }
end;
{-----------------------------------------------------------------------}
procedure
set_in_data1;
begin
test3_comp:=t;
test1_comp:=f;
in_data[1]:=f;
in_data[2]:=f;
in_data[3]:=f;
in_data[4]:=f;
in_data[5]:=f;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data2;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=f;
in_data[3]:=f;
in_data[4]:=f;
in_data[5]:=f;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data3;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=f;
in_data[4]:=f;
in_data[5]:=f;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data4;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=t;
in_data[4]:=f;
in_data[5]:=f;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data5;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=t;
in_data[4]:=t;
in_data[5]:=f;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data6;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=t;
in_data[4]:=t;
in_data[5]:=t;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data7;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=t;
in_data[4]:=t;
in_data[5]:=t;
in_data[6]:=t;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data8;
begin
test3_comp:=f;
test1_comp:=t;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=t;
in_data[4]:=t;
in_data[5]:=t;
in_data[6]:=t;
in_data[7]:=t;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_error;
begin
data[e]:=t;
e:=e+1;
end;
{-----------------------------------------------------------------------}
procedure
fixed_false_test;
begin
{first_line}
if data[1]=true
then data[1]:=t else
data[1]:=not(in_data[2]);
if
data[2]=true then data[2]:=t else
data[2]:=not(in_data[3]);
if
data[3]=true then data[3]:=t else
data[3]:=not(in_data[4]);
if
data[4]=true then data[4]:=t else
data[4]:=not(in_data[6]);
{second_line}
if
data[5]=true then data[5]:=t else
data[5]:=not(in_data[9]);
if
data[6]=true then data[6]:=t else
data[6]:=not(in_data[1]);
if
data[7]=true then data[7]:=t else
data[7]:=not(data[1]);
if
data[8]=true then data[8]:=t else
data[8]:=not(data[2]);
if
data[9]=true then data[9]:=t else
data[9]:=not(data[3]);
if
data[10]=true then data[10]:=t else
data[10]:=not(in_data[5]);
if
data[11]=true then data[11]:=t else
data[11]:=not(data[4]);
if
data[12]=true then data[12]:=t else
data[12]:=not(in_data[7]);
{third_line}
if
data[13]=true then data[13]:=t else
data[13]:=(data[5]
and data [6]);
if
data[14]=true then data[14]:=t else
data[14]:=(data[5]
and data [1]);
if
data[15]=true then data[15]:=t else
data[15]:=(data[5]
and data [2]);
if
data[16]=true then data[16]:=t else
data[16]:=(data[5]
and data [3]);
if
data[17]=true then data[17]:=t else
data[17]:=(data[5]
and data [7]);
if
data[18]=true then data[18]:=t else
data[18]:=(data[10]
and data [8]);
if
data[19]=true then data[19]:=t else
data[19]:=(data[5]
and data [4]);
if
data[20]=true then data[20]:=t else
data[20]:=(data[8]
and data [9]);
if
data[21]=true then data[21]:=t else
data[21]:=(data[5]
and data [7]);
if
data[22]=true then data[22]:=t else
data[22]:=(data[9]
and data [12]);
if
data[23]=true then data[23]:=t else
data[23]:=(in_data[1]
and in_data[2]);
if
data[24]=true then data[24]:=t else
data[24]:=(in_data[3]
and in_data[4]);
if
data[25]=true then data[25]:=t else
data[25]:=(in_data[5]
and in_data[6]);
if
data[26]=true then data[26]:=t else
data[26]:=(in_data[7]
and in_data[8]);
{fourth_line}
if
data[27]=true then data[27]:=t else
data[27]:=(data[7]
and data [15]);
if
data[28]=true then data[28]:=t else
data[28]:=(data[17]
and data [18]);
if data[29]=true
then data[29]:=t else
data[29]:=(data[19]
and data [20]);
if
data[30]=true then data[30]:=t else
data[30]:=(data[21]
and data [22]);
if
data[31]=true then data[31]:=t else
data[31]:=(data[23]
and data [24]);
if
data[32]=true then data[32]:=t else
data[32]:=(data[25]
and data [26]);
{fifth_line}
if
data[33]=true then data[33]:=t else
data[33]:=(data[9]
and data [28]);
if
data[34]=true then data[34]:=t else
data[34]:=(data[11]
and data [30]);
if
data[35]=true then data[35]:=t else
data[35]:=(data[31]
and data [32]);
{sixth_line}
if
data[36]=true then data[36]:=t else
data[36]:=(data[13]
and data [14]);
if
data[37]=true then data[37]:=t else
data[37]:=(data[16]
or data [27]);
if
data[38]=true then data[38]:=t else
data[38]:=(data[13]
or data [14]);
if
data[39]=true then data[39]:=t else
data[39]:=(data[29]
or data [33]);
if
data[40]=true then data[40]:=t else
data[40]:=(data[27]
or data [13]);
if
data[41]=true then data[41]:=t else
data[41]:=(data[33]
or data [34]);
if data[42]=true
then data[42]:=t else
data[42]:=not(data[35]
and data [5]);
{seventh_line}
if
data[43]=true then data[43]:=t else
data[43]:=not(data[36]
or data [37]);
if
data[44]=true then data[44]:=t else
data[44]:=not(data[39]
or data [38]);
if
data[45]=true then data[45]:=t else
data[45]:=not(data[40]
or data [41]);
if
data[46]=true then data[46]:=t else
data[46]:=not(data[42]
and data [5]);
{eight_line}
if
data[47]=true then data[47]:=t else
data[47]:=not(data[46]);
{nineth
line}
if
data[48]=true then data[48]:=t else
data[48]:=(data[46]
xor data[42]);
if
data[49]=true then data[49]:=t else
data[49]:=(data[46]
xor data[42]);
if
data[50]=true then data[50]:=t else
data[50]:=not(data[42]
and data[47]);
{tenth
line}
if
data[51]=true then data[51]:=t else
data[51]:=(data[44]
and data[45]);
{eleventh
line}
if
data[52]=true then data[52]:=t else
data[52]:=(data[44]
or data[45]);
if
data[53]=true then data[53]:=t else
data[53]:=(data[43]
or data[52]);
if
data[54]=true then data[54]:=t else
data[54]:=(test3_comp
and data[53]);
if
data[55]=true then data[55]:=t else
data[55]:=not(data[43]
and data[51]);
if
data[56]=true then data[56]:=t else
data[56]:=(test1_comp
and data[55]);
if
data[57]=true then data[57]:=t else
data[57]:=(data[48]
and data[56]);
if
data[58]=true then data[58]:=t else
data[58]:=not(data[49]);
if
data[59]=true then data[59]:=t else
data[59]:=(data[50]
and data[55]);
if
data[60]=true then data[60]:=t else
data[60]:=(data[59]
and data[55]);
{writeln
('A2=',data[43],' ','A1=',data[44],' ','A0=',data[45]);
writeln
('Error1=',data[57],' ','Error2=',data[58],
' ','Error3=',data[54],'
','Error4=',data[60]);}
if
((data[57]=t) or (data[58]=t) or (data[54]=t) or (data[60]=t)) then
begin
counter:=counter+1;
error[x_coor,n]:=j;
x_coor:=x_coor+1;
if max<x_coor then max:=x_coor;
end;
end;
{-----------------------------------------------------------------------}
begin
clrscr;
writeln
('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
writeln ('!! ЂЈҐў Ђ«ҐЄбҐ© ђ-682 !!');
writeln
('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
writeln
('#########################################################');
writeln ('#*
Џ®¤бз%в Є®«ЁзҐбвў ҐЁбЇаў®б⥩ , ®ЇаҐ¤Ґ«пҐ¬ле *#');
writeln ('#* бЁб⥬®© ᬮЄ®ва®«п Ђ–Џ *#');
writeln
('#*******************************************************#');
writeln ('#* ‚Ё¤ ҐЁбЇаў®бвЁ : ®¤Ё®зп , дЁЄбжЁп 1 *#');
writeln
('#*******************************************************#');
writeln;
writeln ('ЋЎа㦥® ҐЁбЇаў®б⥩
: 43 Ё§ 60 (71.6%)');
writeln;
max:=1;
e:=1;
counter:=0;
n:=1;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data1;
fixed_false_test;
end;
{ writeln(counter);}
e:=1;
n:=2;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data2;
fixed_false_test;
end;
e:=1;
n:=3;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data3;
fixed_false_test;
end;
e:=1;
n:=4;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data4;
fixed_false_test;
end;
e:=1;
n:=5;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data5;
fixed_false_test;
end;
e:=1;
n:=6;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data6;
fixed_false_test;
end;
e:=1;
n:=7;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data7;
fixed_false_test;
end;
e:=1;
n:=8;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data8;
fixed_false_test;
end;
for i:=1 to 8 do
begin
write('‚室®© Ў®а ',i,' ');
for j:=1 to max-1 do
begin
if error[j,i]<>0 then
if error[j,i]<10 then write(' ',error[j,i]) else write(' ',error[j,i])
end;
writeln('');
end;
end.
program
ADC_model_fixed_1;
uses
crt;
type
o=array[1
.. 100,1 .. 100] of integer;
q=array[1
.. 100] of boolean;
w=array[1
.. 9] of boolean; { 9 - enabled input }
var
data : q;
error:o;
in_data :w;
i,j,e,n,x_coor,max,orig,a,s,d,counter:integer;
test1_comp,test3_comp:boolean;
const
t=true;
f=false;
{-----------------------------------------------------------------------}
procedure
clear_array;
begin
for i:=1 to 100 do data[i]:=f; {if t then
error}
end;
{-----------------------------------------------------------------------}
procedure
set_in_data1;
begin
test3_comp:=t;
test1_comp:=f;
in_data[1]:=f;
in_data[2]:=f;
in_data[3]:=f;
in_data[4]:=f;
in_data[5]:=f;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data2;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=f;
in_data[3]:=f;
in_data[4]:=f;
in_data[5]:=f;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data3;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=f;
in_data[4]:=f;
in_data[5]:=f;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data4;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=t;
in_data[4]:=f;
in_data[5]:=f;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data5;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=t;
in_data[4]:=t;
in_data[5]:=f;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data6;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=t;
in_data[4]:=t;
in_data[5]:=t;
in_data[6]:=f;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data7;
begin
test3_comp:=f;
test1_comp:=f;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=t;
in_data[4]:=t;
in_data[5]:=t;
in_data[6]:=t;
in_data[7]:=f;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_in_data8;
begin
test3_comp:=f;
test1_comp:=t;
in_data[1]:=t;
in_data[2]:=t;
in_data[3]:=t;
in_data[4]:=t;
in_data[5]:=t;
in_data[6]:=t;
in_data[7]:=t;
in_data[8]:=f;
in_data[9]:=f;
end;
{-----------------------------------------------------------------------}
procedure
set_error;
begin
data[e]:=t;
e:=e+1;
end;
{-----------------------------------------------------------------------}
procedure
fixed_false_test;
begin
{first_line}
if data[1]=true
then data[1]:=f else
data[1]:=not(in_data[2]);
if
data[2]=true then data[2]:=f else
data[2]:=not(in_data[3]);
if
data[3]=true then data[3]:=f else
data[3]:=not(in_data[4]);
if
data[4]=true then data[4]:=f else
data[4]:=not(in_data[6]);
{second_line}
if
data[5]=true then data[5]:=f else
data[5]:=not(in_data[9]);
if
data[6]=true then data[6]:=f else
data[6]:=not(in_data[1]);
if
data[7]=true then data[7]:=f else
data[7]:=not(data[1]);
if
data[8]=true then data[8]:=f else
data[8]:=not(data[2]);
if
data[9]=true then data[9]:=f else
data[9]:=not(data[3]);
if
data[10]=true then data[10]:=f else
data[10]:=not(in_data[5]);
if
data[11]=true then data[11]:=f else
data[11]:=not(data[4]);
if
data[12]=true then data[12]:=f else
data[12]:=not(in_data[7]);
{third_line}
if
data[13]=true then data[13]:=f else
data[13]:=(data[5]
and data [6]);
if
data[14]=true then data[14]:=f else
data[14]:=(data[5]
and data [1]);
if
data[15]=true then data[15]:=f else
data[15]:=(data[5]
and data [2]);
if
data[16]=true then data[16]:=f else
data[16]:=(data[5]
and data [3]);
if
data[17]=true then data[17]:=f else
data[17]:=(data[5]
and data [7]);
if
data[18]=true then data[18]:=f else
data[18]:=(data[10]
and data [8]);
if
data[19]=true then data[19]:=f else
data[19]:=(data[5]
and data [4]);
if
data[20]=true then data[20]:=f else
data[20]:=(data[8]
and data [9]);
if
data[21]=true then data[21]:=f else
data[21]:=(data[5]
and data [7]);
if
data[22]=true then data[22]:=f else
data[22]:=(data[9]
and data [12]);
if
data[23]=true then data[23]:=f else
data[23]:=(in_data[1]
and in_data[2]);
if
data[24]=true then data[24]:=f else
data[24]:=(in_data[3]
and in_data[4]);
if
data[25]=true then data[25]:=f else
data[25]:=(in_data[5]
and in_data[6]);
if
data[26]=true then data[26]:=f else
data[26]:=(in_data[7]
and in_data[8]);
{fourth_line}
if
data[27]=true then data[27]:=f else
data[27]:=(data[7]
and data [15]);
if
data[28]=true then data[28]:=f else
data[28]:=(data[17]
and data [18]);
if data[29]=true
then data[29]:=f else
data[29]:=(data[19]
and data [20]);
if
data[30]=true then data[30]:=f else
data[30]:=(data[21]
and data [22]);
if
data[31]=true then data[31]:=f else
data[31]:=(data[23]
and data [24]);
if
data[32]=true then data[32]:=f else
data[32]:=(data[25]
and data [26]);
{fifth_line}
if
data[33]=true then data[33]:=f else
data[33]:=(data[9]
and data [28]);
if
data[34]=true then data[34]:=f else
data[34]:=(data[11]
and data [30]);
if
data[35]=true then data[35]:=f else
data[35]:=(data[31]
and data [32]);
{sixth_line}
if
data[36]=true then data[36]:=f else
data[36]:=(data[13]
and data [14]);
if
data[37]=true then data[37]:=f else
data[37]:=(data[16]
or data [27]);
if
data[38]=true then data[38]:=f else
data[38]:=(data[13]
or data [14]);
if
data[39]=true then data[39]:=f else
data[39]:=(data[29]
or data [33]);
if
data[40]=true then data[40]:=f else
data[40]:=(data[27]
or data [13]);
if
data[41]=true then data[41]:=f else
data[41]:=(data[33]
or data [34]);
if
data[42]=true then data[42]:=f else
data[42]:=not(data[35]
and data [5]);
{seventh_line}
if
data[43]=true then data[43]:=f else
data[43]:=not(data[36]
or data [37]);
if
data[44]=true then data[44]:=f else
data[44]:=not(data[39]
or data [38]);
if
data[45]=true then data[45]:=f else
data[45]:=not(data[40]
or data [41]);
if
data[46]=true then data[46]:=f else
data[46]:=not(data[42]
and data [5]);
{eight_line}
if
data[47]=true then data[47]:=f else
data[47]:=not(data[46]);
{nineth
line}
if
data[48]=true then data[48]:=f else
data[48]:=(data[46]
xor data[42]);
if
data[49]=true then data[49]:=f else
data[49]:=(data[46]
xor data[42]);
if
data[50]=true then data[50]:=f else
data[50]:=not(data[42]
and data[47]);
{tenth
line}
if
data[51]=true then data[51]:=f else
data[51]:=(data[44]
and data[45]);
{eleventh
line}
if
data[52]=true then data[52]:=f else
data[52]:=(data[44]
or data[45]);
if
data[53]=true then data[53]:=f else
data[53]:=(data[43]
or data[52]);
if
data[54]=true then data[54]:=f else
data[54]:=(test3_comp
and data[53]);
if
data[55]=true then data[55]:=f else
data[55]:=not(data[43]
and data[51]);
if
data[56]=true then data[56]:=f else
data[56]:=(test1_comp
and data[55]);
if
data[57]=true then data[57]:=f else
data[57]:=(data[48]
and data[56]);
if
data[58]=true then data[58]:=f else
data[58]:=not(data[49]);
if
data[59]=true then data[59]:=f else
data[59]:=(data[50]
and data[55]);
if
data[60]=true then data[60]:=f else
data[60]:=(data[59]
and data[55]);
{writeln
('A2=',data[43],' ','A1=',data[44],' ','A0=',data[45]);
writeln
('Error1=',data[57],' ','Error2=',data[58],
' ','Error3=',data[54],'
','Error4=',data[60]);}
if
((data[57]=t) or (data[58]=t) or (data[54]=t) or (data[60]=t)) then
begin
counter:=counter+1;
error[x_coor,n]:=j;
x_coor:=x_coor+1;
if max<x_coor then max:=x_coor;
end;
end;
{-----------------------------------------------------------------------}
begin
clrscr;
writeln
('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
writeln ('!! ЂЈҐў Ђ«ҐЄбҐ© ђ-682 !!');
writeln
('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
writeln
('#########################################################');
writeln ('#*
Џ®¤бз%в Є®«ЁзҐбвў ҐЁбЇаў®б⥩ , ®ЇаҐ¤Ґ«пҐ¬ле *#');
writeln ('#* бЁб⥬®© ᬮЄ®ва®«п Ђ–Џ *#');
writeln
('#*******************************************************#');
writeln ('#* ‚Ё¤ ҐЁбЇаў®бвЁ : ®¤Ё®зп , дЁЄбжЁп 0 *#');
writeln
('#*******************************************************#');
writeln;
writeln ('');
writeln;
max:=1;
e:=1;
counter:=0;
n:=1;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data1;
fixed_false_test;
end;
e:=1;
n:=2;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data2;
fixed_false_test;
end;
e:=1;
n:=3;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data3;
fixed_false_test;
end;
e:=1;
n:=4;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data4;
fixed_false_test;
end;
e:=1;
n:=5;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data5;
fixed_false_test;
end;
e:=1;
n:=6;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data6;
fixed_false_test;
end;
e:=1;
n:=7;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data7;
fixed_false_test;
end;
e:=1;
n:=8;
x_coor:=1;
for j:=1 to 60 do
begin
clear_array;
set_error;
set_in_data8;
fixed_false_test;
end;
for i:=1 to 8 do
begin
write ('‚室®© Ў®а ',i,' ');
for j:=1 to max-1 do
begin
if error[j,i]<10 then write(' ',error[j,i]) else write(' ',error[j,i])
end;
writeln('');
end;
end.
Задание на
курсовую работу.
Спроектировать
систему самоконтроля аналого-цифрового прео-
бразователя,
которая бы в течение работы АЦП
проверяла его исправность.
Сущность метода
АЦП.
Часто требуется преобразовать аналоговый сигнал в число,
пропорциональное амплитуде. Это актуально для измерительных приборов, где информация выдается
в виде аналогового сигнала, звукоснимателей и т.д.
В
данной работе используется метод параллельного кодирования .
Параллельное кодирование. В этом
методе напряжение входного сигнала подается на один из входов п компараторов одновременно; другие
входы компараторов подключены к п
опорным источникам с равномерно распределенными напряжениями. Шифратор с
приоритетом формирует цифровой выходной сигнал, соответствующий самому старшему
компаратору из активизированных входным сигналом (рис. 1).
Параллельное
кодирование (один из видов «мгновенного» кодирования) - это самый быстрый метод А/Ц-преобра-зования. Время
задержки от входа до выхода равно сумме времен задержки на компараторе и
шифраторе. Параллельные преобразователи, выпускаемые промышленностью, имеют до 1024 уровней квантования (с
выходами до 16
разрядов). При большем числе разрядов они становятся дорогими и громоздкими.
Быстродействие их колеблется от 15 до 300 млн. отсчетов в секунду.
На
рис.1 приведена общая схема паралельного АЦП.
Ниже
приведена схема приоритетного шифратора 74F148 , имеющего 8 входных и 3
выходных информационных линии.
Таблица 1.
Таблица истинности приоритетного шифратора 74F148.
Принцип
работы приоритетного шифратора :
Шифратор получает данные с восьми входных линий
, которые активны в состоянии логического нуля и преобразует их в три выходных
линии , также считающиеся активными в состоянии логического нуля. Значение
приоритета связывается с каждым входом и когда две или более входных линий
одновременно активны , значение приоритета старшего входа передаётся на выход ,
вход 7 имеет наивысший приоритет. Логическая единица на EI(Enable Input) установит на всех выходах
неактивное состояние. Выход GS(Group Signal) активен, когда хотя бы один из входов активен. EO(Enabled Output) активен , когда все входы
неактивны.EO и EI используются при
каскадировании приоритетных шифраторов.
Рис
3. Расширение разрядов АЦП.
Комментарии к схеме рис. 3.
0-7 (на обоих шифраторах) – информационные
входные линии.
А0-А4 – информационные выходные линии.
Enable – логический ноль разрешает работу шифратора.
FLAG – если ноль, то хотя бы один их входов активен.
Разработка
системы самоконтроля.
В
литературе нами было обнаружено два
типа систем самоконтроля :
1.
Дублирование
преобразователя и последующее сравнение
выходов.
2.
Обратное
преобразование цифрового сигнала в аналоговый и сравнение его с исходным.
Эти
методы имеют существенный недостаток –
громоздкая схема контроля и как следствие - понижение надёжности , повышение
цены изделия , возникает проблема
«сторожа за сторожем».
Имеет
смысл разработка системы контроля , которая будет обнаруживать
меньшее
количество неисправностей (по сравнению с методами , указаными выше) аналого-цифрового преобразователя , но будет
возможно более простой и надёжной.
Рис. 4. Функциональная схема АЦП с системой
самоконтроля.
Описание системы тестов.
Из рис.4 видно что местами подключения схемы
самоконтоля являются входы и выходы
аналогового участка схемы и приоритетного шифратора , реализованные в виде
интегральныз микросхем. Принцип построения тестов следующий : при определённом значении на
входе АЦП происходит просмотр выходных значений и если обнаружено
нессответствие , то выдаётся сообщение о ошибке ; контроль происходит с учётом
особенностей работы схемы приоритетного шифратора (подробнее см. ниже).
Test1.
При
подаче нулевого потенциала на вход АЦП
компаратор test1_comp разрешает тестирование - происходит анализ выходных
значений , в случае , если хотя бы один
из информационных выходов имеет нулевой уровень , либо GS=1;E0=0 не
соответствует действительности , выдаётся сообщение об ошибке.
Test2.
В отличие от предыдущего теста , test2 контролтрует
схему в течение всего времени её работы ,
происходит сравнеиие значений GS и EO ,
и если они
равны , то выводится сообщение об ошибке.
Test3.
При
подаче на вход АЦП такого потенциала , при увеличении которого не происходит
изменения
значений информационных выходов А0-А2 ( в нашем случае 10V).
На
входах I0-I7 – уровни логического нуля (Uin=10 V) ,
компаратор test3_comp разрешает тестирование – происходит анализ выходных
значений , в случае , если хотя бы один из информационных выводов имеет уровень
логической единицы , то выводится сообщение об ошибке.
Test4.
Особенностью
работы приоритетного шифратора является то , что значения на вызодах EO и GS различны.
Когда на входах I0-I7 – уровни логической единицы (Uin=0) ,
GS=1 , EO=0 ;
В
остальных случаях GS=0 , EO=1. Test4 проверяет выход АЦП на
неединичные значения и GS=0;EO=1;
Схема аналого-цифрового преобразователя с
системой самоконтроля представлена на рис. 5.
Комментарии к схеме рис.5
Элементы :
1-46 приоритетный шифратор
47-60 система самоконтроля
Test1_Error, Test2_Error, Test3_Error,
Test4_Error – индикаторы
ошибок
A0,A1,A2 – выходные линии
Uin – вход АЦП
I0-I7 – линии связи
аналогово и цифрового участков схемы.
Моделирование
исправной схемы.
Моделирование
исправной схемы призводится при помощи
программного комплекса Electronics Workbench. 5.12. , представляющего собой
программный продукт, позволяющий производить моделирование, тестирование,
разработку и отладку электрических цепей.
Выбор
EWB для моделирования исправной схемы обусловлен тем , что представляет
значительное удобство графический интерфейс процесса , а также то , что
программа позволяет работать с аналоговым участком схемы.
Таблица
2
Результаты
моделирования. Uin EI* E0 GS I2 I1 I0 Error1 Error2 Error3 Error4 10 F T F F F F F F F F 9 F T F F F T F F F F 8 F T F F T F F F F F 7 F T F F T T F F F F 5 F T F T F F F F F F 4 F T F T F T F F F F 2 F T F T T F F F F F 0 F F T T T T F F F F
·
EI=const
F – логический ноль
Т –
логическая единица
Error1, Error2, Error3, Error4 – логическая единица указывает на наличие ошибки , обнаруженной
системой самоконтроля.
Как
видно из результатов моделирования , ни при
одном допустимом входном наборе сообщение об ошибке не появляется.
Моделирование
неисправной схемы.
Целью моделирования неисправностей является
определение доли ошибок АЦП , обнаруживающихся системой контроля. Для решения
данной задачи использовались самостоятельно разработанные программы , исходные
тексты которых приведёны в приложении.
Описание работы программы моделирования
неисправностей.
Моделируются
неисправности следующего вида: одиночные, фиксация 0 и 1.
Логическое
описание схемы находится в исходном тексте программы, для изменения
моделируемой схемы необходима значительная переделка программы и её компиляция
, поэтому данная программа предназначена исключительно для моделирования
неисправностей данной схемы. Моделирование производится следующим образом : на
линиях схемы поочерёдно устанавливаются
обрыв и замыкание на общий провод и производится моделирование схемы с
учётом данной неисправности.
В
таблицах 3 и 4 приведены результаты моделирования неисправностей. Записям в
таблицах соответствуют неисправности на выходе соответствующего элемента.
Таблица 3.
Результаты моделирования неисправностей.
Вид
неисправности: одиночная, фиксация 1.
0 V 35 43 44 45 46 50 52 53 54 56 57 58 59 60 2 V 35 46 50 54 56 57 58 59 60 4 V 35 46 50 54 56 57 58 59 60 5 V 35 46 50 54 56 57 58 59 60 7 V 32 35 46 50 54 56 57 58 59 60 8 V 32 35 46 50 54 56 57 58 59 60 9 V 26 32 35 46 50 54 56 57 58 59 60 10 V 1 2 3 4 6 10 12 13 14 15 16 18 19 22 27 28 29 30 33 34 36 37 38 39 40 41 46 54 55 56 57 58 60
Таблица
4.
Результаты моделирования неисправностей.
Вид
неисправности: одиночная, фиксация 0. 0 V 5 6 13 38 40 42 47 49 2 V 5 42 47 49 4 V 5 42 47 49 5 V 5 42 47 49 7 V 5 42 47 49 8 V 5 42 47 49 9 V 5 42 47 49 10 V 5 43 44 45 49 51
На рис. 6 и 7
представлены информативности водных наборов с точки зрения обнаружения ошибок.
Заключение.
1. Несмотря на то , что схема контроля
составляет пятую часть от элементной базы схемы , eю обнаружено 71% и 20%
неисправностей фиксации 1 и 0 соответственно.
2.
При увеличении разрядов АЦП разница между основной схемой и контроля
увеличивается
и схема контроля вносит всё меньший относительный вклад в надёжность изделия.
3.
В схеме контроля используются тесты двух типов :
a)тесты постоянной проверки (test1 и test3)
б)тесты проверки лишь при
достижении критических значений (test1 и test3)
Наибольший вклад в
количество обнаруженных неисправностей вносят тесты типа б , но необходимость
введения тестов постоянной проверки обусловлена тем , что возможно такое
использование АЦП , при котором на вход не будут
подаваться предельные значения (тогда тесты
типа б не имеют смысла).
Содержание.
Задание на курсовую
работу.
2
Сущность метода АЦП.
2
Разработка системы
самоконтроля.
6
Моделирование исправной
схемы.
9
Моделирование неисправной
схемы. 9
Заключение.
11
Приложение. 12
Список
использованных источников 25
Министерство общего и
профессионального образования РФ
Дальневосточный Государственный
Технический Университет
Кафедра
ЭКТ
Пояснительная записка к
курсовому проекту
Тема :
Разработка системы самоконтроля аналого-цифрового преобразователя.
Выполнили студенты
группы
Р-682:
Агаев А.
Воронов С.
Похилько Е.
Шичков Е.
Проверил преподаватель:
Добржинский Ю.В.
Владивосток
1999
|
|
|