有机半导体器件的应用日益广泛,而OFET(Organic field-effect transistor,有机场效应晶体管)领域的研究也面临着大量的数据处理,虽然这些工作使用EXCEL和Origin也可以完成,但是面对大量数据未免有些不便。
使用matlab可以实现运算和回归、作图一体的批量操作:
输出曲线(Output Curve)作图的代码如下:
clc,
clear
close all
%在‘’中输入路径
addpath('U:\2021\data')
filename = 'O-3-1-5um.csv'
A = xlsread(filename)
if A(1:41,5)<0
current1 = -A(1:61,5)
current2 = -A(62:122,5)
current3 = -A(123:183,5)
current4 = -A(184:244,5)
current5 = -A(245:305,5)
current6 = -A(306:366,5)
current7 = -A(367:427,5)
current8 = -A(428:488,5)
l = length(current1)
voltage = A(1:l,4)
vm = max(voltage)
vn = min(voltage)
cm = max(current8)
cm2 = max(current7)
cm3 = max(current6)
cm4 = max(current5)
cm5 = max(current4)
cm6 = max(current3)
cm7 = max(current2)
cm8 = max(current1)
plot(voltage,current1,voltage,current2,voltage,current3,voltage,current4,voltage,current5,voltage,current6,voltage,current7,voltage,current8)
xlim([vn-15,vm])
ylim([-0.1*cm,1.1*cm])
set(gca,'XDir','reverse')
title('Output Curve')
xlabel('V_D_S/V')
ylabel('-I_D_S/A')
text(-62,cm,('V_G_S = 60 V'))
text(-62,cm2,('50 V'))
text(-62,cm3,('40 V'))
text(-62,cm4,('30 V'))
text(-62,cm5,('20 V'))
text(-62,cm6,('-10~20 V'))
else
current1 = A(1:81,5)
current2 = A(82:162,5)
current3 = A(163:243,5)
current4 = A(244:324,5)
current5 = A(325:405,5)
current6 = A(406:486,5)
current7 = A(487:567,5)
current8 = A(568:648,5)
l = length(current1)
voltage = A(1:l,4)
vm = max(voltage)
vn = min(voltage)
cm = max(current8)
cm2 = max(current7)
cm3 = max(current6)
cm4 = max(current5)
cm5 = max(current4)
cm6 = max(current3)
cm7 = max(current2)
cm8 = max(current1)
plot(voltage,current1,voltage,current2,voltage,current3,voltage,current4,voltage,current5,voltage,current6,voltage,current7,voltage,current8)
xlim([vn,vm+15])
ylim([-0.1*cm,1.1*cm])
title('Output Curve')
xlabel('V_D_S/V')
ylabel('-I_D_S/A')
text(62,cm,('V_G_S = 60 V'))
text(62,cm2,('50 V'))
text(62,cm3,('40 V'))
text(62,cm4,('30 V'))
text(62,cm5,('20 V'))
text(62,cm6,('-10~20 V'))
end
转移曲线(Transfer Curve)的作图代码如下(For循环可以自动判别器件属于N型半导体还是P型半导体):
clc,
clear
close all
%在‘’中输入路径
addpath('U:\2021\ZFJ Group\退火')
%在‘’中输入文件名
filename = '40L802.csv';
A = xlsread(filename);
%扫了几圈?
t = 1
w = A(:,3);
Q = size(w);
q = Q(1,1)/t;
%沟道长度
L = 50;
%沟道宽度
W = 5000;
C = 11E-9;
%回归起点(第几行)
ini = round(0.3*q);
%回归终点(第几行)
off = round(0.4*q);
if A(4,4)<0
current = abs(A(1:q,5));
voltage = -A(1:q,7);
sqrt = A(1:q,10);
M = max(current);
N = min(current);
MM = max(sqrt);
NN = min(sqrt);
mv = max(voltage);
O = M/N;
OFF = vpa(O,2);
OOFF = eval(OFF);
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
b = P(1,2);
V = -b/k;
u = k*L/(W*C*Gvol);
semilogy(voltage,current);
ylim([0.1*N,3*M]);
title('Linear Regime')
xlabel('- V_G_S/V');
ylabel('-I_D_S/A');
text(-8,9*M,['\mu = ' num2str(u) 'cm^2V^{-1}s^{-1}'])
text(-8,3*M,['V_D_S = ' num2str(round(A(5,4))) 'V' ])
text(-8,1*M,['V_t_h = ' num2str(round(V,2)) 'V '])
else
m = A(ini:off,7);
n = A(ini:off,10);
P = polyfit(m,n,1);
k = P(1,1);
b = P(1,2);
V = b/k;
u = 2*k*k*L/(W*C);
yyaxis left
semilogy(voltage,current)
ylim([0.1*N,2*M])
title('Saturation Regime')
xlabel('- V_G_S/V')
ylabel('-I_D_S/A') % left y-axis
yyaxis right
plot(voltage,sqrt)
ylabel('|I_{DS}|^{1/2}/A^{1/2}')
xlim([-10,60])
ylim([-0.1*MM,1.1*MM])
text(-8,0.98*MM,['\mu = ' num2str(u) 'cm^2V^{-1}s^{-1}'])
text(-8,0.88*MM,['V_D_S = ' num2str(round(A(5,4))) 'V' ])
text(-8,0.78*MM,['V_t_h = ' num2str(round(V,2)) 'V'])
%添加箭头
annotation('textarrow',[0.25 0.15],[0.618 0.618])
annotation('textarrow',[0.75 0.85],[0.618 0.618])
end
else
current = abs(A(1:q,5));
voltage = A(1:q,7);
sqrt = A(1:q,10);
M = max(current);
N = min(current);
MM = max(sqrt);
NN = min(sqrt);
mv = max(voltage);
O = M/N;
OFF = vpa(O,2);
OOFF =eval(OFF);
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
b = P(1,2);
V = b/k;
u = k*L/(W*C*Gvol);
semilogy(voltage,current)
ylim([0.01*N,3*M])
title('Linear Regime')
xlabel('- V_G_S/V')
ylabel('-I_D_S/A') % left y-axis
text(-8,9*M,['\mu = ' num2str(u) 'cm^2V^{-1}s^{-1}'])
text(-8,3*M,['V_D_S = ' num2str(round(A(5,4))) 'V' ])
text(-8,1*M,['V_t_h = ' num2str(round(V,2)) 'V'])
else
%饱和区
m = A(ini:off,7);
n = A(ini:off,10);
P = polyfit(m,n,1);
k = P(1,1);
b = P(1,2);
V = b/k;
u = 2*k*k*L/(W*C);
yyaxis left
semilogy(voltage,current)
ylim([0.01*N,2*M])
title('Saturation Regime')
xlabel('- V_G_S/V')
ylabel('-I_D_S/A') % left y-axis
yyaxis right
plot(voltage,sqrt)
ylabel('|I_{DS}|^{1/2}/A^{1/2}')
xlim([-10,60])
ylim([-0.1*MM,1.1*MM])
text(-8,0.98*MM,['\mu = ' num2str(u) ' cm^2V^{-1}s^{-1}'])
text(-8,0.88*MM,['V_D_S = ' num2str(round(A(5,4))) ' V' ])
text(-8,0.78*MM,['V_t_h = ' num2str(round(V,2)) ' V'])
annotation('textarrow',[0.2 0.15],[0.618 0.618])
annotation('textarrow',[0.8 0.85],[0.618 0.618])
end
end
ON_OFF = abs(OOFF);
table(u,V,ON_OFF)
从转移曲线还可以得到迁移率、阈值电压等信息:(这里的迁移率采用的是分段回归,最后取最大值的方法)
clc,
clear
close all
%在‘’中输入路径
addpath('U:\2021\21.9.26')
%在‘’中输入文件名
filename = 'NDI T S3.csv';
A = xlsread(filename);
%扫了几圈?
t = 1
w = A(:,3);
Q = size(w);
q = Q(1,1)/t;
%沟道长度/um
L = 5;
%沟道宽度/um
W = 1400;
%电容/F
C = 11E-9;
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.1*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.3*q);
if A(4,4)<0
current = abs(A(1:q,5));
voltage = -A(1:q,7);
sqrt = sqrt(current);
M = max(current);
N = min(current);
MM = max(sqrt);
NN = min(abs(sqrt));
mv = max(voltage);
O = M/N;
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
b = P(1,2);
V = -b/k;
u = k*L/(W*C*Gvol);
else
m = A(ini:off,7);
n = sqrt(ini:off);
P = polyfit(m,n,1);
k = P(1,1);
b = P(1,2);
V = b/k;
u = 2*k*k*L/(W*C);
end
else
current = abs(A(1:q,5));
voltage = A(1:q,7);
sqrt = sqrt(current);
M = max(current);
N = min(current);
MM = max(sqrt);
NN = min(sqrt);
mv = max(voltage);
O = M/N;
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
b = P(1,2);
V = b/k;
u = k*L/(W*C*Gvol);
else
%饱和区
m = A(ini:off,7);
n = A(ini:off,10);
P = polyfit(m,n,1);
k = P(1,1);
b = P(1,2);
V = b/k;
u = 2*k*k*L/(W*C);
end
end
mu1 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.2*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.4*q);
if A(4,4)<0
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
u = k*L/(W*C*Gvol);
else
m = A(ini:off,7);
n = sqrt(ini:off);
P = polyfit(m,n,1);
k = P(1,1);
u = 2*k*k*L/(W*C);
end
else
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
u = k*L/(W*C*Gvol);
else
%饱和区
m = A(ini:off,7);
n = A(ini:off,10);
P = polyfit(m,n,1);
k = P(1,1);
u = 2*k*k*L/(W*C);
end
end
mu2 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.3*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.5*q);
if A(4,4)<0
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
u = k*L/(W*C*Gvol);
else
m = A(ini:off,7);
n = sqrt(ini:off);
P = polyfit(m,n,1);
k = P(1,1);
u = 2*k*k*L/(W*C);
end
else
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
u = k*L/(W*C*Gvol);
else
%饱和区
m = A(ini:off,7);
n = A(ini:off,10);
P = polyfit(m,n,1);
k = P(1,1);
u = 2*k*k*L/(W*C);
end
end
mu3 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.4*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.6*q);
if A(4,4)<0
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
u = k*L/(W*C*Gvol);
else
m = A(ini:off,7);
n = sqrt(ini:off);
P = polyfit(m,n,1);
k = P(1,1);
u = 2*k*k*L/(W*C);
end
else
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
u = k*L/(W*C*Gvol);
else
%饱和区
m = A(ini:off,7);
n = A(ini:off,10);
P = polyfit(m,n,1);
k = P(1,1);
u = 2*k*k*L/(W*C);
end
end
mu4 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.5*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.7*q);
if A(4,4)<0
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
u = k*L/(W*C*Gvol);
else
m = A(ini:off,7);
n = sqrt(ini:off);
P = polyfit(m,n,1);
k = P(1,1);
u = 2*k*k*L/(W*C);
end
else
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
u = k*L/(W*C*Gvol);
else
%饱和区
m = A(ini:off,7);
n = A(ini:off,10);
P = polyfit(m,n,1);
k = P(1,1);
u = 2*k*k*L/(W*C);
end
end
mu5 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.6*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.8*q);
if A(4,4)<0
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
u = k*L/(W*C*Gvol);
else
m = A(ini:off,7);
n = sqrt(ini:off);
P = polyfit(m,n,1);
k = P(1,1);
u = 2*k*k*L/(W*C);
end
else
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
u = k*L/(W*C*Gvol);
else
%饱和区
m = A(ini:off,7);
n = A(ini:off,10);
P = polyfit(m,n,1);
k = P(1,1);
u = 2*k*k*L/(W*C);
end
end
mu6 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.7*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.9*q);
if A(4,4)<0
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
b = P(1,2);
u = k*L/(W*C*Gvol);
else
m = A(ini:off,7);
n = sqrt(ini:off);
P = polyfit(m,n,1);
k = P(1,1);
b = P(1,2);
u = 2*k*k*L/(W*C);
end
else
Gvol = abs(A(5,4));
if Gvol<30
m = A(ini:off,5);
n = A(ini:off,7);
P = polyfit(n,m,1);
k = P(1,1);
b = P(1,2);
u = k*L/(W*C*Gvol);
else
%饱和区
m = A(ini:off,7);
n = A(ini:off,10);
P = polyfit(m,n,1);
k = P(1,1);
b = P(1,2);
u = 2*k*k*L/(W*C);
end
end
mu7 = abs(u)
ON_OFF = abs(O);
mu = [mu1,mu2,mu3,mu4,mu5,mu6,mu7]
mumax = max(mu)
table(mumax,V,ON_OFF)