SPRAWOZDANIE
Symulacja Komputerowa Układów Automatyki
Ćwiczenie 6
Badanie modeli tranzystorów bipolarnych
Automatyka i Robotyka
Semestr 6
Grupa 6c5
Czwartek 12:15
Nazwisko i Imię |
Numer Albumu |
Blesiński Patryk |
171320 |
Guzdraj Paweł |
171339 |
(rys. 1) Schemat ideowy układu elektronicznego do analizy charakterystyki wyjściowej tranzystora.
|
(rys. 2) Schemat ideowy układu elektronicznego do analizy charakterystyki wejściowej tranzystora.
|
Cel ćwiczenia:
Celem ćwiczenia było przeanalizowanie układu pomiarowego z rys.3 oraz porównanie symulacyjnych wyników badań z rzeczywistymi, które znajdowały się w odrębnym katalogu.
(rys. 3) Schemat układu testowego do badania charakterystyk tranzystorów bipolarnych.
(rys. 4) Przykładowe, rzeczywiste charakterystyki (wejściowa oraz wyjściowa) tranzystora BC178A.
W programie OrCAD/PSpice zrealizowano układ z rys. 3 dla wszystkich tranzystorów posiadających modele symulacyjne oraz wykonano dla nich charakterystyki prądowo-napięciowe: wejściową
i wyjściową. Następnie na wspólnych wykresach porównano otrzymane wyniki z rzeczywistymi oraz wykreślono dla nich charakterystyki błędu rozumiane jako różnica charakterystyk prądowo-napięciowych elementu rzeczywistego i symulacyjnego.
Wykonanie ćwiczenia:
Dane z rzeczywistych analiz tranzystorów, które zostały umieszczone w plikach *.csv należało wykorzystać do wygenerowania charakterystyk. Obrabianie ich przy pomocy programu Excel okazało się zbyt czasochłonne, dlatego napisaliśmy zestaw skryptów dla programu Matlab, które w sposób automatyczny generują wymagane zestawy wykresów zapisując je do plików graficznych *.jpg.
Z plików *.csv należało odczytać ustawienia symulacji. Dla charakterystyk wyjściowych z poniższych fragmentów pliku BC107.csv odczytaliśmy następujące parametry:
Step/Sweep Start Level,0.0 A,0.0 V
Step/Sweep Stop Level,100.0 uA,10.0 V
Step/Sweep Style,LIN,LIN
# of steps / sweep points,11,100
[...]
,Timestamp,Source Value,Reading,Timestamp,Source Value,Reading
,(seconds),(Amps),(Volts),(seconds),(Volts),(Amps)
1,0.0,0.0,-0.09141564,0.0,0.0,-2.336502E-6
2,5.000005,1.0E-5,0.4710991,0.049997,0.1010101,-1.239777E-6
(rys. 5) Ustawienia parametrów symulacji dla charakterystyk wyjściowych.
Dla charakterystyk wejściowych - plik Ube_vs_Ibe_BC107.csv:
Step/Sweep Start Level,0.0 A
Step/Sweep Stop Level,1.0 mA
Step/Sweep Style,LIN
# of steps / sweep points,50
[...]
,Timestamp,Source Value,Reading
,(seconds),(Amps),(Volts)
1,0.0,0.0,0.4061754
2,0.049997,2.040816E-5,0.5896792
3,0.099997,4.081633E-5,0.6122446
(rys. 6) Ustawienia parametrów symulacji dla charakterystyk wejściowych.
Powyższe wartości w polach inkrementacji opcji Primary Sweep pozwoliły na uzyskanie dokładnie 1100 pomiarów dla charakterystyk wyjściowych i 50 dla wejściowych. W przypadku ustawienia wartości 0.1V (rys. 5) otrzymywaliśmy zawsze 1 pomiar więcej na każdą charakterystykę, co utrudniało późniejsze ich porównywanie z charakterystykami rzeczywistymi.
Listingi *.m skryptów dla programu Matlab:
Skrypt skua_real_ub.m generujący rzeczywiste charakterystyki wyjściowe z plików *.csv:
n = 0;
DATABASE_REAL_UB = [];
CSV = dir('*.csv');
for i = 1:numel(CSV)
FILENAME = CSV(i).name;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
DATA = [];
if isempty(findstr(FILENAME, 'sim')) == 1
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
FILE = fopen(FILENAME);
while 1
LINE = fgetl(FILE);
if ~ischar(LINE)
break;
end
% zczytanie 50 pomiarów:
SCAN = sscanf(LINE, '%f,%f,%f,%f')';
if isempty(DATA) == 1
DATA = SCAN(:,3:end);
else
DATA = [DATA; SCAN(:,3:end)];
end
end
fclose(FILE);
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
l = 1;
r = 50;
figure();
hold on;
y = DATA(l:r,1);
x = DATA(l:r,2);
plot(x,y,'.-b'); grid;
hold off;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
n = n+1;
DATABASE_REAL_UB(:,:,n) = DATA;
end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
Skrypt skua_sim_ub.m generujący symulacyjne charakterystyki wyjściowe z plików *.sim.csv:
n = 0;
DATABASE_SIM_UB = [];
CSV = dir('*.csv');
for i = 1:numel(CSV)
FILENAME = CSV(i).name;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
DATA = [];
if isempty(findstr(FILENAME, 'sim')) == 0
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
FILE = fopen(FILENAME);
while 1
LINE = fgetl(FILE);
if ~ischar(LINE)
break;
end
% zczytanie 1100 pomiarów:
SCAN = sscanf(LINE, '%f ,%f')';
if isempty(DATA) == 1
DATA = SCAN(:,1:end);
else
DATA = [DATA; SCAN(:,1:end)];
end
end
fclose(FILE);
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
if DATA(50,2) < 0
DATA = [-DATA(end:-1:1,1), DATA(end:-1:1,2)];
end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
figure();
l = 1;
r = 50;
hold on;
y = DATA(l:r,1);
x = DATA(l:r,2);
plot(x,y,'.-r'); grid;
hold off;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
n = n+1;
DATABASE_SIM_UB(:,:,n) = DATA;
end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
Skrypt skua_cmp_ub.m porównujący charakterystyki wyjściowe:
n = 0;
CSV = dir('*.csv');
for i = 1:numel(CSV)
FILENAME = CSV(i).name;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
if isempty(findstr(FILENAME, 'sim')) == 0
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
n = n + 1;
figure();
hold on;
l = 1;
r = 50;
y = DATABASE_SIM_UB(l:r,1,n);
x = DATABASE_SIM_UB(l:r,2,n);
plot(x,y,'.-r');
y = DATABASE_REAL_UB(l:r,1,n);
x = DATABASE_REAL_UB(l:r,2,n);
plot(x,y,'.-b'); grid;
hold off;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
Skrypt skua_error_ub.m generujący charakterystyki błędu:
n = 0;
CSV = dir('*.csv');
for i = 1:numel(CSV)
FILENAME = CSV(i).name;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
if isempty(findstr(FILENAME, 'sim')) == 0
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
n = n + 1;
figure();
hold on;
l = 1;
r = 50;
x = DATABASE_SIM_UB(l:r,1,n);
y = DATABASE_REAL_UB(l:r,2,n)-DATABASE_SIM_UB(l:r,2,n);
plot(x,y,'.-b');
hold off;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
W celu wykorzystania powyższych *.m skryptów należy je umieścić w jednym folderze z plikami *.csv zawierającymi dane dla charakterystyk wejściowych, tj. Ube_vs_Ibe_BC107.csv (charakterystyki rzeczywiste) i odpowiadającym im wyjściowym charakterystykom symulacyjnym Ube_vs_Ibe_BC107.sim.csv.
Skrypt skua_real.m generujący rzeczywiste charakterystyki wyjściowe z plików *.csv:
n = 0;
DATABASE_REAL = [];
CSV = dir('*.csv');
for i = 1:numel(CSV)
FILENAME = CSV(i).name;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
DATA = [];
if isempty(findstr(FILENAME, 'sim')) == 1
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
FILE = fopen(FILENAME);
while 1
LINE = fgetl(FILE);
if ~ischar(LINE)
break;
end
% zczytanie pierwszych 11 pomiarów:
SCAN = sscanf(LINE, '%f,%f,%f,%f,%f,%f,%f')';
if isempty(SCAN(:,1:end-3)) == 0
if isempty(DATA) == 1
DATA = SCAN(:,6:end);
else
DATA = [DATA; SCAN(:,6:end)];
end
else
% zczytanie 12-1100 pomiarów:
SCAN = sscanf(LINE, '%f,,,,%f,%f,%f')';
DATA = [DATA; SCAN(:,3:end)];
end
end
fclose(FILE);
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
l = 1;
r = 100;
figure();
hold on;
for p = 1:11
x = DATA(l:r,1);
y = DATA(l:r,2);
plot(x,y,'.-b'); grid;
l = r + 1;
r = r + 100;
end
hold off;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
n = n+1;
DATABASE_REAL(:,:,n) = DATA;
end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
Skrypt skua_sim.m generujący symulacyjne charakterystyki wyjściowe z plików *.sim.csv:
n = 0;
DATABASE_SIM = [];
CSV = dir('*.csv');
for i = 1:numel(CSV)
FILENAME = CSV(i).name;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
DATA = [];
if isempty(findstr(FILENAME, 'sim')) == 0
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
FILE = fopen(FILENAME);
while 1
LINE = fgetl(FILE);
if ~ischar(LINE)
break;
end
% zczytanie 1100 pomiarów:
SCAN = sscanf(LINE, '%f ,%f')';
if isempty(DATA) == 1
DATA = SCAN(:,1:end);
else
DATA = [DATA; SCAN(:,1:end)];
end
end
fclose(FILE);
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
l = 1;
r = 100;
figure();
hold on;
for p = 1:11
x = DATA(l:r,1);
y = DATA(l:r,2);
plot(x,y,'.-r'); grid;
l = r + 1;
r = r + 100;
end
hold off;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
n = n+1;
DATABASE_SIM(:,:,n) = DATA;
end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
Skrypt skua_cmp.m porównujący charakterystyki wyjściowe:
n = 0;
CSV = dir('*.csv');
for i = 1:numel(CSV)
FILENAME = CSV(i).name;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
if isempty(findstr(FILENAME, 'sim')) == 0
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
n = n + 1;
figure();
hold on;
l = 1;
r = 100;
for p = 1:11
x = DATABASE_SIM(l:r,1,n);
y = DATABASE_SIM(l:r,2,n);
plot(x,y,'.-r');
x = DATABASE_REAL(l:r,1,n);
y = DATABASE_REAL(l:r,2,n);
plot(x,y,'.-b'); grid;
l = r + 1;
r = r + 100;
end
hold off;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
Skrypt skua_error.m generujący charakterystyki błędu:
n = 0;
CSV = dir('*.csv');
for i = 1:numel(CSV)
FILENAME = CSV(i).name;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
if isempty(findstr(FILENAME, 'sim')) == 0
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
n = n + 1;
figure();
hold on;
l = 1;
r = 100;
for p = 1:11
x = DATABASE_SIM(l:r,1,n);
y = DATABASE_REAL(l:r,2,n)-DATABASE_SIM(l:r,2,n);
plot(x,y,'.-b');
l = r + 1;
r = r + 100;
end
hold off;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
end
W celu wykorzystania powyższych *.m skryptów należy je umieścić w jednym folderze z plikami *.csv zawierającymi dane dla charakterystyk wyjściowych, tj. BC107.csv (charakterystyki rzeczywiste)
i odpowiadającym im wyjściowym charakterystykom symulacyjnym BC107.sim.csv.
Tranzystor NPN BC107.
(rys. 7) Rzeczywiste charakterystyki wejściowe tranzystora BC107.
(rys. 8) Symulacyjne charakterystyki wejściowe tranzystora BC107.
(rys. 9) Porównanie rzeczywistych i symulacyjnych charakterystyk wejściowych tranzystora BC107.
(rys. 10) Charakterystyka błędu (charakterystyki wejściowej) tranzystora BC107.
(rys. 11) Rzeczywiste charakterystyki wyjściowe tranzystora BC107.
(rys. 12) Symulacyjne charakterystyki wyjściowe tranzystora BC107.
(rys. 13) Porównanie rzeczywistych i symulacyjnych charakterystyk wyjściowych tranzystora BC107.
(rys. 14) Charakterystyka błędu (charakterystyk wyjściowych) tranzystora BC107.
Tranzystor NPN BC108A.
(rys. 15) Rzeczywiste charakterystyki wejściowe tranzystora BC108A.
(rys. 16) Symulacyjne charakterystyki wejściowe tranzystora BC108A.
(rys. 17) Porównanie rzeczywistych i symulacyjnych charakterystyk wejściowych tranzystora BC108A.
(rys. 18) Charakterystyka błędu (charakterystyki wejściowej) tranzystora BC108A.
(rys. 19) Rzeczywiste charakterystyki wyjściowe tranzystora BC108A.
(rys. 20) Symulacyjne charakterystyki wyjściowe tranzystora BC108A.
(rys. 21) Porównanie rzeczywistych i symulacyjnych charakterystyk wyjściowych tranzystora BC108A.
(rys. 22) Charakterystyka błędu (charakterystyk wyjściowych) tranzystora BC108A.
Tranzystor NPN BC108B.
(rys. 23) Rzeczywiste charakterystyki wejściowe tranzystora BC108B.
(rys. 24) Symulacyjne charakterystyki wejściowe tranzystora BC108B.
(rys. 25) Porównanie rzeczywistych i symulacyjnych charakterystyk wejściowych tranzystora BC108B.
(rys. 26) Charakterystyka błędu (charakterystyki wejściowej) tranzystora BC108B.
(rys. 27) Rzeczywiste charakterystyki wyjściowe tranzystora BC108B.
(rys. 28) Symulacyjne charakterystyki wyjściowe tranzystora BC108B.
(rys. 29) Porównanie rzeczywistych i symulacyjnych charakterystyk wyjściowych tranzystora BC108B.
(rys. 30) Charakterystyka błędu (charakterystyk wyjściowych) tranzystora BC108B.
Tranzystor PNP BC178A.
(rys. 31) Rzeczywiste charakterystyki wejściowe tranzystora BC178A.
(rys. 32) Symulacyjne charakterystyki wejściowe tranzystora BC178A.
(rys. 33) Porównanie rzeczywistych i symulacyjnych charakterystyk wejściowych tranzystora BC178A.
(rys. 34) Charakterystyka błędu (charakterystyki wejściowej) tranzystora BC178A.
(rys. 35) Rzeczywiste charakterystyki wyjściowe tranzystora BC178A.
(rys. 36) Symulacyjne charakterystyki wyjściowe tranzystora BC178A.
(rys. 37) Porównanie rzeczywistych i symulacyjnych charakterystyk wyjściowych tranzystora BC178A.
(rys. 38) Charakterystyka błędu (charakterystyk wyjściowych) tranzystora BC178A.
Tranzystor PNP BC308.
(rys. 38) Rzeczywiste charakterystyki wejściowe tranzystora BC308.
(rys. 40) Symulacyjne charakterystyki wejściowe tranzystora BC308.
(rys. 41) Porównanie rzeczywistych i symulacyjnych charakterystyk wejściowych tranzystora BC308.
(rys. 42) Charakterystyka błędu (charakterystyki wejściowej) tranzystora BC308.
(rys. 43) Rzeczywiste charakterystyki wyjściowe tranzystora BC308.
(rys. 44) Symulacyjne charakterystyki wyjściowe tranzystora BC308.
(rys. 45) Porównanie rzeczywistych i symulacyjnych charakterystyk wyjściowych tranzystora BC308.
(rys. 46) Charakterystyka błędu (charakterystyk wyjściowych) tranzystora BC308.
Tranzystor NPN BC337.
(rys. 47) Rzeczywiste charakterystyki wejściowe tranzystora BC337.
(rys. 48) Symulacyjne charakterystyki wejściowe tranzystora BC337.
(rys. 49) Porównanie rzeczywistych i symulacyjnych charakterystyk wejściowych tranzystora BC337.
(rys. 50) Charakterystyka błędu (charakterystyki wejściowej) tranzystora BC337.
(rys. 51) Rzeczywiste charakterystyki wyjściowe tranzystora BC337.
(rys. 52) Symulacyjne charakterystyki wyjściowe tranzystora BC337.
(rys. 53) Porównanie rzeczywistych i symulacyjnych charakterystyk wyjściowych tranzystora BC337.
(rys. 54) Charakterystyka błędu (charakterystyk wyjściowych) tranzystora BC337.
Wyznaczanie wartości wzmocnienia prądowego:
Wyznaczanie współczynników wzmocnienia prądowego dla ustalonego punktu pracy tranzystora przeprowadziliśmy na podstawie rzeczywistej rodziny charakterystyk IC=f(UCE) przy IB = const. Jako punkt pracy dla poszczególnych charakterystyk przyjmowaliśmy punkt dla którego UCE wynosiło: 5,05V - dla tranzystorów NPN i -5,05V dla tranzystorów PNP.
Przykład wyznaczania wzmocnienia prądowego na podstawie rodziny charakterystyk IC=f(UCE) przy IB = const tranzystora BC108A:
(rys. 55) Rzeczywiste charakterystyki wyjściowe tranzystora BC108A.
wartość w punkcie A: 2,77 mA
wartość w punkcie B: 5,05 V
prąd bazy: 20 uA
IB [uA] |
10,00 |
20,00 |
30,00 |
40,00 |
50,00 |
60,00 |
70,00 |
80,00 |
90,00 |
100,00 |
IC [mA] |
1,37 |
3,26 |
5,25 |
7,31 |
9,42 |
11,58 |
13,80 |
16,07 |
18,41 |
20,81 |
hFE |
136,66 |
162,75 |
174,92 |
182,77 |
188,47 |
192,96 |
197,10 |
200,91 |
204,54 |
208,08 |
Tabela 1. Wartości współczynników wzmocnienia prądowego uzyskane dla tranzystora BC107.
IB [uA] |
10,00 |
20,00 |
30,00 |
40,00 |
50,00 |
60,00 |
70,00 |
80,00 |
90,00 |
100,00 |
IC [mA] |
1,06 |
2,77 |
4,70 |
6,73 |
8,82 |
10,96 |
13,14 |
15,35 |
17,59 |
19,87 |
hFE |
105,94 |
138,68 |
156,74 |
168,19 |
176,40 |
182,62 |
187,74 |
191,91 |
195,47 |
198,66 |
Tabela 2. Wartości współczynników wzmocnienia prądowego uzyskane dla tranzystora BC108A.
IB [uA] |
10,00 |
20,00 |
30,00 |
40,00 |
50,00 |
60,00 |
70,00 |
80,00 |
90,00 |
100,00 |
IC [mA] |
2,72 |
5,77 |
8,94 |
12,21 |
15,58 |
19,07 |
22,65 |
26,35 |
30,15 |
34,02 |
IC/IB |
271,64 |
288,71 |
298,10 |
305,36 |
311,66 |
317,81 |
323,62 |
329,35 |
335,01 |
340,22 |
Tabela 3. Wartości współczynników wzmocnienia prądowego uzyskane dla tranzystora BC109B.
IB [uA] |
100,00 |
90,00 |
80,00 |
70,00 |
60,00 |
50,00 |
40,00 |
30,00 |
20,00 |
10,00 |
IC [mA] |
20,46 |
18,74 |
16,90 |
14,98 |
12,97 |
10,91 |
8,79 |
6,63 |
4,44 |
2,22 |
hFE |
204,60 |
208,20 |
211,24 |
213,95 |
216,23 |
218,20 |
219,72 |
221,00 |
221,79 |
222,27 |
Tabela 4. Wartości współczynników wzmocnienia prądowego uzyskane dla tranzystora BC178A.
IB [uA] |
100,00 |
90,00 |
80,00 |
70,00 |
60,00 |
50,00 |
40,00 |
30,00 |
20,00 |
10,00 |
IC [mA] |
13,81 |
12,57 |
11,21 |
9,80 |
8,35 |
6,88 |
5,40 |
3,94 |
2,49 |
1,11 |
hFE |
138,11 |
139,70 |
140,13 |
139,95 |
139,13 |
137,60 |
135,10 |
131,20 |
124,73 |
111,19 |
Tabela 5. Wartości współczynników wzmocnienia prądowego uzyskane dla tranzystora BC308.
IB [uA] |
10,00 |
20,00 |
30,00 |
40,00 |
50,00 |
60,00 |
70,00 |
80,00 |
90,00 |
100,00 |
IC [mA] |
2,36 |
4,80 |
7,28 |
9,79 |
12,33 |
14,92 |
17,55 |
20,20 |
22,90 |
25,63 |
hFE |
235,83 |
240,16 |
242,78 |
244,68 |
246,68 |
248,72 |
250,64 |
252,54 |
254,45 |
256,30 |
Tabela 6. Wartości współczynników wzmocnienia prądowego uzyskane dla tranzystora BC337.