Passivation of Zn3P2 substrates by aqueous chemical etching and air oxidation
Gregory M. Kimball, Jeffrey P. Bosco, Astrid M. Müller, Syed F. Tajdar, Bruce S. Brunschwig,
Harry A. Atwater and Nathan S. Lewis
Noyes Laboratory, Watson Laboratory, and Beckman Institute, California Institute of
Technology, Pasadena, California 91125 USA
SUPPLEMENTAL INFORMATION
1. Numerical Modeling of Time-resolved Photoluminescence Data
The following code was used to simulate time-resolved photoluminescence traces for Zn3P2 substrates
that had varying surface recombination velocity (SRV). The simulation used one distance dimension and
one time dimension. The initial condition used equilibrium electron and hole concentrations that were
subsequently perturbed by a pulse of light that was Gaussian in time and that was absorbed with an
exponential decay governed by the absorption coefficient of the semiconductor. The excited carriers
were allowed to diffuse through the semiconductor and recombine nonradiatively at the surface and in the
bulk. For each time step, the np product was integrated through the semiconductor, to yield a term that is
proportional to the instantaneous photoluminescence intensity.
function [tspan,xspan,n,ntintc] = PLsolve_full(data,mun,tn,Snl, PLOT);
close all
data = load('PLdata3','PLdata3');
data = data.PLdata3
% do you want to plot? yes=1, no=0.
PLOT=1;
%
k
T
q
e
c
h
Fundamental constants
= 8.61734315e-5;
= 295;
= 1;
= 1.60217646e-19;
= 29979245800;
= 6.6260689633e-34;
% (eV/K)
% (K)
% (C)
% (cm/s)
% (Js)
% Parameters of Zn3P2 semiconductor sample
mup = 20;
% hole mobility (cm^2/Vs)
mun = 1000;
% electron mobility (cm^2/Vs)
ni=1e10;
% intrinsic carrier density (cm-3)
tn = 23e-9;
% bulk lifetime, tau (s)
ppo=5e15;
krad = 1e14;
krad = 0;
Sn = 0;
npo=ni^2/ppo;
%
%
%
%
%
bulk p-type doping (cm^-3)
radiative emission rate (s^-1)
nonradiative assumed to dominate
surface recombination velocity (cm/s)
electrons concentration at equilibrium (cm^-3)
% Initial absorption profile
ke=2.1;
% imaginary index of Zn3P2 at 355 nm
lambda = 355e-7;
% excitation wavelength (cm)
alpha = 4*pi*ke/lambda; % absorption at excitation (cm^-1)
ke2=0.01;
lambda2 = 820e-7;
alpha2 = 4*pi*ke2/lambda2;
alpha2 = 0;
%
%
%
%
imaginary index of Zn3P2 at 820 nm
emission wavelength (cm)
absorption at emission (cm^-1)
neglect readsorption( cm^-1)
% assuming ambipolar diffusion and no drift currents
mup = 40;
% hole mobility (cm^2/Vs)
mun = 40;
% electron mobility (cm^2/Vs)
Econst = 0;
% drift field (V)
Dp = k*T/q*mup;
% hole diffusion coefficient (cm^2/s)
Dn = k*T/q*mun;
% electron diffusion coefficient (cm^2/s)
% laser pulse characteristics
pw = 60e-12;
% width of laser pulse (s)
pt = 4.2e-9;
% delay before laser pulse (s)
% streak camera characteristics
dw = 140e-12;
% Gaussian smooth from detector binning (s)
darkcounts = 1.2e-4; % counts from background (%)
% Total number of photons in a pulse
n_Ar = 1.0;
% real index of Ar gas at 355 nm
n_ZnP_355 = 4.1;
% real index of Zn3P2 at 355 nm
% Reflectivity from Fresnel equations at 45 degrees
Rs = ((n_Ar * 0.707 - n_ZnP_355 * 0.707)/(n_Ar * 0.707 + n_ZnP_355 *
0.707))^2;
E=h*c/lambda;
% energy per photon (J)
pulse = 1e-6;
% energy per pulse (J)
spotsize = 0.1;
% laser spot size (cm^-2)
Np = (1-Rs)*pulse/E/spotsize;
% photons/pulse/cm^2 (cm^-2)
%%%% Loop definition to vary parameters
Snl = [1800,10000,28000];
index = 3;
% surface recombination velocity (cm/s)
% number of simulations
%%% Time and Distance mesh bounds
Tsteps = 4000;
% time mesh size
Xsteps = 50;
% distance mesh size (into semiconductor)
tspan = linspace(0e-9,55e-9,Tsteps);
% time steps (s)
xspan = [0,logspace(-9,log10(50000*1e-7),Xsteps)]; % distance steps (nm)
[xxx,yyy] = meshgrid(exp(-xspan*alpha2),tspan); % for reabsorption
%%% Execute PDE solver
m=0;
[mx,nx] = size(data);
opt = odeset('InitialStep',1e-15,'MaxStep',1e-9);
for w=1:index
Sn=Snl(w);
sol = pdepe(m,@pdefun,@icfun,@bcfun,xspan,tspan,opt);
n = sol(:,:,1);
p = sol(:,:,2);
% remove negative values
p(p<0)=0; p = p+ppo;
n(n<0)=0; n = n+npo;
% Compute np product as a function of time
np = n.*p;
npint = trapz(xspan,np.*xxx,2);
% np(t)
% perform detector convolution
npintcon= zeros(size(npint));
tstep = (50e-9)/Tsteps;
intwidth = int16(dw/tstep)*4;
for index1=intwidth+2:1:length(tspan)-intwidth-2
for index2=index1-intwidth:1:index1+intwidth
npintcon(index1)=npintcon(index1)+npint(index2)*exp(double((index2-index1)^2/2/(dw/tstep)^2));
end
end
% normalize data to maximum value then add dark counts
zmax=find(npintcon==max(npintcon));
npcorr = 1/npintcon(zmax);
npintconc = npintcon*npcorr+darkcounts;
% save as PL intensity
It(:,w) = npintconc;
end
% correction for streak camera double-counting
% from P. B. Coates. J. of Sci. Instr. Series 2, Volume 1, 1968.
data(:,[2]) = -log(1-data(:,[2])*161.6/300);
data(:,[3]) = -log(1-data(:,[3])*178.4/300);
data(:,[4]) = -log(1-data(:,[4])*209.3/300);
data(:,2) = data(:,2)/max(data(:,2))*.95;
data(:,3) = data(:,3)/max(data(:,3))*.95;
data(:,4) = data(:,4)/max(data(:,4))*.95;
%%% Plotting
if PLOT>0
set(0,'DefaultAxesFontSize',12,'DefaultAxesFontWeight','Bold')
% plot of data and simulation on linear scale
figure
plot(data(:,1),data(:,2),'g.'); hold on
plot(data(:,1),data(:,3),'b.'); hold on
plot(data(:,1),data(:,4),'r.'); hold on
plot(tspan*1e9,It,'k-','LineWidth',1.5)
ylim([0,1])
xlim([0,25])
L1=legend('Etch (i)','Etch (ii)','Etch (iii)','Model
fit','Location','NorthEast')
set(L1,'FontSize',12)
legend('Boxoff')
ylabel('Normalized PL intensity [a.u.]')
xlabel('Time [ns]')
% plot of data and simulation on logarithmic scale
figure
semilogy(data(:,1),data(:,2),'g.'); hold on
semilogy(data(:,1),data(:,3),'b.'); hold on
semilogy(data(:,1),data(:,4),'r.'); hold on
plot(tspan*1e9,It,'k-','LineWidth',1.5)
ylim([1e-4,1])
xlim([0,50])
L1=legend('Etch (i)','Etch (ii)','Etch (iii)','Model
fit','Location','NorthEast')
set(L1,'FontSize',12)
legend('Boxoff')
ylabel('Normalized PL intensity [a.u.]')
xlabel('Time [ns]')
% output the data and simulation results to excel document
xlswrite('output1.xls',tspan,1);
xlswrite('output1.xls',data,2);
xlswrite('output1.xls',It,3);
end
%%% Necessary functions for PDE solver 'pdepe'
% define PDE
function [c,f,s] = pdefun(x,t,n,dndx)
beta = 2/pw/sqrt(2*pi)/erf(sqrt(2)/2/pw);
Efunc = Econst*exp(-(t-pt)/4e-8);
Gfunc = alpha*beta*Np*exp(-(t-pt).^2./(2*pw^2))*exp(-alpha*x);
c = [1/Dn; 1/Dp];
f = dndx;
s = [-krad/Dn*n(1)^2 - n(1)/tn/Dn - Efunc*mun/Dn*dndx(1) + Gfunc/Dn;
-krad/Dp*n(2)^2 - n(2)/tn/Dp - Efunc*mup/Dp*dndx(2) + Gfunc/Dp];
end
% define initial function, n(x,t=0)
function [no_x] = icfun(x)
no_x = [0;0];
end
% define boundary conditions, Da*dn/dx(x=0) = n*Sn & dn/dx = 0 at large x
function [pl,ql,pr,qr] = bcfun(xl,nl,xr,nr,t)
pl = -nl*Sn;
ql = [Dn;Dp];
pr = nr;
qr = [0;0];
end
end
2. Crystallographic Orientation Mapping of Zn3P2 Substrates
The distribution of crystallographic orientations for a Zn3P2 substrate was determined by electron
backscattered diffraction (EBSD). A Zeiss 1550 VP field emission scanning electron microscope with an
HKL EBSD system was used to collect diffraction patterns of Zn 3P2 substrates with 10 μm resolution over
a 2.5×2.0 mm area. The diffraction patterns were fit to crystallographic orientations that were then fit to a
grain map using the Tango and MTex analysis software packages. The Zn 3P2 substrates exhibited grain
maps with no preferred orientation and with individual grains that were up to 1–5 mm2 in size as well as
smaller grains that were >1 mm2 in size.
SI Figure 1. Grain map of Zn3P2 substrate that was derived from electron backscatter diffraction
analysis, colored according to crystallographic orientation.
© Copyright 2026 Paperzz