Qucs-GUI  0.0.19
/home/travis/build/Qucs/qucs/qucs/qucs/components/HBT_X.cpp
Go to the documentation of this file.
00001 /*
00002  * HBT_X.cpp - device implementations for HBT_X module
00003  *
00004  * This is free software; you can redistribute it and/or modify
00005  * it under the terms of the GNU General Public License as published by
00006  * the Free Software Foundation; either version 2, or (at your option)
00007  * any later version.
00008  * 
00009  */
00010 
00011 #include "HBT_X.h"
00012 
00013 HBT_X::HBT_X()
00014 {
00015   Description = QObject::tr ("HBT model by Ferdinand-Braun-Institut (FBH), Berlin");
00016 
00017   Props.append (new Property ("Mode", "1", false,
00018     QObject::tr ("Ignored")));
00019   Props.append (new Property ("Noise", "1", false,
00020     QObject::tr ("Ignored")));
00021   Props.append (new Property ("Debug", "0", false,
00022     QObject::tr ("Ignored")));
00023   Props.append (new Property ("DebugPlus", "0", false,
00024     QObject::tr ("Ignored")));
00025   Props.append (new Property ("Temp", "25.0", false,
00026     QObject::tr ("Device operating temperature, Celsius")));
00027   Props.append (new Property ("Rth", "0.1", false,
00028     QObject::tr ("Thermal resistance, K/W")));
00029   Props.append (new Property ("Cth", "700e-9", false,
00030     QObject::tr ("Thermal capacitance")));
00031   Props.append (new Property ("N", "1", false,
00032     QObject::tr ("Scaling factor, number of emitter fingers")));
00033   Props.append (new Property ("L", "30e-6", false,
00034     QObject::tr ("Length of emitter finger, m")));
00035   Props.append (new Property ("W", "1e-6", false,
00036     QObject::tr ("Width of emitter finger, m")));
00037   Props.append (new Property ("Jsf", "20e-24", false,
00038     QObject::tr ("Forward saturation current density, A/um^2")));
00039   Props.append (new Property ("nf", "1.0", false,
00040     QObject::tr ("Forward current emission coefficient")));
00041   Props.append (new Property ("Vg", "1.3", false,
00042     QObject::tr ("Forward thermal activation energy, V, (0 == disables temperature dependence)")));
00043   Props.append (new Property ("Jse", "0.0", false,
00044     QObject::tr ("B-E leakage saturation current density, A/um^2")));
00045   Props.append (new Property ("ne", "0.0", false,
00046     QObject::tr ("B-E leakage emission coefficient")));
00047   Props.append (new Property ("Rbxx", "1e6", false,
00048     QObject::tr ("Limiting resistor of B-E leakage diode, Ohm")));
00049   Props.append (new Property ("Vgb", "0.0", false,
00050     QObject::tr ("B-E leakage thermal activation energy, V, (0 == disables temperature dependence)")));
00051   Props.append (new Property ("Jsee", "0.0", false,
00052     QObject::tr ("2nd B-E leakage saturation current density, A/um^2")));
00053   Props.append (new Property ("nee", "0.0", false,
00054     QObject::tr ("2nd B-E leakage emission coefficient")));
00055   Props.append (new Property ("Rbbxx", "1e6", false,
00056     QObject::tr ("2nd Limiting resistor of B-E leakage diode, Ohm")));
00057   Props.append (new Property ("Vgbb", "0.0", false,
00058     QObject::tr ("2nd B-E leakage thermal activation energy, V, (0 == disables temperature dependence)")));
00059   Props.append (new Property ("Jsr", "20e-18", false,
00060     QObject::tr ("Reverse saturation current density, A/um^2")));
00061   Props.append (new Property ("nr", "1.0", false,
00062     QObject::tr ("Reverse current emission coefficient")));
00063   Props.append (new Property ("Vgr", "0.0", false,
00064     QObject::tr ("Reverse thermal activation energy, V, (0 == disables temperature dependence)")));
00065   Props.append (new Property ("XCjc", "0.5", false,
00066     QObject::tr ("Fraction of Cjc that goes to internal base node")));
00067   Props.append (new Property ("Jsc", "0.0", false,
00068     QObject::tr ("B-C leakage saturation current density, A/um^2 (0. switches off diode)")));
00069   Props.append (new Property ("nc", "0.0", false,
00070     QObject::tr ("B-C leakage emission coefficient (0. switches off diode)")));
00071   Props.append (new Property ("Rcxx", "1e6", false,
00072     QObject::tr ("Limiting resistor of B-C leakage diode, Ohm")));
00073   Props.append (new Property ("Vgc", "0.0", false,
00074     QObject::tr ("B-C leakage thermal activation energy, V, (0 == disables temperature dependence)")));
00075   Props.append (new Property ("Bf", "100.0", false,
00076     QObject::tr ("Ideal forward beta")));
00077   Props.append (new Property ("kBeta", "0.0", false,
00078     QObject::tr ("Temperature coefficient of forward current gain, -1/K,  (0 == disables temperature dependence)")));
00079   Props.append (new Property ("Br", "1.0", false,
00080     QObject::tr ("Ideal reverse beta")));
00081   Props.append (new Property ("VAF", "0.0", false,
00082     QObject::tr ("Forward Early voltage, V,  (0 == disables Early Effect)")));
00083   Props.append (new Property ("VAR", "0.0", false,
00084     QObject::tr ("Reverse Early voltage, V, (0 == disables Early Effect)")));
00085   Props.append (new Property ("IKF", "0.0", false,
00086     QObject::tr ("Forward high-injection knee current, A, (0 == disables Webster Effect)")));
00087   Props.append (new Property ("IKR", "0.0", false,
00088     QObject::tr ("Reverse high-injection knee current, A, (0 == disables Webster Effect)")));
00089   Props.append (new Property ("Mc", "0.0", false,
00090     QObject::tr ("C-E breakdown exponent, (0 == disables collector break-down)")));
00091   Props.append (new Property ("BVceo", "0.0", false,
00092     QObject::tr ("C-E breakdown voltage, V, (0 == disables collector break-down)")));
00093   Props.append (new Property ("kc", "0.0", false,
00094     QObject::tr ("C-E breakdown factor, (0 == disables collector break-down)")));
00095   Props.append (new Property ("BVebo", "0.0", false,
00096     QObject::tr ("B-E breakdown voltage, V, (0 == disables emitter break-down)")));
00097   Props.append (new Property ("Tr", "1.0e-15", false,
00098     QObject::tr ("Ideal reverse transit time, s")));
00099   Props.append (new Property ("Trx", "1.0e-15", false,
00100     QObject::tr ("Extrinsic BC diffusion capacitance, F")));
00101   Props.append (new Property ("Tf", "1.0e-12", false,
00102     QObject::tr ("Ideal forward transit time, s")));
00103   Props.append (new Property ("Tft", "0.0", false,
00104     QObject::tr ("Temperature coefficient of forward transit time")));
00105   Props.append (new Property ("Thcs", "0.0", false,
00106     QObject::tr ("Excess transit time coefficient at base push-out")));
00107   Props.append (new Property ("Ahc", "0.0", false,
00108     QObject::tr ("Smoothing parameter for Thcs")));
00109   Props.append (new Property ("Cje", "1.0e-15", false,
00110     QObject::tr ("B-E zero-bias depletion capacitance, F/um^2")));
00111   Props.append (new Property ("mje", "0.5", false,
00112     QObject::tr ("B-E junction exponential factor")));
00113   Props.append (new Property ("Vje", "1.3", false,
00114     QObject::tr ("B-E junction built-in potential, V")));
00115   Props.append (new Property ("Cjc", "1.0e-15", false,
00116     QObject::tr ("B-C zero-bias depletion capacitance, F/um^2")));
00117   Props.append (new Property ("mjc", "0.5", false,
00118     QObject::tr ("B-C junction exponential factor")));
00119   Props.append (new Property ("Vjc", "1.3", false,
00120     QObject::tr ("B-C junction built-in potential, V")));
00121   Props.append (new Property ("kjc", "1.0", false,
00122     QObject::tr ("not used")));
00123   Props.append (new Property ("Cmin", "0.1e-15", false,
00124     QObject::tr ("Minimum B-C depletion capacitance (Vbc dependence), F/um^2")));
00125   Props.append (new Property ("J0", "1e-3", false,
00126     QObject::tr ("Collector current where Cbc reaches Cmin, A/um^2 (0 == disables Cbc reduction)")));
00127   Props.append (new Property ("XJ0", "1.0", false,
00128     QObject::tr ("Fraction of Cmin, lower limit of BC capacitance (Ic dependence)")));
00129   Props.append (new Property ("Rci0", "1e-3", false,
00130     QObject::tr ("Onset of base push-out at low voltages, Ohm*um^2 (0 == disables base push-out)")));
00131   Props.append (new Property ("Jk", "4e-4", false,
00132     QObject::tr ("Onset of base push-out at high voltages, A/um^2, (0 == disables base push-out)")));
00133   Props.append (new Property ("RJk", "1e-3", false,
00134     QObject::tr ("Slope of Jk at high currents , Ohm*um^2")));
00135   Props.append (new Property ("Vces", "1e-3", false,
00136     QObject::tr ("Voltage shift of base push-out onset, V")));
00137   Props.append (new Property ("Rc", "1.0", false,
00138     QObject::tr ("Collector resistance, Ohm/finger")));
00139   Props.append (new Property ("Re", "1.0", false,
00140     QObject::tr ("Emitter resistance, Ohm/finger")));
00141   Props.append (new Property ("Rb", "1.0", false,
00142     QObject::tr ("Extrinsic base resistance, Ohm/finger")));
00143   Props.append (new Property ("Rb2", "1.0", false,
00144     QObject::tr ("Inner Base ohmic resistance, Ohm/finger")));
00145   Props.append (new Property ("Lc", "0.0", false,
00146     QObject::tr ("Collector inductance, H")));
00147   Props.append (new Property ("Le", "0.0", false,
00148     QObject::tr ("Emitter inductance, H")));
00149   Props.append (new Property ("Lb", "0.0", false,
00150     QObject::tr ("Base inductance, H")));
00151   Props.append (new Property ("Cq", "0.0", false,
00152     QObject::tr ("Extrinsic B-C capacitance, F")));
00153   Props.append (new Property ("Cpb", "0.0", false,
00154     QObject::tr ("Extrinsic base capacitance, F")));
00155   Props.append (new Property ("Cpc", "0.0", false,
00156     QObject::tr ("Extrinsic collector capacitance, F")));
00157   Props.append (new Property ("Kfb", "0.0", false,
00158     QObject::tr ("Flicker-noise coefficient")));
00159   Props.append (new Property ("Afb", "0.0", false,
00160     QObject::tr ("Flicker-noise exponent")));
00161   Props.append (new Property ("Ffeb", "0.0", false,
00162     QObject::tr ("Flicker-noise frequency exponent")));
00163   Props.append (new Property ("Kb", "0.0", false,
00164     QObject::tr ("Burst noise coefficient")));
00165   Props.append (new Property ("Ab", "0.0", false,
00166     QObject::tr ("Burst noise exponent")));
00167   Props.append (new Property ("Fb", "0.0", false,
00168     QObject::tr ("Burst noise corner frequency, Hz")));
00169   Props.append (new Property ("Kfe", "0.0", false,
00170     QObject::tr ("Flicker-noise coefficient")));
00171   Props.append (new Property ("Afe", "0.0", false,
00172     QObject::tr ("Flicker-noise exponent")));
00173   Props.append (new Property ("Ffee", "0.0", false,
00174     QObject::tr ("Flicker-noise frequency exponent")));
00175   Props.append (new Property ("Tnom", "20.0", false,
00176     QObject::tr ("Ambient temperature at which the parameters were determined")));
00177 
00178 
00179   // normal bipolar
00180   Lines.append(new Line(-10,-15,-10, 15,QPen(Qt::darkBlue,3)));
00181   Lines.append(new Line(-30,  0,-10,  0,QPen(Qt::darkBlue,2)));
00182   Lines.append(new Line(-10, -5,  0,-15,QPen(Qt::darkBlue,2)));
00183   Lines.append(new Line(  0,-15,  0,-30,QPen(Qt::darkBlue,2)));
00184   Lines.append(new Line(-10,  5,  0, 15,QPen(Qt::darkBlue,2)));
00185   Lines.append(new Line(  0, 15,  0, 30,QPen(Qt::darkBlue,2)));
00186 
00187   // thermal node
00188   Lines.append(new Line(-30, 20,-20, 20,QPen(Qt::darkBlue,2)));
00189   Lines.append(new Line(-20, 17,-20, 23,QPen(Qt::darkBlue,2)));
00190   
00191   // arrow
00192   Lines.append(new Line( -6, 15,  0, 15,QPen(Qt::darkBlue,2)));
00193   Lines.append(new Line(  0,  9,  0, 15,QPen(Qt::darkBlue,2)));
00194 
00195   // H
00196   Lines.append(new Line(-30,-30,-30,-24,QPen(Qt::darkBlue,1)));
00197   Lines.append(new Line(-30,-27,-26,-27,QPen(Qt::darkBlue,1)));
00198   Lines.append(new Line(-26,-30,-26,-24,QPen(Qt::darkBlue,1)));
00199   // B
00200   Lines.append(new Line(-23,-30,-23,-24,QPen(Qt::darkBlue,1)));
00201   Lines.append(new Line(-24,-30,-20,-30,QPen(Qt::darkBlue,1)));
00202   Lines.append(new Line(-23,-27,-20,-27,QPen(Qt::darkBlue,1)));
00203   Lines.append(new Line(-24,-24,-20,-24,QPen(Qt::darkBlue,1)));
00204   Lines.append(new Line(-20,-30,-20,-27,QPen(Qt::darkBlue,1)));
00205   Lines.append(new Line(-20,-27,-20,-24,QPen(Qt::darkBlue,1)));
00206   // T
00207   Lines.append(new Line(-18,-30,-14,-30,QPen(Qt::darkBlue,1)));
00208   Lines.append(new Line(-16,-30,-16,-24,QPen(Qt::darkBlue,1)));
00209 
00210   Ports.append(new Port(  0,-30)); // collector
00211   Ports.append(new Port(-30,  0)); // base
00212   Ports.append(new Port(  0, 30)); // emitter
00213   Ports.append(new Port(-30, 20)); // thermal node
00214 
00215   x1 = -30; y1 = -30;
00216   x2 =   4; y2 =  30;
00217 
00218   tx = x2 + 4;
00219   ty = y1 + 4;
00220   Model = "HBT_X";
00221   Name  = "T";
00222 }
00223 
00224 Component * HBT_X::newOne()
00225 {
00226   HBT_X * p = new HBT_X();
00227   p->recreate(0); 
00228   return p;
00229 }
00230 
00231 Element * HBT_X::info(QString& Name, char * &BitmapFile, bool getNewOne)
00232 {
00233   Name = QObject::tr("FBH HBT");
00234   BitmapFile = (char *) "npn_therm";
00235 
00236   if(getNewOne) return new HBT_X();
00237   return 0;
00238 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines