CE Collector Current

Thread Starter

aac044210

Joined Nov 19, 2019
178
Hi:

Ebers-Moll Formula


IS = 1E-14 Amps
VBE = 0.655 Volts
VT = 0.02586 Volts


IC = IS * [EXP(VBE / VT) - 1] = 0.001000257 Amps which agrees to LTS

This formula works but I used VBE from the LTS sim. How did LTS
arrive at 0.655 volts for VBE?



Thanks,

aac
 

Attachments

Last edited:

MrAl

Joined Jun 17, 2014
11,389
Hi,

You also have to know the ideality factor N.
The formula exponent is not really Vbe/VT it is Vbe/(N*VT).
So it only defaults to Vbe/VT when N=1. You can assume that if you like but thought i would ask what you intend to use for N.

Once you have that, what you do is write the equations the way you normally would using a current source and diode and then when you solve for Vbe you end up with that exponential on the right such as:
Vbe=R*Is*(e^(Vbe/NVT)-1)+K

(or something like that)
and then the only variable left is Vbe so you solve for that numerically in most cases.
We could go over that example in more detail if you like.
Note this is an approximation anyway.

[LATER]
Ok with your circuit i used the following values:
aF=0.99
N=1.02
Is=5.235e-14
VT=0.026

and spice got 0.655402 and i got 0.655407 volts for Vbe.
I originally got 0.665 volts but then adjusted Is to match the spice result.

The last equation to be solved was:
5.5242160244736837*10^-11*e^(37.70739064856712*Vbe-1)+Vbe-100/57=0

and that was solved for Vbe. This came after calculating the circuit base voltage and emitter voltage and subtracting:
Vbe=Vb-Ve

Note that spice really goes though a bunch of conditional statements also so it's actually more complicated than this but this is still a useful example.
 
Last edited:

Thread Starter

aac044210

Joined Nov 19, 2019
178
Hi:

Thanks for all your work I really appreciate it.

So this is the formula to find vbe: Vbe=R*Is*(e^(Vbe/NVT)-1)+K

My Spice model for the 2N3904JP has Is = 1e-14

I guess I need to know what R, N and K are and vbe is on both sides so
I would need to re-arrange the terms so that vbe is only on the left side.

aac
 
Last edited:

Jony130

Joined Feb 17, 2009
5,487
For the ideal BJT:

.model 2N3904JP NPN( IS = 1E-14 BF=100 ) and the emission coefficient/ideality factor NF = 1 by default.

we will have:

Ib = (Vth - Vbe)/(Rth + (β+1)(RE1 + RE2)) = (1.75439V - 0.6V)/(0.824561kΩ * 101*105.747kΩ) = (1.75439V - 0.6V)/106.572kΩ = 10.832μA

This is the first iteration.

The second one is

Vbe = Vt* ln( Ib/Isb )

Where

Isb = Is/β = 1e-16


Therefore we have:
Vbe = 25.86mV*ln(10.832μA/1E-16) = 0.65706V (2)

Ib(3) = (1.75439V - 0.65706V)/106.572kΩ = 10.297μA

Vbe(3) = 25.86mV*ln(10.297μA /1E-16) = 0.65575V

Ib(4) = (1.75439V - 0.65575V)/106.572kΩ = 10.309μA

Vbe(4) = 25.86mV*ln(10.309μA/1E-16) = 0.65578V

Ib(5) = (1.75439V - 0.65578V)/106.572kΩ = 10.309μA


So, the solution is Vbe = 0.655V and Ib = 10.3μA and Ic = 100*Ib = 1.030mA

And we are forced to use iteration because nonlinear equations cannot be solved using algebra.

https://en.wikipedia.org/wiki/Diode_modelling#Explicit_solution
 
Last edited:

Thread Starter

aac044210

Joined Nov 19, 2019
178
For the ideal BJT:

.model 2N3904JP NPN( IS = 1E-14 BF=100 ) and the emission coefficient/ideality factor NF = 1 by default.

we will have:

Ib = (Vth - Vbe)/(Rth + (β+1)(RE1 + RE2)) = (1.75439V - 0.6V)/(0.824561kΩ * 101*105.747kΩ) = (1.75439V - 0.6V)/106.572kΩ = 10.832μA

This is the first iteration.

The second one is

Vbe = Vt* ln( Ib/Isb )

Where

Isb = Is/β = 1e-16


