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

9 ビュー (過去 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 Center および File ExchangeMATLAB についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by