Смекни!
smekni.com

Математическое моделирование биполярных транзисторов типа p-n-p (стр. 3 из 3)

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. Лекции по дисциплине “Методы анализа и расчёта электронных схем”.