gotoxy(col+3,row+19);
write('[CSUB] ');
gotoxy(col+40,row+19);
read(CCS);
gotoxy(col+39,row+19);
write(CCS);
gotoxy(col+3,row+20);
write('[Minimum junction resistance] ');
gotoxy(col+40,row+20);
read(RJ);
gotoxy(col+39,row+20);
write(RJ);
writeln;
1: gotoxy(col+6,row+25);
write('Accept parameters of transistor (Y/N) ');
an:=readkey;
case an of 'y': goto 3;
'Y': goto 3;
'n': goto 2;
'N': goto 2;
else
begin
sound(500);
delay(1000);
nosound;
goto 1;
end;
end;
3:;
end;
Procedure InputCurrent;
Label 1,2,3;
begin
clrscr;
TNOM:=27;
T:=21;
Ueb:=0.8;
Uec:=2;
Ucb:=-1.2;
gotoxy(col+25,row+1);
write(' Default parameters');
gotoxy(col+3,row+3);
write('[Nominal temperature (C)] ');
gotoxy(col+39,row+3);
write(TNOM);
gotoxy(col+3,row+4);
write('[Current temperature (C)] ');
gotoxy(col+39,row+4);
write(T);
gotoxy(col+3,row+5);
write('[Emitter-Base voltage] ');
gotoxy(col+39,row+5);
write(Ueb);
gotoxy(col+3,row+6);
write('[Emitter-Collector voltage] ');
gotoxy(col+39,row+6);
write(Uec);
gotoxy(col+3,row+7);
write('[Collector-Base voltage] ');
gotoxy(col+39,row+7);
write(Ucb);
1: gotoxy(col+6,row+25);
write('Accept current parameters (Y/N) ');
an:=readkey;
case an of 'y': goto 3;
'Y': goto 3;
'n': goto 2;
'N': goto 2;
else
begin
sound(500);
delay(1000);
nosound;
goto 1;
end;
end;
2: clrscr;
gotoxy(col+20,row+2);
write('Input next current parameters');
gotoxy(col+3,row+3);
write('[Nominal temperature (C)] ');
gotoxy(col+40,row+3);
read(TNOM);
gotoxy(col+39,row+3);
write(TNOM);
gotoxy(col+3,row+4);
write('[Current temperature (C)] ');
gotoxy(col+40,row+4);
read(T);
gotoxy(col+39,row+4);
write(T);
gotoxy(col+3,row+5);
write('[Emitter-Base voltage] ');
gotoxy(col+40,row+5);
read(Ueb);
gotoxy(col+39,row+5);
write(Ueb);
gotoxy(col+3,row+6);
write('[Emitter-Collector voltage] ');
gotoxy(col+40,row+6);
read(Uec);
gotoxy(col+39,row+6);
write(Uec);
if (Ueb = 0) or (Uec = 0) then
begin
gotoxy(col+3,row+7);
write('[Collector-Base voltage] ');
gotoxy(col+40,row+7);
read(Ucb);
gotoxy(col+39,row+7);
write(Ucb);
if Uec <> 0 then
begin
Ueb := Uec + Ucb;
gotoxy(col+39,row+5);
write(Ueb);
end
else
begin
Uec := Ueb - Ucb;
gotoxy(col+39,row+6);
write(Uec);
end;
goto 1;
end;
Ucb := -(Uec - Ueb);
gotoxy(col+3,row+7);
write('[Collector-Base voltage] ');
gotoxy(col+39,row+7);
write(Ucb);
3: TNOM:=TNOM+273.15;
T:=T+273.15;
BF:=BF*(1+(T-TNOM)*TCB*10e-6);
BR:=BR*(1+(T-TNOM)*TCB*10e-6);
gotoxy(col+39,row+8);
end;
procedure OutputResult;
begin
clrscr;
writeln(' It is result ');
K:=1.38e-23;
q:=1.6e-19;
expon:=exp(1.0);
FIt:=K*T/q;
gotoxy(col+3,row+3);
write('[FIt] ');
gotoxy(col+39,row+3);
write(FIt);
Is:=Is0 * (1+ Uec/VA) * st(T/TNOM,3) * st(expon,-EG/K*(1/T-1/TNOM));
gotoxy(col+3,row+4);
write('[Is]');
gotoxy(col+39,row+4);
write(Is);
Uc:=Fit*ln(FIt/(Is*RJ));
gotoxy(col+3,row+5);
write('[Uc] ');
gotoxy(col+39,row+5);
write(Uc);
if (st(expon,(Uec/FIt))-1) < 1e4800/Is then
Ic:= Is * (st(expon,Uc/FIt)-1)
else Ic:= 1e4800;
gotoxy(col+3,row+6);
write('[Ic]');
gotoxy(col+39,row+6);
write(Ic);
Model(Ueb,Ucb,Ieb,Icb,Ib,Iy);
gotoxy(col+3,row+7);
write('[Ieb] ');
gotoxy(col+39,row+7);
write(Ieb);
gotoxy(col+3,row+8);
write('[Icb] ');
gotoxy(col+39,row+8);
write(Icb);
gotoxy(col+3,row+9);
write('[Ib] ');
gotoxy(col+39,row+9);
write(Ib);
gotoxy(col+3,row+10);
write('[Iy] ');
gotoxy(col+39,row+10);
write(Iy);
Ik:=Iy-Icb;
gotoxy(col+3,row+11);
write('[Ik] ');
gotoxy(col+39,row+11);
write(Ik);
Ie:=Iy+Ieb;
gotoxy(col+3,row+12);
write('[Ie] ');
gotoxy(col+39,row+12);
write(Ie);
If Ueb < VJE/2 then CJE := CJE0* 1 / st(1- Ueb/VJE,MJE)
else CJE := st(2,MJE) * CJE0 * (MJE* Ueb / VJE/2 + 1 - MJE);
gotoxy(col+3,row+13);
write('[CJE] ');
gotoxy(col+39,row+13);
write(CJE);
If Ieb > 0 then CDE := Ieb * BF * TAUF / FIt
else CDE := 0;
gotoxy(col+3,row+14);
write('[CDE] ');
gotoxy(col+39,row+14);
write(CDE);
CBE:=CJE+CDE;
gotoxy(col+3,row+15);
write('[CBE] ');
gotoxy(col+39,row+15);
write(CBE);
If Ucb < (VJC / 2) then CJC := CJC0 * 1 / st(1- Ucb/VJC,MJC)
else CJC := 2 * st(2,MJC) * CJC0 * (MJC * Ucb / VJC / 2 + 1 - MJC);
gotoxy(col+3,row+16);
write('[CJC] ');
gotoxy(col+39,row+16);
write(CJC);
If Icb > 0 then CDC := Icb * BR * TAUR / FIt
else CDC := 0;
gotoxy(col+3,row+17);
write('[CDC] ');
gotoxy(col+39,row+17);
write(CDC);
CBC := CJC + CDC;
gotoxy(col+3,row+18);
write('[CBC] ');
gotoxy(col+39,row+18);
write(CBC);
gotoxy(col+6,row+25);
write('Pres any key to Main menu ');
readkey;
end;
procedure IGraph;
var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
i,x0,y0: Integer;
stro1,stro2,stro3,stro4:string;
begin
grDriver := Detect;
InitGraph(grDriver, grMode,'');
ErrCode := GraphResult;
if ErrCode = grOk then
begin { Do graphics }
x0:=320;
y0:=350;
Kyf:=0;
OutTextXY(250,10,'Graphic Ib=f(-Ueb)');
Line(x0, y0-150, x0, Y0+150);
Line(x0-200, y0, X0+200, Y0);
setcolor(0);
LineTo(x0+200, y0-300);
setcolor(2);
for i:=200 downto -200 do
begin
Model(Ueb*(i)/200,-(Uec-Ueb*(i)/200),Ieb,Icb,Ib,Iy);
if Kyf=0 then
begin
Kyf:=300/Ib;
Str(Ieb,stro1);
Str(Ueb,stro2);
end;
if abs(Kyf*Ib)< 10e5 then Lineto(x0+i, y0-round(Kyf*Ib));
end;
Str(-Ieb,stro3);
Str(-Ueb,stro4);
OutTextXY(x0-40,Y0-300,'+Ib = ');
OutTextXY(x0+3,Y0-300,Stro1);
OutTextXY(x0+60,Y0+10,'+Ueb = ');
OutTextXY(x0+100,Y0+10,Stro2);
OutTextXY(x0-250,Y0+10,'-Ib = ');
OutTextXY(x0-210,Y0+10,Stro3);
OutTextXY(x0-300,Y0-10,'-Ueb = ');
OutTextXY(x0-250,Y0-10,Stro4);
OutTextXY(40,470,'Pres any key to Main menu');
Readkey;
CloseGraph;
end
else Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end;
procedure OGraph;
var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
i,x0,y0: Integer;
stro1,stro2,stro3,stro4:string;
begin
grDriver := Detect;
InitGraph(grDriver, grMode,'');
ErrCode := GraphResult;
if ErrCode = grOk then
begin { Do graphics }
x0:=320;
y0:=240;
Kyf:=0;
OutTextXY(250,10,'Graphic Ik=f(Uec)');
Line(x0, y0-150, x0, Y0+150);
Line(x0-200, y0, X0+200, Y0);
setcolor(0);
LineTo(x0+200, round(y0-Kyf*Ik));
setcolor(2);
Kyf:=0;
for i:=200 downto -200 do
begin
if (i>0) or (i=0) then
begin
Is:=Is0 * (1+ Uec*(i)/200/VA) * st(T/TNOM,3) * st(expon,-EG/K*(1/T-1/TNOM));
Uc:=Fit*ln(FIt/(Is*RJ));
Ic:= Is * (st(expon,Uc/FIt)-1);
Model(Ueb,Ueb-Uec*(i)/200,Ieb,Icb,Ib,Iy);
Ik:=Iy-Icb;
end;
if i<0 then
begin
Is:=Is0 * (1- Uec*(i)/200/VA) * st(T/TNOM,3) * st(expon,-EG/K*(1/T-1/TNOM));
Uc:=Fit*ln(FIt/(Is*RJ));
Ic:= Is * (st(expon,Uc/FIt)-1);
Model(Ueb+Uec*(i)/200,Ueb,Ieb,Icb,Ib,Iy);
Ik:=(Iy-Icb);
end;
if Kyf=0 then
begin
Kyf:=abs(20/Ik);
Str(Ik,stro1);
Str(Uec,stro2);
setcolor(0);
LineTo(x0+200, round(y0-Kyf*Ik));
setcolor(2);
end;
if abs(Kyf*Ik)< 10e5 then
Lineto(x0+i, y0-round(Kyf*Ik));
end;
OutTextXY(x0-40,Y0-210,'+Ik = ');
OutTextXY(x0+3,Y0-210,Stro1);
OutTextXY(x0+60,Y0+10,'+Uec = ');
OutTextXY(x0+100,Y0+10,Stro2);
OutTextXY(40,470,'Pres any key to Main menu');
Readkey;
CloseGraph;
end
else Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end;
begin
textbackground(1);
textcolor(14);
col:=-2;
row:=0;
repeat
clrscr;
writeln(' Mogel p-n-p transistor Eabers-Mol whith 1 SIDI');
writeln;
writeln(' Main menu');
writeln;
writeln('1: Input parameters of transistor');
writeln('2: Input current parameters');
writeln('3: Output text result');
writeln('4: Input-graphic result');
writeln('5: Output-graphic result');
writeln('ECS:exit');
key:=Readkey;
case key of '1': InputTrans;
'2': InputCurrent;
'3': OutputResult;
'4': IGraph;
'5': OGraph;
#27: halt ;
else
begin
sound(500);
delay(1000);
nosound;
end;
end;
until key=#27;
{donewincrt;}
end.
4. Решение контрольной задачи 5. Моделирование электронных устройств
.model KT315v NPN(Is=21.11f Xti=3 Eg=1.11 Vaf=157 Bf=81.09 Ise=321.2f
+ Ne=1.458 Ikf=.2017 Nk=.4901 Xtb=1.5 Br=1 Isc=84.36f Nc=1.317
+ Ikr=1.671 Rb=12 Rc=1.426 Cjc=9.716p Mjc=.33 Vjc=.75 Fc=.5 Cje=18.5p
+ Mje=.33 Vje=.75 Tr=275.6n Tf=321.4p Itf=1 Xtf=2 Vtf=60)
График вида зависимости Ic = f(Ube) График вида зависимости Ube = f(Ibe)
программы ORCAD 9.1; моей программы
Программа, написанная по указанному алгоритму, подтвердила справедливость этих алгоритмов и относительную точность математического описания биполярных транзисторов. Результаты полученной программы сравнивались с профессиональными CAD программами для одних и тех же транзисторов и одинаковых соответствующих параметрах. Немного изменяя входные параметры возможно достаточно близко приблизится к их результатам.
Полученная программа позволяет решать поставленные перед нею проблемы, но не обладает удобством в использовании и требует доработки.
В дальнейшем возможно добавление более сложных моделей, позволяющих проводить анализ по постоянному току, но и по переменному на высоких частотах, в режиме малого сигнала.
Для уменьшения погрешности при вычислениях можно написать программу под Windows, где разрядность данных увеличена и достигает 64 бита. Этот метод позволит улучшить удобство в работе с программой.
1. Влах Н., Сингхал К. Машинные методы анализа и проектирования электронных схем.
М. : Радио и связь, 1988 – 560 стр.
2. В. И. Лачин, Н.С. Савёлов Электроника.
3. Носов Ю. Р., Петросянц К. О., Шилин В. А. Математические модели Элементов интегральной электроники.
М. : Сов. радио, 1976 – 304 стр.
4. Сигорский В. П., Петренко А.И. Алгоритмы анализа электронных схем.
М. : Сов. радио, 1976 – 608 стр.
5. Мигулин И. Н., Чаповский М. З. Усилительные устройства на транзисторах.
6. Лекции по дисциплине “Методы анализа и расчёта электронных схем”.