Stack Exchange Network

Stack Exchange network consists of 175 Q&A communities including Stack Overflow, the largest, most trusted online community for developers to learn, share their knowledge, and build their careers.

Visit Stack Exchange
3 spreadsheet, plot, explanation
source | link
  vd    id
-0.4    1.84426548556218E-21
-0.2    1.04706618384119E-19
   0    5.94463E-18
 0.2    3.37501357433389E-16
 0.4    1.91613550833913E-14
 0.6    1.08786978346975E-12
 0.8    6.17628899749531E-11
 1.0    3.50653601747389E-09
 1.2    1.99080626680972E-07
 1.4    1.13026347718055E-05
 1.6    0.000641697562011
 1.8    0.036431838186809
 2.0    2.06838690412047

screenshot of my LibreOffice Calc

The column Vd are the voltages, Id is the diode current according to the real formula, Id0 is the current with the simplified formula where the "minus 1" is changed to "minus zero". As Id0 is a true exponential curve, you can take the logaritm in column Id0_log. (You cannot take the log of a curve that becomes zero and negative like Id) The plot is from Id0_Log versus Vd. In this plot I made the lowest part dotted, because there it is NOT the actual diode current anymore, but does show the value of Is at the intersection with the Y-axis.

Following the exponential curve to the left brings you asymptotally to zero. But the "minus 1" subtracts an amount of Is, so that the real diode curve goes through the origin and, with negative voltages, shows a reverse leakage current of amount Is.

If the original manufacturers curve would have been on a really large log plot, we could have simply used a ruler to extend the straight line downwards to easily find Is at Vd=0 and then compute N, instead of compute first N then Is with the above macro's. The ruler method has been described in "The Spice Book" by Andrei Vladimirescu (1994).

  vd    id
-0.4    1.84426548556218E-21
-0.2    1.04706618384119E-19
   0    5.94463E-18
 0.2    3.37501357433389E-16
 0.4    1.91613550833913E-14
 0.6    1.08786978346975E-12
 0.8    6.17628899749531E-11
 1.0    3.50653601747389E-09
 1.2    1.99080626680972E-07
 1.4    1.13026347718055E-05
 1.6    0.000641697562011
 1.8    0.036431838186809
 2.0    2.06838690412047

screenshot of my LibreOffice Calc

The column Vd are the voltages, Id is the diode current according to the real formula, Id0 is the current with the simplified formula where the "minus 1" is changed to "minus zero". As Id0 is a true exponential curve, you can take the logaritm in column Id0_log. (You cannot take the log of a curve that becomes zero and negative like Id) The plot is from Id0_Log versus Vd. In this plot I made the lowest part dotted, because there it is NOT the actual diode current anymore, but does show the value of Is at the intersection with the Y-axis.

Following the exponential curve to the left brings you asymptotally to zero. But the "minus 1" subtracts an amount of Is, so that the real diode curve goes through the origin and, with negative voltages, shows a reverse leakage current of amount Is.

If the original manufacturers curve would have been on a really large log plot, we could have simply used a ruler to extend the straight line downwards to easily find Is at Vd=0 and then compute N, instead of compute first N then Is with the above macro's. The ruler method has been described in "The Spice Book" by Andrei Vladimirescu (1994).

2 reset debug value, but 0 or 1 do not make any difference for us
source | link
Const Q as double = 1.6E-19
Const K as double = 1.38E-22
Const T as double = 300

rem The Shockley diode equation, to build the graph Id(Vd) for hardcoded values of Is and N
Function shockley(Vd as double) as double
    Const Is1 as double = 5.94463E-18
    rem Note that 'Is' is a reserved word and cannot be the name of a variable
    Const N as double = 0.191367
    shockley = Is1 * (exp(Vd * Q / (N * K * T )) - 01)
End Function

rem Step 1 in solving the diode equation for N using values from a graph
Function ComputeN(V1 as double, V2 as double, I1 as double, I2 as double) as double
    ComputeN = (Q / (K * T)) * (V1 - V2) / (log(I1) - log(I2))
End Function

rem Step 2 in solving the diode equation for Is
Function ComputeIS(V as double, I as double, N as double) as double
    ComputeIS = I / (exp(Q * V / (N * K * T)))  
End Function

rem for debugging
sub Test
    dim N as double
    N = ComputeN(1.85, 1.3, 0.1, 1.5E-6)
    dim Is1 as double
    Is1 = ComputeIs(1.85, 0.1, N)
end sub

I get a somewhat similar value for Is: 5.94E-18 = 5.94 atto-ampere (W5VO found 1 aA), but much different N = 0.19 (W5VO found 1.8, typo?), still the data also computes back to the same graph:

Const Q as double = 1.6E-19
Const K as double = 1.38E-22
Const T as double = 300