Therefore we have:
Vbe = 25.86mV*ln(10.832μA/1E-16) = 0.65706V (2)

Ib(3) = (1.75439V - 0.65706V)/106.572kΩ = 10.297μA

Vbe(3) = 25.86mV*ln(10.297μA /1E-16) = 0.65575V

Ib(4) = (1.75439V - 0.65575V)/106.572kΩ = 10.309μA

Vbe(4) = 25.86mV*ln(10.309μA/1E-16) = 0.65578V

Ib(5) = (1.75439V - 0.65578V)/106.572kΩ = 10.309μA


So, the solution is Vbe = 0.655V and Ib = 10.3μA and Ic = 100*Ib = 1.030mA

And we are forced to use iteration because nonlinear equations cannot be solved using algebra.

https://en.wikipedia.org/wiki/Diode_modelling#Explicit_solution
Hi Jony:

Thanks so much. My only question before I work through this is:
how do we know when we have done enough iterations? Is it
when Ib doesn't change from one iteration to the next?

aac
 

Jony130

Joined Feb 17, 2009
5,487
Is it
when Ib doesn't change from one iteration to the next?
Yes, but it also depends on the precision you want to achieve. Because you want 3 digit precision I could stop after the second iteration.
Because the differences between 0.657 and 0.655 is less than 1%.
 

Thread Starter

aac044210

Joined Nov 19, 2019
178
Yes, but it also depends on the precision you want to achieve. Because you want 3 digit precision I could stop after the second iteration.
Because the differences between 0.657 and 0.655 is less than 1%.
If you didn't have a sim, you wouldn't know that the result should be 0.655 that is why I asked
 

MrAl

Joined Jun 17, 2014
11,389
Hello again,

@jony
Maybe you can explain how you got your first equation. For example, where is the constant 1.75439 coming from?

@aac044210
It is interesting that another spice simulator gives a different result so what i did was replaced the transistor with the actual dummed down version we had been using all along which is really good enough for now. I'll get back here with some results later.
 

MrAl

Joined Jun 17, 2014
11,389
Hi:

Thanks for all your work I really appreciate it.

So this is the formula to find vbe: Vbe=R*Is*(e^(Vbe/NVT)-1)+K

My Spice model for the 2N3904JP has Is = 1e-14

I guess I need to know what R, N and K are and vbe is on both sides so
I would need to re-arrange the terms so that vbe is only on the left side.

aac
Hello again,

Ok here is a set of code that calculates the Vbe and device currents without knowing or assuming anything not given by the circuit itself.
Note it may be that spice uses the slightly dummed down version of the diode equation which can be tested by setting K either to 1 or 0. When K=1 we have the real diode equation but when we set K=0 we get a closer to spice result which may mean spice is using the simpler equation.

Here is the set of annotated code for Maxima and the circuit diagram and node numbering is shown in the attachment. Note R4 is the bulk value of the two emitter resistors in series.
Also note "%e" is just e but Maxima takes '%e' to be the constant 'e'.
To use this code as is you can copy it all from START to END and paste it into Maxima and just hit enter.

"START_OF_CODE";
"make K either 1 or 0 for testing:";
K:0;
"Note all K does is make the diode equation simpler K=0 or more exact K=1";

"nodal network equations:";
sols2:[v1/R3-v4/R3=-I1,v2/R9-v5/R9=I1-I2,v3/R4=I2,v4=E1,v5/R9-v2/R9+v5/R2+v5/R1-v4/R1=0];

"set some values:";
B:100;
aF:B/(B+1);
NE:1.0;
"BE diode equation:";
Id1:1e-14*(%e^(Vbe/(NE*0.0258649)-K));
"make colllector current iB*Beta:";
s1:ev(sols2,I1=(v5-v2)/R9*B);
"set circuit component values:";
s2:ev(s1,E1=10,R1=4700,R2=1000,R3=3900,R4=1047,R9=0.1);
"solve intermediate set:";
s2:solve(s2,[v1,v2,v3,v4,v5]);
s2[1];
sols3:%;
"calculate intermediate Vbe:";
sols3[2]-sols3[3];
s3:rhs(%);
"set I2 to the diode current formula:";
s4:ev(s3,I2=Id1);
"setup equality to Vbe for solving for Vbe:";
s5:Vbe-s4;
"find Vbe numerically:";
find_root(s5,Vbe,0.1,0.9);
Vbe1:%;
"use value found for Vbe to calculate device currents:";
ev(sols3,I2=Id1);
sols4:ev(%,Vbe=Vbe1);
sols4:[rhs(sols4[1]),rhs(sols4[2]),rhs(sols4[3]),rhs(sols4[4]),rhs(sols4[5])];
"calculate device currents:";
Icc: 10-sols4[1])/3900;
Ibb: sols4[5]-sols4[2])/0.1;
Iee:sols4[3]/1047;
"show Vbe1:";
Vbe1;
"Now we have Vbe and the three device currents.";
"END_OF_CODE";

