schottky.py ドキュメント
概要
schottky.py は、ショットキーダイオードの電流-電圧(IV)特性をシミュレーションするためのPythonスクリプトです。このプログラムは、さまざまなショットキーモデル(単純拡散、拡散、ショットキー障壁低下、トンネル、熱電子電界放出)を用いてIV特性を計算し、結果をプロットします。物理定数や材料パラメータをコマンドライン引数として受け取り、順方向および逆方向バイアスでの電流を数値的に解きます。
関連リンク: schottky_usage
インストール
このスクリプトを実行するには、Python 3 と以下の非標準ライブラリが必要です。これらのライブラリは pip を使用してインストールできます。
pip install numpy matplotlib
使い方
スクリプトはコマンドラインから実行します。
ヘルプメッセージの表示
利用可能なオプションのリストとそれぞれの説明を表示するには、--help オプションを使用します。
python schottky.py --help
基本的な実行例
デフォルトのパラメータで Simple モデルを使用してシミュレーションを実行します。
python schottky.py
特定のモデルと温度を指定してシミュレーションを実行する例です。
python schottky.py --model Diffusion --temp 350
シミュレーションが完了すると、IV特性のプロットが画面に表示されます。
コマンドライン引数
schottky.py は argparse モジュールを使用して以下のコマンドライン引数を受け取ります。
--model: 使用するショットキーモデルの種類を指定します。選択肢:
Simple,Diffusion,Schottky,Tunneling,TFEデフォルト:
Simple型: 文字列
--temp: シミュレーションの温度 \([K]\) を指定します。デフォルト:
300.0型: 浮動小数点数
--area: ダイオードの面積 \([cm^2]\) を指定します。デフォルト:
0.01型: 浮動小数点数
--efm: 金属のフェルミ準位 \([eV]\) を指定します。デフォルト:
4.4型: 浮動小数点数
--ecn: 半導体の電子親和力 \([eV]\) を指定します。デフォルト:
4.05型: 浮動小数点数
--ndn: 半導体のドナー濃度 \([cm^{-3}]\) を指定します。デフォルト:
1.0e16型: 浮動小数点数
--mun: 電子の移動度 \([cm^2/Vs]\) を指定します。デフォルト:
1500.0型: 浮動小数点数
--eps_r: 半導体の比誘電率を指定します。デフォルト:
11.9型: 浮動小数点数
--dn: 半導体の厚さ \([nm]\) を指定します。デフォルト:
1000.0型: 浮動小数点数
--men: 電子の有効質量比を指定します。デフォルト:
0.19型: 浮動小数点数
--n_tunnel:Tunnelingモデルで使用される理想係数を指定します。デフォルト:
2.0型: 浮動小数点数
--v0: 印加電圧の開始値 \([V]\) を指定します。デフォルト:
-2.0型: 浮動小数点数
--v1: 印加電圧の終了値 \([V]\) を指定します。デフォルト:
1.0型: 浮動小数点数
--step: 印加電圧のステップサイズ \([V]\) を指定します。デフォルト:
0.02型: 浮動小数点数
物理定数
スクリプト内で定義されている主要な物理定数は以下の通りです。
KB: ボルツマン定数。\(k_B = 1.380649 \times 10^{-23} \, [J/K]\)QE: 素電荷。\(q = 1.60217663 \times 10^{-19} \, [C]\)EPS0: 真空の誘電率。\(\epsilon_0 = 8.854187 \times 10^{-12} \, [F/m]\)ME: 電子の静止質量。\(m_e = 9.109383 \times 10^{-31} \, [kg]\)
関数リファレンス
関数 calculate_params()
概要
ショットキーダイオードの主要な物理パラメータを計算します。
詳細説明
リチャードソン定数、半導体側の有効状態密度とフェルミ準位、ショットキー障壁高さ、内蔵電位、直列抵抗(単位面積あたり)、飽和電流密度などを計算します。
引数
args(argparse.Namespace): コマンドライン引数から解析されたパラメータを含むオブジェクト。args.temp(float): 温度 \([K]\)。args.men(float): 電子の有効質量比。args.ecn(float): 半導体の電子親和力 \([eV]\)。args.efm(float): 金属のフェルミ準位 \([eV]\)。args.ndn(float): 半導体のドナー濃度 \([cm^{-3}]\)。args.mun(float): 電子の移動度 \([cm^2/Vs]\)。args.dn(float): 半導体の厚さ \([nm]\)。
戻り値
tuple[float, float, float, float, float]: 飽和電流密度 \([A/cm^2]\)、内蔵電位 \([V]\)、ショットキー障壁高さ \([eV]\)、半導体側の有効状態密度 \([cm^{-3}]\)、直列抵抗(単位面積あたり) \([\Omega cm^2]\) のタプル。
計算式
リチャードソン定数 (\(A_{cm^2}\)): 有効質量比を考慮したリチャードソン定数を計算します。
\[\begin{split}A_{m^2} = A_{0} \cdot m_{en} \\ A_{cm^2} = A_{m^2} \cdot 10^{-4}\end{split}\]ここで、\(A_{0} = 1.20173 \times 10^{6} \, [A/(m^2 K^2)]\) は電子の静止質量におけるリチャードソン定数、 \(m_{en}\) は電子の有効質量比です。
半導体側の有効状態密度 (\(N_c\)): 伝導帯の有効状態密度を計算します。
\[N_c = 2.51 \times 10^{19} \cdot (m_{en})^{1.5} \cdot \left(\frac{T}{300}\right)^{1.5} \quad [cm^{-3}]\]ここで、\(T\) は温度 \([K]\) です。
半導体側のフェルミ準位 (\(E_{Fn}\)): 半導体側のフェルミ準位を計算します。(推測)非縮退半導体を仮定しています。
\[E_{Fn} = E_{cn} - \frac{k_B T}{q} \ln\left(\frac{N_D}{N_c}\right)\]ここで、\(E_{cn}\) は半導体の電子親和力(伝導帯底エネルギーと真空準位の差)、\(N_D\) はドナー濃度です。
ショットキー障壁高さ (\(\phi_B\)): 金属と半導体の仕事関数の差から導出される理想的なショットキー障壁高さを計算します。(推測)ここで
args.ecnは電子親和力、args.efmは金属のフェルミ準位と対応しています。\[\phi_B = -(E_{cn} - E_{fm})\]内蔵電位 (\(V_{bi}\)): 半導体と金属のフェルミ準位の差から内蔵電位を計算します。
\[V_{bi} = -(E_{Fn} - E_{fm})\]直列抵抗(単位面積あたり、\(R_s\)): 半導体の導電率 \(\sigma_n\) を介して、単位面積あたりの直列抵抗を計算します。半導体の厚さ
args.dnはナノメートルからセンチメートルに変換されます。\[\begin{split}\sigma_n = q N_D \mu_n \quad [S/cm] \\ R_s = \frac{1}{\sigma_n} \cdot d_n \cdot 10^{-7} \quad [\Omega cm^2]\end{split}\]ここで \(\mu_n\) は電子の移動度、\(d_n\) は半導体の厚さ \([nm]\) です。
飽和電流密度 (\(J_s\)): 熱電子放出理論に基づき、ショットキーダイオードの飽和電流密度を計算します。
\[J_s = A_{cm^2} T^2 \exp\left(-\frac{q \phi_B}{k_B T}\right)\]
関数 calculate_schottky_current()
概要
指定されたモデルに基づき、ショットキーダイオードの電流を計算します。
詳細説明
ニュートン法を用いて、直列抵抗効果を考慮したダイオード電圧 \(V_d\) を数値的に解き、それに対応する電流 \(I\) を求めます。内部関数 get_current(vd) は、与えられたダイオード電圧 \(V_d\) に対して、モデルに応じた電流を計算します。モデルには Simple, Diffusion, Schottky (障壁低下), Tunneling, TFE (熱電子放出と電界放出) があります。
引数
model_type(str): 使用するショットキーモデルの種類 (Simple,Diffusion,Schottky,Tunneling,TFE)。v_target(float): 印加電圧 \([V]\)。temp(float): 温度 \([K]\)。mus(float): 電子の移動度 \([cm^2/Vs]\)。ncs(float): 半導体の有効状態密度 \([cm^{-3}]\)。nds(float): 半導体のドナー濃度 \([cm^{-3}]\)。epss(float): 半導体の誘電率 \([F/m]\)。js(float): 飽和電流密度 \([A/cm^2]\)。phi_b(float): ショットキー障壁高さ \([eV]\)。v_bi(float): 内蔵電位 \([V]\)。n_diode(float): ダイオードの理想係数。rs(float): 直列抵抗 \([\Omega]\)。area(float): ダイオードの面積 \([cm^2]\)。v_initial(float): ニュートン法の初期ダイオード電圧 \([V]\)。men(float): 電子の有効質量比。n_tunnel(float): トンネルモデルの理想係数。
戻り値
tuple[float, float]: 計算されたダイオード電圧 \([V]\) と計算された電流 \([A]\) のタプル。
計算アルゴリズムとモデル
この関数は、印加電圧 \(V_{app}\)、ダイオード電圧 \(V_d\)、電流 \(I\)、直列抵抗 \(R_s\) の間に成り立つ関係式 \(V_{app} = V_d + I R_s\) をニュートン法を用いて数値的に解きます。
各モデルは内部関数 get_current(vd) で実装されており、\(V_d\) に応じた電流 \(I\) を計算します。
熱電圧 (\(V_t\)):
\[V_t = \frac{n_{diode} k_B T}{q}\]ここで \(n_{diode}\) はダイオードの理想係数です。
Simpleモデル: 理想的なショットキーダイオードの電流-電圧特性を単純なダイオード方程式で計算します。これは、順方向バイアス時、または障壁低下やトンネル効果が無視できる場合のモデルです。\[I = J_s \left( \exp\left(\frac{V_d}{V_t}\right) - 1 \right) \cdot \text{Area}\]Diffusionモデル: 拡散電流成分を考慮したモデルです。逆バイアス領域で電流が単純拡散モデルよりも増加する可能性を考慮します。(推測)半導体表面の最大電界 \(E_{max}\) を計算し、それが電流に影響を与えます。\[E_{max} = \sqrt{\frac{2 q N_D (V_{bi} - V_d)}{\epsilon_s}}\]電流は \(E_{max}\) に依存する係数 \(k_{exp}\) を用いて計算されます。
\[k_{exp} = q \mu_n N_c E_{max} \exp\left(-\frac{q \phi_B}{k_B T}\right)\]最終的な電流は:
\[I = k_{exp} \left( \exp\left(\frac{V_d}{V_t}\right) - 1 \right) \cdot 10^{-4} \cdot \text{Area}\]Schottkyモデル(障壁低下): 画像力(image force lowering)などの効果によるショットキー障壁低下を考慮したモデルです。 コード内のk1は、障壁低下量に関わる係数で、印加電圧によって電界が変化し、障壁高さが実効的に減少することを模擬しています。\[k_1 = \left(\frac{q}{\epsilon_s}\right)^{1.5} \frac{\sqrt{2}}{4\pi} \sqrt{N_D} \sqrt{V_{bi} - V_d}\]障壁低下による電流増加は、飽和電流密度に補正項を掛ける形で表現されます。
\[I = J_s \cdot \exp\left(\frac{q}{k_B T} \sqrt{k_1}\right) \cdot \left( \exp\left(\frac{V_d}{V_t}\right) - 1 \right) \cdot \text{Area}\](推測)この \(\sqrt{k_1}\) は、電界による障壁低下量の一次近似を表現している可能性があります。
Tunnelingモデル: 簡易的なトンネル効果を考慮したモデルです。特に逆方向バイアスで顕著になるトンネル電流の増加を模擬します。\[k_{tunnel} = \exp\left(\frac{V_d}{n_{tunnel} \cdot 0.026}\right)\]最終的な電流は:
\[I = J_s \cdot k_{tunnel} \cdot \left( \exp\left(\frac{V_d}{V_t}\right) - 1 \right) \cdot \text{Area}\]ここで \(n_{tunnel}\) はトンネルモデルの理想係数、 \(0.026V\) は室温での熱電圧 \(k_B T / q\) に近い値です。
TFEモデル(熱電子電界放出): 熱電子放出と電界放出(トンネル効果)の両方を考慮した複合モデルです。 まず、トンネル効果の特性エネルギー \(E_{00}\) を計算します。\[\begin{split}\hbar = 1.0545718 \times 10^{-34} \quad [J \cdot s] \\ m^* = m_{en} \cdot m_e \\ E_{00} = \frac{q \hbar}{2} \sqrt{\frac{N_D}{\epsilon_s m^*}} \quad [J] \\ E_{00,eV} = E_{00} / q \quad [eV]\end{split}\]次に、熱電子電界放出モデルの実効的なエネルギーパラメータ \(E_0\) を計算します。
\[E_0 = E_{00,eV} \cdot \left( \frac{1}{\tanh(E_{00,eV} / (k_B T / q))} \right)\]順方向バイアス (\(V_d \ge 0\)): 電流は \(E_0\) を用いて計算されます。
\[I = J_s \cdot \left( \exp\left(\frac{V_d}{E_0}\right) - 1 \right) \cdot \text{Area}\]逆方向バイアス (\(V_d < 0\)): 電界による障壁の薄層化を考慮した補正項
tunnel_factorが追加されます。これは逆バイアスが大きくなる(\(V_d\) が負の方向に大きくなる)ほどトンネル確率が増加することを簡易的に模擬しています。(推測)\[\text{tunnel\_factor} = \exp\left(|V_d| \cdot \left(\frac{E_{00,eV}}{k_B T / q}\right)^2\right)\]最終的な電流は:
\[I = J_s \cdot \text{tunnel\_factor} \cdot \left( \exp\left(\frac{V_d}{E_0}\right) - 1 \right) \cdot \text{Area}\]
関数 main()
概要
コマンドライン引数に基づいてショットキーダイオードのIV特性シミュレーションを実行し、結果をプロットします。
詳細説明
argparse を使用して入力パラメータを解析し、calculate_params で基本パラメータを計算した後、calculate_schottky_current を繰り返し呼び出してIV曲線を生成します。最後にMatplotlibで結果を可視化します。
戻り値
None: なし
処理の流れ
引数解析:
argparse.ArgumentParserを設定し、コマンドライン引数を解析します。各引数の設定については「コマンドライン引数」セクションを参照してください。パラメータ計算: 解析された引数を
calculate_params()関数に渡し、飽和電流密度js、内蔵電位v_bi、ショットキー障壁高さphi_b、半導体側の有効状態密度ncs、単位面積あたりの直列抵抗rs_unitなどの基本物理パラメータを計算します。 半導体の誘電率epssは、比誘電率args.eps_rと真空の誘電率EPS0から計算されます。 全体の直列抵抗rsはrs_unitをダイオード面積args.areaで割ることで計算されます。IV特性の生成:
np.arange()を使用して、args.v0からargs.v1までの印加電圧の配列v_appsをargs.step間隔で生成します。 各印加電圧に対してcalculate_schottky_current()関数を呼び出し、対応する電流値を計算します。 ニュートン法の初期値v_prevは、前のステップで計算されたダイオード電圧を再利用することで、収束を高速化しています。結果表示: 計算されたモデル、障壁高さ、内蔵電位、飽和電流密度などの主要なパラメータを標準出力に表示します。
グラフ表示:
matplotlib.pyplotを使用してIV特性をプロットします。 横軸に印加電圧 \([V]\)、縦軸に電流の絶対値の対数 \(|Current| \, [A]\) を取り、半対数グラフで表示します。 グラフにはグリッド、凡例、タイトルが含まれます。
使用ライブラリ
numpy: 数値計算、特に電圧範囲の生成 (np.arange()) に使用されます。math: 数学関数(指数関数math.exp()、対数関数math.log()、平方根math.sqrt()、ハイパボリックタンジェントmath.tanh())に使用されます。argparse: コマンドライン引数の解析に使用されます。matplotlib.pyplot: シミュレーション結果のグラフ描画に使用されます。