PV特性評価ツール pvanalyze.py 技術ドキュメント
プログラムの動作
pvanalyze.py は、太陽電池デバイスの電気的および光学的特性を評価するためのPythonスクリプトです。主に以下の2つのモードで動作します。
alphaまたはmake_alphaモード:目的: 反射率(R)と透過率(Tr)のスペクトルデータおよび膜厚から、材料の吸収スペクトル(吸収率 \(A\) と吸収係数 \(\alpha\))を計算します。
主な機能:
RおよびTrスペクトルファイルの読み込み。
指定された膜厚(
--d)を用いた \(A\) と \(\alpha\) の計算。吸収係数対フォトンエネルギーのプロット生成。
計算結果をExcelファイルに保存(
make_alphaモードのみ)。
解決する課題: 太陽電池の活性層など、薄膜材料の光吸収特性を定量的に評価し、バンドギャップ推定などの基礎物性解析のためのデータを提供します。
analyzeモード:目的: 暗電流(Dark)および光照射下(Light)でのI-V特性データから、太陽電池の発電特性を解析し、主要な性能指標とパラメータを推定します。
主な機能:
Dark-IVおよびLight-IVファイルの読み込み。
シングルダイオードモデル (SDM) に基づく初期パラメータ(\(I_0\), \(n\), \(I_{PV}\), \(R_s\), \(R_{sh}\))の推定。
光起電力性能指標(\(V_{oc}\), \(J_{sc}\), \(FF\), \(P_{max}\), 効率)の計算。
量子効率(EQE, IQE)の計算(入射光束および吸収スペクトルデータがある場合)。
I-V曲線、ndiode-V曲線、光起電力出力曲線などの比較プロット生成。
解決する課題: 実際の太陽電池の性能を評価し、その動作原理を理解するための電気的パラメータや発電効率を定量的に提供します。
原理
1. IV特性解析 (analyze モード)
プログラムは、太陽電池の動作を記述するシングルダイオードモデル (SDM) に基づき、パラメータを推定します。SDMは以下の式で表されます。
ここで、
\(I\): 外部回路に流れる電流
\(V\): デバイス端子間の電圧
\(I_{PV}\): 光電流
\(I_0\): 逆方向飽和電流
\(n\): ダイオード因子 (理想因子)
\(k_B\): ボルツマン定数 (\(1.380649 \times 10^{-23} \text{ J/K}\))
\(T\): 絶対温度 (K)
\(q\): 素電荷 (\(1.602176634 \times 10^{-19} \text{ C}\))
\(R_s\): 直列抵抗
\(R_{sh}\): 並列抵抗
主要な性能指標とパラメータの計算原理は以下の通りです。
開回路電圧 (\(V_{oc}\)): 電流 \(I=0\) となる電圧値を線形補間によって求めます。
短絡電流密度 (\(J_{sc}\)): 電圧 \(V=0\) となる電流値を局所的な多項式補間によって求め、デバイス面積 \(S\) で割って電流密度を算出します。
最大出力電力 (\(P_{max}\)): 電力 \(P = -V \cdot J\) を計算し、その最大値となる動作点 (\(V_{op}\), \(J_{op}\)) を特定します。
曲線因子 (\(FF\)): $\(FF = \frac{P_{max}}{V_{oc} \cdot J_{sc}}\)$
直列抵抗 (\(R_s\)): 順方向バイアス領域 (\(V > 0\)) において、\(I\)-\(V\) 曲線の傾き \(dI/dV\) が最大となる点を特定し、その点での接線の逆数として \(R_s = (dI/dV)^{-1}\) を推定します。
並列抵抗 (\(R_{sh}\)): 逆方向バイアス領域 (\(V < 0\)) において、\(I\)-\(V\) 曲線の傾きの絶対値 \(|dI/dV|\) が最小となる点を特定し、その点での接線の逆数として \(R_{sh} = (dI/dV)^{-1}\) を推定します。
ダイオード因子 (\(n\)): 順方向バイアス領域 (\(V > 0\), \(I > 0\)) で、\(\ln(|I|)\) の電圧微分 \(d(\ln|I|)/dV\) を計算します。その中で二階微分 \(|d^2(\ln|I|)/dV^2|\) が最小となる代表点を特定し、その点での一次微分値から \(n = \frac{q}{k_B T (d(\ln|I|)/dV)}\) を推定します。
フォトンエネルギー (\(E_{eV}\)): $\(E_{eV} = \frac{h c}{\lambda_{nm}} = \frac{1239.841984}{\lambda_{nm}}\)\( ここで、\)h\( はプランク定数 (\)6.62607015 \times 10^{-34} \text{ J s}\()、\)c\( は光速 (\)2.99792458 \times 10^8 \text{ m/s}\()、\)\lambda_{nm}$ は波長 (nm)。
入射フォトンエネルギー密度 (\(P_0\)): 入射フォトンフラックス \(F_0\) (cm\(^{-2}\) s\(^{-1}\)) が与えられた場合、以下の式で計算します。 $\(P_0 = F_0 \cdot E_{eV} \cdot q\)$
量子効率 (EQE, IQE):
生成外部量子効率 (\(EQE_{gen}\)): \(\frac{|J_{PV}|}{q F_0}\)
外部量子効率 (\(EQE\)): \(\frac{|J_{sc}|}{q F_0}\)
生成内部量子効率 (\(IQE_{gen}\)): \(\frac{|J_{PV}|}{q F_0 A}\)
内部量子効率 (\(IQE\)): \(\frac{|J_{sc}|}{q F_0 A}\) ここで、\(J_{PV}\) は光電流密度、\(J_{sc}\) は短絡電流密度、\(A\) は特定のフォトンエネルギーにおける吸収率。
2. 吸収スペクトル解析 (alpha / make_alpha モード)
反射率 (\(R\)) と透過率 (\(Tr\)) のスペクトルデータおよび膜厚 (\(d\)) から、吸収率 (\(A\)) と吸収係数 (\(\alpha\)) を計算します。
吸収率 (\(A\)): $\(A = 1 - R - Tr\)\( ここで、\)R\( と \)Tr\( はそれぞれ反射率と透過率を \)0 \sim 1$ の範囲に正規化した値です。
吸収係数 (\(\alpha\)): Lambert-Beerの法則に基づいて計算します。材料内部での透過率 \(Tr'\) は、\(Tr' = Tr / (1 - R)\) と定義されます。この内部透過率に対してLambert-Beerの法則を適用すると \(Tr' = e^{-\alpha d}\) となるため、\(\alpha\) は以下のように導出されます。 $\(\alpha = -\frac{1}{d} \ln \left( \frac{Tr}{1 - R} \right)\)\( ここで、\)d\( はPV層の膜厚 (cm単位に変換)、\)Tr\( と \)R$ はそれぞれ透過率と反射率 (0-1)。
3. 共通アルゴリズム
データ読み込み: CSVおよびタブ/スペース区切りテキストファイルからのデータパース。メタデータ、複数スイープの検出、データスキップなどの処理を含みます。
重複X値の処理: X軸に重複する値がある場合、対応するY値を平均して重複を解消します (
consolidate_duplicate_x)。平滑化: Savitzky-Golayフィルターに似た局所的な多項式フィッティングによる平滑化 (
smooth_polyfit) を、導関数計算の前処理として適用します。補間: ゼロ交差点の検出 (
zero_crossing_x) や、異なる波長スケールのスペクトルデータを共通スケールに合わせるための線形補間 (interpolate_to_common_wavelength) を行います。
必要な非標準ライブラリとインストール方法
pvanalyze.py の実行には以下のPythonライブラリが必要です。
matplotlib: グラフ描画用numpy: 数値計算用openpyxl: Excelファイルの読み書き用
これらのライブラリは、以下の pip コマンドを使用してインストールできます。
pip install matplotlib numpy openpyxl
必要な入力ファイル
プログラムの実行モードに応じて、以下のファイルが必要になります。
1. IVデータファイル (.csv)
--dark(暗電流I-Vデータ): 光照射なしで測定されたI-Vデータ。--light(光照射I-Vデータ): 光照射下で測定されたI-Vデータ。期待されるファイル形式とデータ構造:
CSV (カンマ区切り) 形式。
ファイルの先頭にメタデータ行が含まれる場合があります。
DataName行に続く行がデータ値を示します。DataValue, [電圧値], [電流値]の形式でデータが記述されます。例:
MetaData,RecordTime,2026_03_24 14_15_24 DataName,Voltage,Current DataValue,-1.0,1.23e-9 DataValue,-0.9,1.50e-9 DataValue,-0.8,1.75e-9 ...
複数スイープのデータが1つのファイルに含まれる場合、プログラムはそれを自動的に検出して分離します。
2. 光学スペクトルファイル (.txt)
--R(反射率スペクトル): 材料の反射率スペクトルデータ。--Tr(透過率スペクトル): 材料の透過率スペクトルデータ。期待されるファイル形式とデータ構造:
タブ区切りまたはスペース区切りのテキストファイル。
波長 (nm) とスペクトル値 (RまたはTのパーセンテージ、%) の2列データ。
ヘッダー行に「Wavelength(nm)」や「%T」、「%R」などのラベルが含まれる場合があります。
例 (透過率ファイル
T_FILE.txt):サンプル名 Sample_X Wavelength(nm) %T 300.0 0.01 301.0 0.015 302.0 0.02 ...
3. 吸収スペクトルExcelファイル (.xlsx)
--alpha(既存の吸収スペクトルデータ): 以前にmake_alphaモードで生成された吸収スペクトルデータを含むExcelファイル。期待されるファイル形式とデータ構造:
Excelファイル。
alpha_spectrumという名前のシートに、以下のヘッダーを持つデータが格納されていることを想定します。photon_energy_eVwavelength_nmR(反射率、0-1)Tr(透過率、0-1)A(吸収率、0-1)alpha_cm^-1(吸収係数、cm\(^{-1}\))
例 (
alpha_Bi2OS2.xlsxのalpha_spectrumシートの一部):photon_energy_eV wavelength_nm R Tr A alpha_cm^-1 1.0 1239.841984 0.1 0.89 0.01 100.0 1.01 1227.467311 0.1 0.88 0.02 150.0 ...
生成される出力ファイル
プログラムは、実行モードと指定された引数に応じて以下のファイルを生成します。
1. プロット画像ファイル (.png)
ファイル名:
--outprefixで指定された接頭辞にモードに応じたサフィックスが付加されます。--mode alphaまたはmake_alpha:[outprefix]_alpha_E.png内容: 吸収係数 \(\alpha\) とフォトンエネルギー \(E\) の関係をプロットしたグラフ。材料の吸収特性を視覚的に評価できます。
--mode analyze:[outprefix]_iv.png内容: 複数のサブプロットを含む複合グラフ。
Dark/Light-IVデータの \(\log_{10}(|I|)\) vs \(V\) 曲線。
Dark/Light-IVデータの線形 \(J\) vs \(V\) 曲線(順方向と逆方向に分離)。\(R_s\) および \(R_{sh}\) の接線も表示。
推定されたダイオード因子 \(n\) と電圧 \(V\) の関係 (\(n\) vs \(V\) 曲線)。
光起電力出力 (\(P = -J \cdot V\)) vs \(V\) 曲線。\(V_{oc}\), \(J_{sc}\), \(MPP\) (最大出力点) が示されます。
2. 吸収スペクトルExcelファイル (.xlsx)
ファイル名:
--mode make_alphaが指定された場合のみ、[outprefix]_alpha.xlsxが生成されます。内容:
alpha_spectrumシート:analyze_optical関数によって計算された光学データが格納されます。列:
photon_energy_eV,wavelength_nm,R,Tr,A,alpha_cm^-1。
summaryシート:計算に使用された膜厚、RおよびTrファイルのパス、R, Tr, A, alpha の平均値などのメタデータが格納されます。
コマンドラインでの使用例 (Usage)
pvanalyze.py は、以下の基本的な構文でコマンドラインから実行されます。
python pvanalyze.py [オプション]
--help オプションで利用可能な引数と簡単な説明を表示できます。
python pvanalyze.py --help
出力例:
usage: pvanalyze.py [-h] [--mode {alpha,make_alpha,analyze}] [--dark DARK] [--light LIGHT] [--R R] [--Tr TR] [--eq EQ] [--alpha ALPHA] [--T T] [--d D] [--sweep_dark SWEEP_DARK] [--sweep_light SWEEP_LIGHT] [--F0 F0] [--P0 P0] [--E E] [--lambda_nm LAMBDA_NM] [--S S] [--outprefix OUTPREFIX]
PV characterization tool with alpha/analyze modes.
options:
-h, --help show this help message and exit
--mode {alpha,make_alpha,analyze}
Execution mode
--dark DARK Dark IV CSV file
--light LIGHT Illuminated IV CSV file
--R R Reflectance spectrum file
--Tr TR Transmittance spectrum file
--eq EQ Equivalent spectral irradiance file
--alpha ALPHA Excel file for absorption spectrum / alpha
--T T Temperature (K)
--d D PV layer thickness (nm)
--sweep_dark SWEEP_DARK
Sweep index for dark analysis
--sweep_light SWEEP_LIGHT
Sweep index for light analysis
--F0 F0 Incident photon flux (cm^-2 s^-1)
--P0 P0 Incident photon energy density (W/cm^2)
--E E Photon energy (eV). If 0, use lambda.
--lambda_nm LAMBDA_NM
Photon wavelength (nm), used when E=0
--S S Electrode area (cm^2)
--outprefix OUTPREFIX
Output file prefix
主要な引数:
--mode {alpha, make_alpha, analyze}: 実行モードを指定します。デフォルトはanalyze。--dark DARK: 暗電流IVデータ (CSV) のファイルパス。--light LIGHT: 光照射IVデータ (CSV) のファイルパス。--R R: 反射率スペクトル (TXT) のファイルパス。--Tr TR: 透過率スペクトル (TXT) のファイルパス。--alpha ALPHA: 既存の吸収スペクトルExcelファイル (XLSX) のパス。--T T: 測定温度 (K)。デフォルトは300.0。--d D: PV層の膜厚 (nm)。デフォルトは46.837。--S S: 電極面積 (cm\(^2\))。デフォルトは0.0025。--F0 F0: 入射フォトンフラックス (cm\(^{-2}\) s\(^{-1}\))。--P0とは排他的。--P0 P0: 入射光パワー密度 (W/cm\(^2\))。--F0とは排他的。--E E: フォトンエネルギー (eV)。0の場合、--lambda_nmを使用。--lambda_nm LAMBDA_NM: フォトン波長 (nm)。--Eが0の場合に使用。--outprefix OUTPREFIX: 生成される出力ファイルの接頭辞。デフォルトはpvanalyze。--sweep_dark SWEEP_DARK: Dark-IVファイル内の複数スイープから選択するインデックス。デフォルトは0。--sweep_light SWEEP_LIGHT: Light-IVファイル内の複数スイープから選択するインデックス。デフォルトは0。
コマンドラインでの具体的な使用例
以下の例では、デフォルトのファイル名が現在のディレクトリにあると仮定します。
1. 吸収スペクトルを計算しExcelとプロットを生成する (make_alpha モード)
R_FILE.txt (反射率データ), T_FILE.txt (透過率データ) と膜厚 46.837 nm を使用して、吸収スペクトルを計算し、my_sample_alpha.xlsx と my_sample_alpha_E.png を生成します。
python pvanalyze.py --mode make_alpha --R R_FILE.txt --Tr T_FILE.txt --d 46.837 --outprefix my_sample_alpha
実行結果の説明:
標準出力に解析モード、引数、派生値、R/Trファイルの読み込み状況、および計算された光学特性の平均値が表示されます。
my_sample_alpha_alpha.xlsxというExcelファイルが生成されます。このファイルには、波長、フォトンエネルギー、反射率、透過率、吸収率、吸収係数の詳細なデータがalpha_spectrumシートに、サマリー情報がsummaryシートに記録されます。my_sample_alpha_alpha_E.pngというPNG画像ファイルが生成されます。この画像には、フォトンエネルギーに対する吸収係数のプロットが保存されます。
2. I-VデータからPV特性を解析する (analyze モード)
DARK_IV_FILE.csv (暗電流IV), PV_IV_FILE.csv (光照射IV) を使用し、既存の吸収スペクトルファイル my_sample_alpha.xlsx と、測定条件(温度 300 K、膜厚 46.837 nm、面積 0.0025 cm^2、入射光子束 1.958e18 cm^-2 s^-1、波長 500 nm)を指定して、PV特性を解析します。
python pvanalyze.py --mode analyze --dark DARK_IV_FILE.csv --light PV_IV_FILE.csv --alpha my_sample_alpha.xlsx --T 300 --d 46.837 --S 0.0025 --F0 1.958e18 --lambda_nm 500 --outprefix my_sample_pv
実行結果の説明:
標準出力に解析モード、引数、派生値、Dark/Light-IVファイルの読み込み状況、初期パラメータ推定値、光起電力性能指標 (\(V_{oc}\), \(J_{sc}\), \(FF\), \(P_{max}\), 効率)、光学特性 (\(E\), \(\alpha(E)\), \(A(E)\))、および量子効率 (\(EQE_{gen}\), \(IQE_{gen}\), \(EQE\), \(IQE\)) が詳細に表示されます。
my_sample_pv_iv.pngというPNG画像ファイルが生成されます。この画像には、Dark/Light-IV曲線、ndiode-V曲線、光起電力出力曲線を含む複合プロットが保存されます。