Search Posts

HgCV波形の計算 空乏層の見積もり、伝導帯のバイアス依存の計算

水銀CV(Mercury Probe CV)測定を想定する場合、金属(水銀)と半導体の間に形成されるショットキー接合としてモデル化するのが一般的です。

pn接合との大きな違いは、金属側の空乏層を無視できるため、計算式がよりシンプルになる点です。また、コンダクションバンド(伝導帯)のポテンシャル形状 $E_c(x)$ は、ポアソン方程式を2回積分することで放物線状のプロットとして得られます。


1. ショットキー接合の数式

空乏層幅W

外部バイアス <span class="math-inline" data-math="V" data-index-in-node="7">$V$</span>(逆バイアスのとき負)を加えたときの空乏層幅は以下の通りです。

W = \sqrt{\frac{2\epsilon_s}{q N_D} (V_{bi} - V - \frac{kT}{q})}

<span class="math-inline" data-math="kT/q" data-index-in-node="2">kT/q</span> は拡散項(Debye lengthの影響)ですが、通常は省略されることも多いです。

伝導帯の形状 <span class="math-inline" data-math="E_c(x)" data-index-in-node="7">E_c(x)</span>

空乏層内(<span class="math-inline" data-math="0 \le x \le W" data-index-in-node="5">0 \le x \le W)での電位分布 \phi(x) を求め、エネルギー単位に変換します。

E_c(x) = E_{c, \text{bulk}} + \frac{q^2 N_D}{2\epsilon_s} (W - x)^2

x=0(表面)で最大値(障壁高さ)となり、 <span class="math-inline" data-math="x=W" data-index-in-node="22">x=W でバルクの値に収束します。

バルクの <span class="math-inline" data-math="E_c - E_f" data-index-in-node="5">E_c - E_f</span> の算出

非縮退半導体近似を用いると、伝導帯下端 <span class="math-inline" data-math="E_c" data-index-in-node="20">E_c とフェルミ準位 <span class="math-inline" data-math="E_f" data-index-in-node="32">E_f の差は以下の式で求まります。

E_c - E_f = kT \ln \left( \frac{N_c}{N_D} \right)

ここで、<span class="math-inline" data-math="N_c" data-index-in-node="4">N_c は有効状態密度であり、GaN(300K)では以下の値を用います。

  •  </span><span class="math-inline" data-math="N_c \approx 2.3 \times 10^{18} \text{ cm}^{-3}" data-index-in-node="0">N_c \approx 2.3 \times 10^{18} \text{ cm}^{-3}

  •  k T \approx 0.0259 \text{ eV} (at 300K)

ショットキー障壁と内蔵電位<span class="math-inline" data-math="V_{bi}" data-index-in-node="14">V_{bi}</span>

水銀(Hg)とn型GaNの界面における障壁高さ <span class="math-inline" data-math="\phi_{Bn}" data-index-in-node="24">\phi_{Bn} は文献によりますが、一般に <span class="math-inline" data-math="1.0 \sim 1.1 \text{ eV}" data-index-in-node="48">1.0 \sim 1.1 \text{ eV}程度です。

内蔵電位 <span class="math-inline" data-math="V_{bi}" data-index-in-node="83">V_{bi}は、表面の曲がりからバルクのオフセットを引いたものになります。

V_{bi} = \phi_{Bn} - \frac{(E_c - E_f)_{\text{bulk}}}{q}

2. Pythonコード

GaNだけでなく、AlGaNでも計算ができるように線形補間でAl組成によるパラメータ変化を仮定し、コンダクションバンドとC-V, 1/C^{2}-Vプロットをできるプログラムを作りました。

import numpy as np
import matplotlib.pyplot as plt
import argparse

