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

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


 


Страницы: 1, 2, 3



Реклама
В соцсетях
рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать