polynomial fit for a schottky diode and evaluation of its characteristics (ideality factor, barrier height and I0)

6 visualizaciones (últimos 30 días)
i have a series of data taken in lab of a Schottky type of diode and i have to evaluate them neglecting the series resistance even though it can't be ignored.
i'm using this code to plot the I vs V specs of the sample at each temperature
clear
%Importare dati, indicare percorso file dati completo
load ST_n_293K.txt;
xdata=ST_n_293K(:,1); % v (riga, colonna)
ydata=ST_n_293K(:,2); % i (riga, colonna)
%plot dati
plot(xdata,ydata,'ro');
title('fit I vs V a 293K')
xlabel('V [V]');
ylabel('I [mA]');
then i proceed with the fitting app using y=a*(exp(x/b)-1) as equation but it seems like the fit is not good enough.
i'm using this a s reference https://zenodo.org/record/1085918 and in particular the first method at page 2, if i do as the article says i'm getting values way higher, so my question is:
am i applying it wrong or because of the diode manufacture the values has to be this high?
  1 comentario
federico
federico el 29 de Ag. de 2023
i've now tried using this equation a*log(1+exp(b*x))-c and the fit is clearly better than before, but i still can't manage how to get them value from the semilog plot of I vs V.
i got the a,b,c parameters from iv fit, but stil can't figure out how to find the other parameters, does somebody have suggestions?
my previous fit led me to n close to ..*10^2 now should be way lesser, it should be higher than standards but not lower than 1

Iniciar sesión para comentar.

Respuesta aceptada

Star Strider
Star Strider el 29 de Ag. de 2023
It is relatively straightforward to do a nonlinear parameter estimate of the required parameters in MATLAB.
Try this —
T1 = readtable('ST_n_293K.txt');
T1.Properties.VariableNames = {'V','I'}
T1 = 53×2 table
V I ____ ________ -4 -0.16481 -3.9 -0.16405 -3.8 -0.16281 -3.7 -0.16177 -3.6 -0.16063 -3.5 -0.15949 -3.4 -0.15867 -3.3 -0.15721 -3.2 -0.15607 -3.1 -0.1549 -3 -0.15379 -2.9 -0.15227 -2.8 -0.15114 -2.7 -0.14962 -2.6 -0.14848 -2.5 -0.14696
xdata = T1.V;
ydata = T1.I;
Lv = xdata > 0;
% y=a*(exp(x/b)-1)
objfcn = @(b,x) b(1).*(exp(x./b(2))-1);
B = fminsearch(@(b) norm(ydata(Lv) - objfcn(b,xdata(Lv))), rand(2,1)) % Use 'fminsearch' To Estimate The Parameters
B = 2×1
381.8461 39.1460
xv = linspace(min(xdata(Lv)), max(xdata(Lv)));
figure
semilogy(xdata(Lv), ydata(Lv), '.')
hold on
plot(xv, objfcn(B, xv), '-r')
hold off
grid
xlabel('V')
ylabel('I')
text(0.5, 2, sprintf('$I = %.2f (e^{\\frac{V}{%.2f}}-1)$',B), 'Interpreter','latex', 'FontSize',14)
To get statistics on the fit, use fitnlm instead. Also see the documentation on NonLinearModel for details.
.
  9 comentarios
federico
federico el 15 de Sept. de 2023
the thing i'm trying to do is to plot Ln(I) vs V and then evaluate the parameters in the linear fit of values between V=0 and V=1 to demonstrate that this model doesn't work neglecting series resistance.
Star Strider
Star Strider el 15 de Sept. de 2023
I am still not certain that I understand what you want.
Perhaps this —
T1 = readtable('ST_n_293K.txt');
T1.Properties.VariableNames = {'V','I'}
T1 = 53×2 table
V I ____ ________ -4 -0.16481 -3.9 -0.16405 -3.8 -0.16281 -3.7 -0.16177 -3.6 -0.16063 -3.5 -0.15949 -3.4 -0.15867 -3.3 -0.15721 -3.2 -0.15607 -3.1 -0.1549 -3 -0.15379 -2.9 -0.15227 -2.8 -0.15114 -2.7 -0.14962 -2.6 -0.14848 -2.5 -0.14696
xdata = T1.V;
ydata = T1.I;
Lv = xdata > 0 & xdata <= 1;
xv = linspace(min(xdata(Lv)), max(xdata(Lv)));
BL = [xdata(Lv) ones(size(xdata(Lv)))] \ log(ydata(Lv)) % Regression: log(y) = m*x + b
BL = 2×1
2.5868 0.0258
figure
plot(xdata(Lv), log(ydata(Lv)), '.')
hold on
plot(xv, [xv(:) ones(size(xv(:)))] * BL, '-r')
hold off
grid
xlabel('V')
ylabel('log(I)')
title('Linear Fit')
text(0.5, 0.5, sprintf('$log(I) = %.2f V %+.2f$',BL), 'Interpreter','latex', 'FontSize',14)
.

Iniciar sesión para comentar.

Más respuestas (1)

Sulaymon Eshkabilov
Sulaymon Eshkabilov el 29 de Ag. de 2023
If understood your question correctly, here is how it can be simulated:
D=load('ST_n_293K.txt') ;
xdata=D(:,1); % v (riga, colonna)
ydata=D(:,2); % i (riga, colonna)
%plot dati
semilogy(xdata,ydata,'ro');
title('fit I vs V a 293K')
xlabel('V [V]');
ylabel('I [mA]');
IDX = find(ydata>0);
V = xdata(IDX);
I = ydata(IDX);
ft = fittype('a*log(1+exp(b*x))-c')
ft =
General model: ft(a,b,c,x) = a*log(1+exp(b*x))-c
[Fmodel,Fmodel_quality] = fit(V,I,ft)
Warning: Start point not provided, choosing random start point.
Warning: Negative data ignored
Fmodel =
General model: Fmodel(x) = a*log(1+exp(b*x))-c Coefficients (with 95% confidence bounds): a = -186.6 (-573.7, 200.4) b = -0.1105 (-0.3471, 0.126) c = -129.2 (-397.6, 139.2)
Fmodel_quality = struct with fields:
sse: 0.1074 rsquare: 0.9993 dfe: 10 adjrsquare: 0.9991 rmse: 0.1036
hold on
I_estimated = Fmodel(V);
plot(V, I_estimated,'k', 'linewidth', 2)
legend('Data','FitModel')
grid on
hold off
[V, I_estimated]
ans = 13×2
0 -0.1595 0.0900 0.7664 0.1800 1.6878 0.2700 2.6046 0.3600 3.5167 0.4500 4.4242 0.5500 5.4271 0.6400 6.3249 0.7300 7.2181 0.8200 8.1066
  2 comentarios
federico
federico el 29 de Ag. de 2023
not quite right, i did the same thing just by using the fitting app on matlab using exclusion rule and excluding x<0.
the problem here is based on the document i linked, how to find the paramenters such as n, Φ and i0 from this graph since i don't get it at all.
fig.3 and 4 are, supposedly the same thing zoomed in, in which the researcher are using the least squared fitted option to evaluate those parameters from the plot.
federico
federico el 29 de Ag. de 2023
the article says " i0 the reverse saturation current can be extracted by extrapolating the straight line on lnI to intercept the axis at 0 voltage"
so for the firts method they found that i0, if i'm not mistaken, is around 3,748*10^-7A but i can't seem to understand how to found it in my plot

Iniciar sesión para comentar.

Categorías

Más información sobre MATLAB en Help Center y File Exchange.

Productos


Versión

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by