rem The Shockley diode equation, to build the graph Id(Vd) for hardcoded values of Is and N
Function shockley(Vd as double) as double
    Const Is1 as double = 5.94463E-18
    rem Note that 'Is' is a reserved word and cannot be the name of a variable
    Const N as double = 0.191367
    shockley = Is1 * (exp(Vd * Q / (N * K * T )) - 0)
End Function

rem Step 1 in solving the diode equation for N using values from a graph
Function ComputeN(V1 as double, V2 as double, I1 as double, I2 as double) as double
    ComputeN = (Q / (K * T)) * (V1 - V2) / (log(I1) - log(I2))
End Function

rem Step 2 in solving the diode equation for Is
Function ComputeIS(V as double, I as double, N as double) as double
    ComputeIS = I / (exp(Q * V / (N * K * T)))  
End Function

rem for debugging
sub Test
    dim N as double
    N = ComputeN(1.85, 1.3, 0.1, 1.5E-6)
    dim Is1 as double
    Is1 = ComputeIs(1.85, 0.1, N)
end sub

I get a somewhat similar value for Is: 5.94E-18 = 5.94 atto-ampere, but much different N = 0.19, still the data also computes back to the same graph:

Const Q as double = 1.6E-19
Const K as double = 1.38E-22
Const T as double = 300

rem The Shockley diode equation, to build the graph Id(Vd) for hardcoded values of Is and N
Function shockley(Vd as double) as double
    Const Is1 as double = 5.94463E-18
    rem Note that 'Is' is a reserved word and cannot be the name of a variable
    Const N as double = 0.191367
    shockley = Is1 * (exp(Vd * Q / (N * K * T )) - 1)
End Function

rem Step 1 in solving the diode equation for N using values from a graph
Function ComputeN(V1 as double, V2 as double, I1 as double, I2 as double) as double
    ComputeN = (Q / (K * T)) * (V1 - V2) / (log(I1) - log(I2))
End Function

rem Step 2 in solving the diode equation for Is
Function ComputeIS(V as double, I as double, N as double) as double
    ComputeIS = I / (exp(Q * V / (N * K * T)))  
End Function

rem for debugging
sub Test
    dim N as double
    N = ComputeN(1.85, 1.3, 0.1, 1.5E-6)
    dim Is1 as double
    Is1 = ComputeIs(1.85, 0.1, N)
end sub

I get a somewhat similar value for Is: 5.94E-18 = 5.94 atto-ampere (W5VO found 1 aA), but much different N = 0.19 (W5VO found 1.8, typo?), still the data also computes back to the same graph:

1
source | link

Great answers, but it is easy to solve the Shockley diode equation algebraicly. Just note that the "minus 1" in the formula is very irrelevant for forward currents that are an order of magnitude greater than Is, which is very small, say, 1E-12 A. Find just two points in the graph with easy to read I and V values, and plug these into the formula. Dividing both formula's eliminates Is, so N is easy to compute. Then fill in N in a formula to find Is.

Here are my LibreOffice Calc macro's in Basic:

Const Q as double = 1.6E-19
Const K as double = 1.38E-22
Const T as double = 300

rem The Shockley diode equation, to build the graph Id(Vd) for hardcoded values of Is and N
Function shockley(Vd as double) as double
    Const Is1 as double = 5.94463E-18
    rem Note that 'Is' is a reserved word and cannot be the name of a variable
    Const N as double = 0.191367
    shockley = Is1 * (exp(Vd * Q / (N * K * T )) - 0)
End Function

rem Step 1 in solving the diode equation for N using values from a graph
Function ComputeN(V1 as double, V2 as double, I1 as double, I2 as double) as double
    ComputeN = (Q / (K * T)) * (V1 - V2) / (log(I1) - log(I2))
End Function

rem Step 2 in solving the diode equation for Is
Function ComputeIS(V as double, I as double, N as double) as double
    ComputeIS = I / (exp(Q * V / (N * K * T)))  
End Function

rem for debugging
sub Test
    dim N as double
    N = ComputeN(1.85, 1.3, 0.1, 1.5E-6)
    dim Is1 as double
    Is1 = ComputeIs(1.85, 0.1, N)
end sub

If you look at the formula's, you might recognize simply the description of a straight line with slope of q/NkT but also of delta Log(Id) / delta Vd.

I get a somewhat similar value for Is: 5.94E-18 = 5.94 atto-ampere, but much different N = 0.19, still the data also computes back to the same graph:

  vd    id
-0.4    1.84426548556218E-21
-0.2    1.04706618384119E-19
   0    5.94463E-18
 0.2    3.37501357433389E-16
 0.4    1.91613550833913E-14
 0.6    1.08786978346975E-12
 0.8    6.17628899749531E-11
 1.0    3.50653601747389E-09
 1.2    1.99080626680972E-07
 1.4    1.13026347718055E-05
 1.6    0.000641697562011
 1.8    0.036431838186809
 2.0    2.06838690412047