def get_algan_properties(al_ratio, Nd, T=300):
    q = 1.602e-19
    k = 1.38e-23
    k_ev = 8.617e-5
    eps0 = 8.854e-14
    m0 = 9.11e-31
    h = 6.626e-34
    
    eps_r = al_ratio * 8.5 + (1 - al_ratio) * 8.9
    eps_s = eps0 * eps_r
    me_star = (al_ratio * 0.3 + (1 - al_ratio) * 0.2) * m0
    phi_bn = 1.1 + 1.5 * al_ratio 
    
    nc = 2 * [I]2 * np.pi * me_star * k * T) / (h**2**(1.5) * 1e-6
    Ec_Ef_bulk = (k_ev * T) * np.log(nc / Nd) if Nd < nc else 0
    Vbi = phi_bn - Ec_Ef_bulk
    
    return eps_s, Vbi, Ec_Ef_bulk, q

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--al', type=float, default=0.2, help='Al composition (0-1)')
    parser.add_argument('--nd', type=float, default=1e17, help='Donor concentration [cm^-3]')
    parser.add_argument('--v_min', type=float, default=-10.0, help='Min voltage [V]')
    parser.add_argument('--v_max', type=float, default=0.0, help='Max voltage [V]')
    parser.add_argument('--area', type=float, default=5e-3, help='Probe area [cm^2]')
    args = parser.parse_args()

    # 物性値の取得
    eps_s, Vbi, Ec_Ef_bulk, q = get_algan_properties(args.al, args.nd)
    
    # 電圧スイープデータの作成
    v_sweep = np.linspace(args.v_min, args.v_max, 100)
    w_list = []
    c_list = []
    
    for v in v_sweep:
        pot = Vbi - v
        w = np.sqrt[II]2 * eps_s / q / args.nd) * pot) if pot > 0 else 1e-9
        c = (eps_s / w) * args.area * 1e12 # [pF]
        w_list.append(w)
        c_list.append(c)
    
    w_sweep = np.array(w_list)
 … Continue reading

    # --- 1. バンドプロファイル (V_min と V_max) ---
    x_plot = np.linspace(0, max(w_sweep)*1.5, 500)
    for v_val, col, lbl in zip([args.v_min, args.v_max], ['crimson', 'dodgerblue'], ['V_min', 'V_max']):
        pot = Vbi - v_val
        w_val = np.sqrt[III]2 * eps_s / q / args.nd) * pot) if pot > 0 else 0
        Ec = np.full_like(x_plot, Ec_Ef_bulk)
        mask = x_plot <= w_val
        Ec[mask] = (q * args.nd / (2 * eps_s * (w_val - x_plot[mask])**2 + Ec_Ef_bulk
        ax1.plot(x_plot * 1e7, Ec, color=col, lw=2, label=f'Ec at {v_val}V')
        ax1.axvline(w_val * 1e7, color=col, linestyle='--', alpha=0.5)

    ax1.axhline(0, color='black', lw=1, label='Ef')
    ax1.set_title("Band Profile Comparison")
    ax1.set_xlabel("Depth [nm]")
    ax1.set_ylabel("Energy [eV]")
    ax1.legend()
    ax1.grid(True, alpha=0.2)

    # --- 2. C-V カーブ ---
    ax2.plot(v_sweep, c_sweep, color='blue', lw=2)
    ax2.scatter([args.v_min, args.v_max], [c_sweep[0], c_sweep[-1]], color=['crimson', 'dodgerblue'], zorder=5)
    ax2.set_title("C-V Characteristics")
    ax2.set_xlabel("Bias Voltage [V]")
    ax2.set_ylabel("Capacitance [pF]")
    ax2.grid(True, alpha=0.2)

    # --- 3. 1/C^2 - V プロット ---
    ax3.plot(v_sweep, inv_c2_sweep, color='red', lw=2)
    ax3.scatter([args.v_min, args.v_max], [inv_c2_sweep[0], inv_c2_sweep[-1]], color=['crimson', 'dodgerblue'], zorder=5)
    ax3.set_title("$1/C^2$ - V Plot")
    ax3.set_xlabel("Bias Voltage [V]")
    ax3.set_ylabel("$1/C^2$ [$pF^{-2}$]")
    ax3.grid(True, alpha=0.2)

    plt.tight_layout()
    plt.show()

if __name__ == '__main__':
    main()

Al組成、ドナー密度、CV測定の電圧の最小・最大値、Hgプローブの面積を変数に実行することができる。

脚注

脚注
I 2 * np.pi * me_star * k * T) / (h**2
II 2 * eps_s / q / args.nd) * pot) if pot > 0 else 1e-9 c = (eps_s / w) * args.area * 1e12 # [pF] w_list.append(w) c_list.append(c) w_sweep = np.array(w_list) c_sweep = np.array(c_list) inv_c2_sweep = 1.0 / (c_sweep**2) # グラフの作成 (1行3列) fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(18, 5
III 2 * eps_s / q / args.nd) * pot) if pot > 0 else 0 Ec = np.full_like(x_plot, Ec_Ef_bulk) mask = x_plot <= w_val Ec[mask] = (q * args.nd / (2 * eps_s

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください