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

8 次查看(过去 30 天)
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 个评论
federico
federico 2023-8-29
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

请先登录,再进行评论。

采纳的回答

Star Strider
Star Strider 2023-8-29
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 个评论
federico
federico 2023-9-15
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 2023-9-15
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)
.

请先登录,再进行评论。

更多回答(1 个)

Sulaymon Eshkabilov
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 个评论
federico
federico 2023-8-29
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 2023-8-29
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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Mathematics 的更多信息

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by