My Project  0.0.16
QUCS Mapping
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HBT_X.cpp
Go to the documentation of this file.
1 /*
2  * HBT_X.cpp - device implementations for HBT_X module
3  *
4  * This is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2, or (at your option)
7  * any later version.
8  *
9  */
10 
11 #include "HBT_X.h"
12 
14 {
15  Description = QObject::tr ("HBT model by Ferdinand-Braun-Institut (FBH), Berlin");
16 
17  Props.append (new Property ("Mode", "1", false,
18  QObject::tr ("Ignored")));
19  Props.append (new Property ("Noise", "1", false,
20  QObject::tr ("Ignored")));
21  Props.append (new Property ("Debug", "0", false,
22  QObject::tr ("Ignored")));
23  Props.append (new Property ("DebugPlus", "0", false,
24  QObject::tr ("Ignored")));
25  Props.append (new Property ("Temp", "25.0", false,
26  QObject::tr ("Device operating temperature, Celsius")));
27  Props.append (new Property ("Rth", "0.1", false,
28  QObject::tr ("Thermal resistance, K/W")));
29  Props.append (new Property ("Cth", "700e-9", false,
30  QObject::tr ("Thermal capacitance")));
31  Props.append (new Property ("N", "1", false,
32  QObject::tr ("Scaling factor, number of emitter fingers")));
33  Props.append (new Property ("L", "30e-6", false,
34  QObject::tr ("Length of emitter finger, m")));
35  Props.append (new Property ("W", "1e-6", false,
36  QObject::tr ("Width of emitter finger, m")));
37  Props.append (new Property ("Jsf", "20e-24", false,
38  QObject::tr ("Forward saturation current density, A/um^2")));
39  Props.append (new Property ("nf", "1.0", false,
40  QObject::tr ("Forward current emission coefficient")));
41  Props.append (new Property ("Vg", "1.3", false,
42  QObject::tr ("Forward thermal activation energy, V, (0 == disables temperature dependence)")));
43  Props.append (new Property ("Jse", "0.0", false,
44  QObject::tr ("B-E leakage saturation current density, A/um^2")));
45  Props.append (new Property ("ne", "0.0", false,
46  QObject::tr ("B-E leakage emission coefficient")));
47  Props.append (new Property ("Rbxx", "1e6", false,
48  QObject::tr ("Limiting resistor of B-E leakage diode, Ohm")));
49  Props.append (new Property ("Vgb", "0.0", false,
50  QObject::tr ("B-E leakage thermal activation energy, V, (0 == disables temperature dependence)")));
51  Props.append (new Property ("Jsee", "0.0", false,
52  QObject::tr ("2nd B-E leakage saturation current density, A/um^2")));
53  Props.append (new Property ("nee", "0.0", false,
54  QObject::tr ("2nd B-E leakage emission coefficient")));
55  Props.append (new Property ("Rbbxx", "1e6", false,
56  QObject::tr ("2nd Limiting resistor of B-E leakage diode, Ohm")));
57  Props.append (new Property ("Vgbb", "0.0", false,
58  QObject::tr ("2nd B-E leakage thermal activation energy, V, (0 == disables temperature dependence)")));
59  Props.append (new Property ("Jsr", "20e-18", false,
60  QObject::tr ("Reverse saturation current density, A/um^2")));
61  Props.append (new Property ("nr", "1.0", false,
62  QObject::tr ("Reverse current emission coefficient")));
63  Props.append (new Property ("Vgr", "0.0", false,
64  QObject::tr ("Reverse thermal activation energy, V, (0 == disables temperature dependence)")));
65  Props.append (new Property ("XCjc", "0.5", false,
66  QObject::tr ("Fraction of Cjc that goes to internal base node")));
67  Props.append (new Property ("Jsc", "0.0", false,
68  QObject::tr ("B-C leakage saturation current density, A/um^2 (0. switches off diode)")));
69  Props.append (new Property ("nc", "0.0", false,
70  QObject::tr ("B-C leakage emission coefficient (0. switches off diode)")));
71  Props.append (new Property ("Rcxx", "1e6", false,
72  QObject::tr ("Limiting resistor of B-C leakage diode, Ohm")));
73  Props.append (new Property ("Vgc", "0.0", false,
74  QObject::tr ("B-C leakage thermal activation energy, V, (0 == disables temperature dependence)")));
75  Props.append (new Property ("Bf", "100.0", false,
76  QObject::tr ("Ideal forward beta")));
77  Props.append (new Property ("kBeta", "0.0", false,
78  QObject::tr ("Temperature coefficient of forward current gain, -1/K, (0 == disables temperature dependence)")));
79  Props.append (new Property ("Br", "1.0", false,
80  QObject::tr ("Ideal reverse beta")));
81  Props.append (new Property ("VAF", "0.0", false,
82  QObject::tr ("Forward Early voltage, V, (0 == disables Early Effect)")));
83  Props.append (new Property ("VAR", "0.0", false,
84  QObject::tr ("Reverse Early voltage, V, (0 == disables Early Effect)")));
85  Props.append (new Property ("IKF", "0.0", false,
86  QObject::tr ("Forward high-injection knee current, A, (0 == disables Webster Effect)")));
87  Props.append (new Property ("IKR", "0.0", false,
88  QObject::tr ("Reverse high-injection knee current, A, (0 == disables Webster Effect)")));
89  Props.append (new Property ("Mc", "0.0", false,
90  QObject::tr ("C-E breakdown exponent, (0 == disables collector break-down)")));
91  Props.append (new Property ("BVceo", "0.0", false,
92  QObject::tr ("C-E breakdown voltage, V, (0 == disables collector break-down)")));
93  Props.append (new Property ("kc", "0.0", false,
94  QObject::tr ("C-E breakdown factor, (0 == disables collector break-down)")));
95  Props.append (new Property ("BVebo", "0.0", false,
96  QObject::tr ("B-E breakdown voltage, V, (0 == disables emitter break-down)")));
97  Props.append (new Property ("Tr", "1.0e-15", false,
98  QObject::tr ("Ideal reverse transit time, s")));
99  Props.append (new Property ("Trx", "1.0e-15", false,
100  QObject::tr ("Extrinsic BC diffusion capacitance, F")));
101  Props.append (new Property ("Tf", "1.0e-12", false,
102  QObject::tr ("Ideal forward transit time, s")));
103  Props.append (new Property ("Tft", "0.0", false,
104  QObject::tr ("Temperature coefficient of forward transit time")));
105  Props.append (new Property ("Thcs", "0.0", false,
106  QObject::tr ("Excess transit time coefficient at base push-out")));
107  Props.append (new Property ("Ahc", "0.0", false,
108  QObject::tr ("Smoothing parameter for Thcs")));
109  Props.append (new Property ("Cje", "1.0e-15", false,
110  QObject::tr ("B-E zero-bias depletion capacitance, F/um^2")));
111  Props.append (new Property ("mje", "0.5", false,
112  QObject::tr ("B-E junction exponential factor")));
113  Props.append (new Property ("Vje", "1.3", false,
114  QObject::tr ("B-E junction built-in potential, V")));
115  Props.append (new Property ("Cjc", "1.0e-15", false,
116  QObject::tr ("B-C zero-bias depletion capacitance, F/um^2")));
117  Props.append (new Property ("mjc", "0.5", false,
118  QObject::tr ("B-C junction exponential factor")));
119  Props.append (new Property ("Vjc", "1.3", false,
120  QObject::tr ("B-C junction built-in potential, V")));
121  Props.append (new Property ("kjc", "1.0", false,
122  QObject::tr ("not used")));
123  Props.append (new Property ("Cmin", "0.1e-15", false,
124  QObject::tr ("Minimum B-C depletion capacitance (Vbc dependence), F/um^2")));
125  Props.append (new Property ("J0", "1e-3", false,
126  QObject::tr ("Collector current where Cbc reaches Cmin, A/um^2 (0 == disables Cbc reduction)")));
127  Props.append (new Property ("XJ0", "1.0", false,
128  QObject::tr ("Fraction of Cmin, lower limit of BC capacitance (Ic dependence)")));
129  Props.append (new Property ("Rci0", "1e-3", false,
130  QObject::tr ("Onset of base push-out at low voltages, Ohm*um^2 (0 == disables base push-out)")));
131  Props.append (new Property ("Jk", "4e-4", false,
132  QObject::tr ("Onset of base push-out at high voltages, A/um^2, (0 == disables base push-out)")));
133  Props.append (new Property ("RJk", "1e-3", false,
134  QObject::tr ("Slope of Jk at high currents , Ohm*um^2")));
135  Props.append (new Property ("Vces", "1e-3", false,
136  QObject::tr ("Voltage shift of base push-out onset, V")));
137  Props.append (new Property ("Rc", "1.0", false,
138  QObject::tr ("Collector resistance, Ohm/finger")));
139  Props.append (new Property ("Re", "1.0", false,
140  QObject::tr ("Emitter resistance, Ohm/finger")));
141  Props.append (new Property ("Rb", "1.0", false,
142  QObject::tr ("Extrinsic base resistance, Ohm/finger")));
143  Props.append (new Property ("Rb2", "1.0", false,
144  QObject::tr ("Inner Base ohmic resistance, Ohm/finger")));
145  Props.append (new Property ("Lc", "0.0", false,
146  QObject::tr ("Collector inductance, H")));
147  Props.append (new Property ("Le", "0.0", false,
148  QObject::tr ("Emitter inductance, H")));
149  Props.append (new Property ("Lb", "0.0", false,
150  QObject::tr ("Base inductance, H")));
151  Props.append (new Property ("Cq", "0.0", false,
152  QObject::tr ("Extrinsic B-C capacitance, F")));
153  Props.append (new Property ("Cpb", "0.0", false,
154  QObject::tr ("Extrinsic base capacitance, F")));
155  Props.append (new Property ("Cpc", "0.0", false,
156  QObject::tr ("Extrinsic collector capacitance, F")));
157  Props.append (new Property ("Kfb", "0.0", false,
158  QObject::tr ("Flicker-noise coefficient")));
159  Props.append (new Property ("Afb", "0.0", false,
160  QObject::tr ("Flicker-noise exponent")));
161  Props.append (new Property ("Ffeb", "0.0", false,
162  QObject::tr ("Flicker-noise frequency exponent")));
163  Props.append (new Property ("Kb", "0.0", false,
164  QObject::tr ("Burst noise coefficient")));
165  Props.append (new Property ("Ab", "0.0", false,
166  QObject::tr ("Burst noise exponent")));
167  Props.append (new Property ("Fb", "0.0", false,
168  QObject::tr ("Burst noise corner frequency, Hz")));
169  Props.append (new Property ("Kfe", "0.0", false,
170  QObject::tr ("Flicker-noise coefficient")));
171  Props.append (new Property ("Afe", "0.0", false,
172  QObject::tr ("Flicker-noise exponent")));
173  Props.append (new Property ("Ffee", "0.0", false,
174  QObject::tr ("Flicker-noise frequency exponent")));
175  Props.append (new Property ("Tnom", "20.0", false,
176  QObject::tr ("Ambient temperature at which the parameters were determined")));
177 
178 
179  // normal bipolar
180  Lines.append(new Line(-10,-15,-10, 15,QPen(QPen::darkBlue,3)));
181  Lines.append(new Line(-30, 0,-10, 0,QPen(QPen::darkBlue,2)));
182  Lines.append(new Line(-10, -5, 0,-15,QPen(QPen::darkBlue,2)));
183  Lines.append(new Line( 0,-15, 0,-30,QPen(QPen::darkBlue,2)));
184  Lines.append(new Line(-10, 5, 0, 15,QPen(QPen::darkBlue,2)));
185  Lines.append(new Line( 0, 15, 0, 30,QPen(QPen::darkBlue,2)));
186 
187  // thermal node
188  Lines.append(new Line(-30, 20,-20, 20,QPen(QPen::darkBlue,2)));
189  Lines.append(new Line(-20, 17,-20, 23,QPen(QPen::darkBlue,2)));
190 
191  // arrow
192  Lines.append(new Line( -6, 15, 0, 15,QPen(QPen::darkBlue,2)));
193  Lines.append(new Line( 0, 9, 0, 15,QPen(QPen::darkBlue,2)));
194 
195  // H
196  Lines.append(new Line(-30,-30,-30,-24,QPen(QPen::darkBlue,1)));
197  Lines.append(new Line(-30,-27,-26,-27,QPen(QPen::darkBlue,1)));
198  Lines.append(new Line(-26,-30,-26,-24,QPen(QPen::darkBlue,1)));
199  // B
200  Lines.append(new Line(-23,-30,-23,-24,QPen(QPen::darkBlue,1)));
201  Lines.append(new Line(-24,-30,-20,-30,QPen(QPen::darkBlue,1)));
202  Lines.append(new Line(-23,-27,-20,-27,QPen(QPen::darkBlue,1)));
203  Lines.append(new Line(-24,-24,-20,-24,QPen(QPen::darkBlue,1)));
204  Lines.append(new Line(-20,-30,-20,-27,QPen(QPen::darkBlue,1)));
205  Lines.append(new Line(-20,-27,-20,-24,QPen(QPen::darkBlue,1)));
206  // T
207  Lines.append(new Line(-18,-30,-14,-30,QPen(QPen::darkBlue,1)));
208  Lines.append(new Line(-16,-30,-16,-24,QPen(QPen::darkBlue,1)));
209 
210  Ports.append(new Port( 0,-30)); // collector
211  Ports.append(new Port(-30, 0)); // base
212  Ports.append(new Port( 0, 30)); // emitter
213  Ports.append(new Port(-30, 20)); // thermal node
214 
215  x1 = -30; y1 = -30;
216  x2 = 4; y2 = 30;
217 
218  tx = x2 + 4;
219  ty = y1 + 4;
220  Model = "HBT_X";
221  Name = "T";
222 }
223 
225 {
226  HBT_X * p = new HBT_X();
227  p->recreate(0);
228  return p;
229 }
230 
231 Element * HBT_X::info(QString& Name, char * &BitmapFile, bool getNewOne)
232 {
233  Name = QObject::tr("FBH HBT");
234  BitmapFile = (char *) "npn_therm";
235 
236  if(getNewOne) return new HBT_X();
237  return 0;
238 }