Vbe1 comes out to 0.65615221828704v with K=0
but ocmes out to 0.68141519088332v with K=1 as it should be.

TransistorStaticCalculations_20200208_093325.gif
 
Last edited:

Jony130

Joined Feb 17, 2009
5,487
Maybe you can explain how you got your first equation. For example, where is the constant 1.75439 coming from?
A voltage divider at the base (RB1 and RB2).
The Thevenin voltage is equal to:

Vth = 10 *1/(1 + 4.7) = 1.75439V

It is interesting that another spice simulator gives a different result

The model the TS is using look like this:
.model 2N3904JP NPN( IS = 1E-14 BF=100 ) or NPN(IS = 10fA BF=100)

And by default NF = 1

The LTspice results are:

Vbe = 0.65590215V
Ib = 10.3075μA
Ic = 1.03075mA
Ie = 1.04105mA


And my math software gives these results:
untitled.PNG

Notice that I use Vt = 25.6849mV (27°C)

And in Micro-Cap 12 I've got Vbe = 655.88mV; Ic =1.031mA
 
Last edited:

Thread Starter

aac044210

Joined Nov 19, 2019
178
Hello again,

Ok here is a set of code that calculates the Vbe and device currents without knowing or assuming anything not given by the circuit itself.
Note it may be that spice uses the slightly dummed down version of the diode equation which can be tested by setting K either to 1 or 0. When K=1 we have the real diode equation but when we set K=0 we get a closer to spice result which may mean spice is using the simpler equation.

Here is the set of annotated code for Maxima and the circuit diagram and node numbering is shown in the attachment. Note R4 is the bulk value of the two emitter resistors in series.
Also note "%e" is just e but Maxima takes '%e' to be the constant 'e'.
To use this code as is you can copy it all from START to END and paste it into Maxima and just hit enter.

"START_OF_CODE";
"make K either 1 or 0 for testing:";
K:0;
"Note all K does is make the diode equation simpler K=0 or more exact K=1";

"nodal network equations:";
sols2:[v1/R3-v4/R3=-I1,v2/R9-v5/R9=I1-I2,v3/R4=I2,v4=E1,v5/R9-v2/R9+v5/R2+v5/R1-v4/R1=0];

"set some values:";
B:100;
aF:B/(B+1);
NE:1.0;
"BE diode equation:";
Id1:1e-14*(%e^(Vbe/(NE*0.0258649)-K));
"make colllector current iB*Beta:";
s1:ev(sols2,I1=(v5-v2)/R9*B);
"set circuit component values:";
s2:ev(s1,E1=10,R1=4700,R2=1000,R3=3900,R4=1047,R9=0.1);
"solve intermediate set:";
s2:solve(s2,[v1,v2,v3,v4,v5]);
s2[1];
sols3:%;
"calculate intermediate Vbe:";
sols3[2]-sols3[3];
s3:rhs(%);
"set I2 to the diode current formula:";
s4:ev(s3,I2=Id1);
"setup equality to Vbe for solving for Vbe:";
s5:Vbe-s4;
"find Vbe numerically:";
find_root(s5,Vbe,0.1,0.9);
Vbe1:%;
"use value found for Vbe to calculate device currents:";
ev(sols3,I2=Id1);
sols4:ev(%,Vbe=Vbe1);
sols4:[rhs(sols4[1]),rhs(sols4[2]),rhs(sols4[3]),rhs(sols4[4]),rhs(sols4[5])];
"calculate device currents:";
Icc: 10-sols4[1])/3900;
Ibb: sols4[5]-sols4[2])/0.1;
Iee:sols4[3]/1047;
"show Vbe1:";
Vbe1;
"Now we have Vbe and the three device currents.";
"END_OF_CODE";

Vbe1 comes out to 0.65615221828704v with K=0
but ocmes out to 0.68141519088332v with K=1 as it should be.

View attachment 198606
Thanks Al. aac.
 

MrAl

