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
Sulaymon Eshkabilov 2023년 8월 29일
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