Jspice3
jfettemp.c
Go to the documentation of this file.
1 /***************************************************************************
2 JSPICE3 adaptation of Spice3f2 - Copyright (c) Stephen R. Whiteley 1992
3 Copyright 1990 Regents of the University of California. All rights reserved.
4 Authors: 1985 Thomas L. Quarles
5  1993 Stephen R. Whiteley
6 ****************************************************************************/
7 /********** new in 3f2
8 Sydney University mods Copyright(c) 1989 Anthony E. Parker, David J. Skellern
9  Laboratory for Communication Science Engineering
10  Sydney University Department of Electrical Engineering, Australia
11 **********/
12 
13 #include "spice.h"
14 #include <stdio.h>
15 #include "jfetdefs.h"
16 #include "const.h"
17 #include "util.h"
18 #include "sperror.h"
19 
20 
21 int
22 JFETtemp(inModel,ckt)
23  GENmodel *inModel;
24  CKTcircuit *ckt;
25  /* Pre-process the model parameters after a possible change
26  */
27 {
28  register JFETmodel *model = (JFETmodel*)inModel;
29  register JFETinstance *here;
30  double xfc;
31  double vt;
32  double vtnom;
33  double kt,kt1;
34  double arg,arg1;
35  double fact1,fact2;
36  double egfet,egfet1;
37  double pbfact,pbfact1;
38  double gmanew,gmaold;
39  double ratio1;
40  double pbo;
41  double cjfact,cjfact1;
42 
43  /* loop through all the diode models */
44  for( ; model != NULL; model = model->JFETnextModel ) {
45 
46  if(!(model->JFETtnomGiven)) {
47  model->JFETtnom = ckt->CKTnomTemp;
48  }
49  vtnom = CONSTKoverQ * model->JFETtnom;
50  fact1 = model->JFETtnom/REFTEMP;
51  kt1 = CONSTboltz * model->JFETtnom;
52  egfet1 = 1.16-(7.02e-4*model->JFETtnom*model->JFETtnom)/
53  (model->JFETtnom+1108);
54  arg1 = -egfet1/(kt1+kt1)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP));
55  pbfact1 = -2*vtnom * (1.5*log(fact1)+CHARGE*arg1);
56  pbo = (model->JFETgatePotential-pbfact1)/fact1;
57  gmaold = (model->JFETgatePotential-pbo)/pbo;
58  cjfact = 1/(1+.5*(4e-4*(model->JFETtnom-REFTEMP)-gmaold));
59 
60  if(model->JFETdrainResist != 0) {
61  model->JFETdrainConduct = 1/model->JFETdrainResist;
62  } else {
63  model->JFETdrainConduct = 0;
64  }
65  if(model->JFETsourceResist != 0) {
66  model->JFETsourceConduct = 1/model->JFETsourceResist;
67  } else {
68  model->JFETsourceConduct = 0;
69  }
70  if(model->JFETdepletionCapCoeff >.95) {
71  (*(SPfrontEnd->IFerror))(ERR_WARNING,
72  "%s: Depletion cap. coefficient too large, limited to .95",
73  &(model->JFETmodName));
74  model->JFETdepletionCapCoeff = .95;
75  }
76 
77  xfc = log(1 - model->JFETdepletionCapCoeff);
78  model->JFETf2 = exp((1+.5)*xfc);
79  model->JFETf3 = 1 - model->JFETdepletionCapCoeff * (1 + .5);
80  /* Modification for Sydney University JFET model */
81  model->JFETbFac = (1 - model->JFETb)
82  / (model->JFETgatePotential - model->JFETthreshold);
83  /* end Sydney University mod */
84 
85  /* loop through all the instances of the model */
86  for (here = model->JFETinstances; here != NULL ;
87  here=here->JFETnextInstance) {
88  if(!(here->JFETtempGiven)) {
89  here->JFETtemp = ckt->CKTtemp;
90  }
91  vt = here->JFETtemp * CONSTKoverQ;
92  fact2 = here->JFETtemp/REFTEMP;
93  ratio1 = here->JFETtemp/model->JFETtnom -1;
94  here->JFETtSatCur = model->JFETgateSatCurrent * exp(ratio1*1.11/vt);
95  here->JFETtCGS = model->JFETcapGS * cjfact;
96  here->JFETtCGD = model->JFETcapGD * cjfact;
97  kt = CONSTboltz*here->JFETtemp;
98  egfet = 1.16-(7.02e-4*here->JFETtemp*here->JFETtemp)/
99  (here->JFETtemp+1108);
100  arg = -egfet/(kt+kt) + 1.1150877/(CONSTboltz*(REFTEMP+REFTEMP));
101  pbfact = -2 * vt * (1.5*log(fact2)+CHARGE*arg);
102  here->JFETtGatePot = fact2 * pbo + pbfact;
103  gmanew = (here->JFETtGatePot-pbo)/pbo;
104  cjfact1 = 1+.5*(4e-4*(here->JFETtemp-REFTEMP)-gmanew);
105  here->JFETtCGS *= cjfact1;
106  here->JFETtCGD *= cjfact1;
107 
108  here->JFETcorDepCap = model->JFETdepletionCapCoeff *
109  here->JFETtGatePot;
110  here->JFETf1 = here->JFETtGatePot * (1 - exp((1-.5)*xfc))/(1-.5);
111  here->JFETvcrit = vt * log(vt/(CONSTroot2 * here->JFETtSatCur));
112 
113  }
114  }
115  return(OK);
116 }
int JFETtemp(GENmodel *inModel, CKTcircuit *ckt)
Definition: jfettemp.c:22
double JFETcapGS
Definition: jfetdefs.h:179
double JFETvcrit
Definition: jfetdefs.h:143
double JFETgatePotential
Definition: jfetdefs.h:181
double JFETtCGD
Definition: jfetdefs.h:141
double JFETcorDepCap
Definition: jfetdefs.h:142
double CONSTroot2
Definition: main.c:913
double JFETbFac
Definition: jfetdefs.h:194
double JFETthreshold
Definition: jfetdefs.h:174
double JFETtnom
Definition: jfetdefs.h:196
double JFETf1
Definition: jfetdefs.h:144
IFuid JFETmodName
Definition: jfetdefs.h:171
double CKTtemp
Definition: cktdefs.h:80
double CKTnomTemp
Definition: cktdefs.h:81
#define CHARGE
Definition: const.h:10
double JFETdrainConduct
Definition: jfetdefs.h:188
static double e
Definition: vectors.c:17
IFfrontEnd * SPfrontEnd
Definition: main.c:917
JFETinstance * JFETinstances
Definition: jfetdefs.h:169
double JFETdepletionCapCoeff
Definition: jfetdefs.h:183
double CONSTKoverQ
Definition: main.c:915
double JFETtSatCur
Definition: jfetdefs.h:138
double JFETtemp
Definition: jfetdefs.h:137
double JFETf2
Definition: jfetdefs.h:190
#define OK
Definition: iferrmsg.h:17
#define CONSTboltz
Definition: const.h:12
#define NULL
Definition: spdefs.h:121
unsigned JFETtempGiven
Definition: jfetdefs.h:131
double JFETsourceConduct
Definition: jfetdefs.h:189
double JFETtCGS
Definition: jfetdefs.h:140
double JFETgateSatCurrent
Definition: jfetdefs.h:182
#define ERR_WARNING
Definition: ifsim.h:517
struct sJFETmodel * JFETnextModel
Definition: jfetdefs.h:167
static char model[32]
Definition: subckt.c:76
double JFETb
Definition: jfetdefs.h:193
struct sJFETinstance * JFETnextInstance
Definition: jfetdefs.h:25
double JFETsourceResist
Definition: jfetdefs.h:178
unsigned JFETtnomGiven
Definition: jfetdefs.h:211
double JFETcapGD
Definition: jfetdefs.h:180
double JFETtGatePot
Definition: jfetdefs.h:139
double JFETdrainResist
Definition: jfetdefs.h:177
double JFETf3
Definition: jfetdefs.h:191
#define REFTEMP
Definition: const.h:13