Joined Jun 17, 2014
11,389
Hello again,

Well i thought i should point out a few things about the calculations.

First, the original request was to use Ebers Moll so that's what i was using. However, simulators these days usually use Gummel Poon. So switching to that model instead leads to the same as Jony's reply:
Vbe=0.6559
and that is using the thermal voltage again of 0.0258649 and that corresponds to a temperature of 27 degrees C if we use the older definition of Kelvin which i believe is the best bet here.
Somehow the simulators might be using a slightly different temperature slightly over 26.99 degrees C. Not sure yet why they would do that, but the results correlate very closely if we assume that. That is, starting with a raw transistor model and using 1e-14 and N=1 and B=100 we can get 0.6559 with that transistor model or a current controlled current source with gain of 100 and separate diode with 1e-14/B and N=1.

I am also a little embarrassed to say but i accidentally put the "-1" in the exponential part exponent instead of a separate factor where it really has to go.

Because using the GP model instead of the EM model and the "-1" fix requirement the code i posted will have to change somewhat. I'll change it soon. I preferred to do a full analysis straight from nodal though as that is a very general purpose technique where there is nothing extra on the side to calculate.
 

MrAl

Joined Jun 17, 2014
11,389
So this equation:
Ic = Is*e^(Vbe/Vt -1) is used in GP model?
Hi there Jony,

First, thanks for doing this problem too it's interesting to see other people's solutions whether they are the same or different.

Actually no, that was my mistake in the typing of the diode equation.
The mistake was to put the "-1" in the exponent when it is just a separate term
So the corrected equation is:
Ic = Is*(e^(Vbe/Vt)-1)

The difference between the Ebers Moll and the Gummel Poon is that in the Ebers Moll the collector current AND the base current (ie the emitter current) both flow though the diode, while in the Gummel Poon only the base current flows though the diode while the collector current bypasses it. The simulators i believe are using the Gummel Poon but i'll try the Ebers Moll again later to see if i can get similar results by adjusting something.

BTW my result comes out to 0.6559008 which is very very slightly different than your result but that is probably only due to the rounding of the Vbe result to 0.655901.
 

MrAl

Joined Jun 17, 2014
11,389
Hello again,

Ok here is the Gummel Poon variation annotated for use in Maxima...
Note this comes out very very close to MicroCap because it uses the Berkeley thermal voltage calculation standard...

[See attachment for schematic noting both current sources point down with conventional current flow]

"Network equations using simplified Gummel Poon (no recombination or reverse effects):";
sols2:[v1/R3-v3/R3=-I1,v2/R4=I2+I1,v3=E1,v4/R9-v5/R9=-I2,v5/R9-v4/R9+v5/R2+v5/R1-v3/R1=0];
B:100;
NF:1.0;
"base resistor can be used for calculation and verification of base current:";
R9:0.01;
"Temperature degrees C:";
T:27;
"Thermal voltage using Berkeley spice standard:";
VT:8.6171e-5*(T+273.15);
"Diode equation, Gummel Poon:";
Id1:1e-14/B*(%e^(Vbe/(NF*VT))-1);
"Replace I1 with CCCS:";
sols3:ev(sols2,I1=(v5-v4)/R9*B);
"Apply some values:";
s1:ev(sols3,E1=10,R1=4700,R2=1000,R3=3900,R4=1047);
"solve for the analytical node voltages:";
s2:solve(s1,[v1,v2,v3,v4,v5]);
sols3:s2[1];
"form right hand side equation for Vbe:";
sols3[4]-sols3[2];
s3:rhs(%);
"replace I2 with diode:";
s4:ev(s3,I2=Id1);
"form root equation for Vbe:";
s5:Vbe-s4;
Vbe1:find_root(s5,Vbe,0.1,0.9);
"form node voltages:";
s5:ev(sols3,I2=Id1);
"substitute numerical value found for Vbe:";
sols4:ev(s5,Vbe=Vbe1);
"numerical node voltages:";
sols4:[rhs(sols4[1]),rhs(sols4[2]),rhs(sols4[3]),rhs(sols4[4]),rhs(sols4[5])];
"solve for device currents:";
Icc: (10-sols4[1])/3900;
Ibb: (sols4[5]-sols4[4])/R9;
Iee: sols4[2]/1047;
"display Vbe found:";
Vbe1;
"0.65588408918826v";


GummelPoonCircuit_20200209_120256.gif
 
Last edited:
Top