Qucs-GUI
0.0.19
|
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 }