0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

太陽電池のI-V曲線は直列抵抗と並列抵抗でどう変わる?シングルダイオードモデルで確認

0
Posted at

「光が当たれば発電する」——それだけじゃないんです。

太陽電池って、一見シンプルに見えますよね。光を浴びれば電流が流れて、電圧が出る。でも、実際の特性をグラフにしてみると、曲線の「形」にすべての秘密が隠されているんです。

例えば、こんな経験はありませんか?

  • データシートのI-V曲線を見ても「なんとなく右上がり」としか思えない
  • 「直列抵抗」と「並列抵抗」の違いを聞かれて、うまく説明できない
  • フィルファクター(FF)って数値、何を意味するのかピンとこない

この記事では、ブラウザで動く無料シミュレーターを使って、太陽電池セルの「見えない内部状態」を可視化しながら解説します。

しかも、ただ見るだけじゃない。実際に動くコードを書き、数値計算の手順を追い、現実の不良解析にどう使うかまで踏み込みます。

▶ 今回使うシミュレーター: 太陽電池セル特性シミュレーター (ブラウザで即動作、登録不要)


ざっくり本質——「水槽のたとえ」で直感を作る

太陽電池セルの動作を一言で言うなら:

「光で押し上げられた電子が、ダイオードという堰を越えて流れる様子」

想像してみてください。

  • 水槽 = 太陽電池セル
  • 光(照射強度G) = 蛇口から注がれる水の量。光が強いほど、水槽に水がどんどん入ってくる(= 電流が増える)
  • ダイオード = 水槽の出口にある「一方通行の堰」。電子はこの堰を越えないと外に出られない
  • 電圧(V) = 堰の高さ。電圧を高くすると、堰を越えるのに必要なエネルギーが増える
  • 直列抵抗(Rs) = 堰から先の排水管が細くなっている状態。いくら水を押し出そうとしても、出口で詰まる
  • 並列抵抗(Rsh) = 水槽の壁に空いた小さな穴。ここから水が漏れてしまう

このたとえで重要なのは、理想的な太陽電池は「完全な堰」と「漏れのない水槽」が必要だということ。

現実のセルでは、電極の接触抵抗(Rs)や結晶欠陥によるリーク(Rsh)が必ず存在します。この2つの抵抗値が、曲線の「肩」と「腰」を決定的に変えてしまう——それがこの記事の核心です。


数式で理解する——シングルダイオードモデル

さて、たとえ話だけでは設計には使えません。ここからは実際の計算式に入ります。

太陽電池セルの電流-電圧特性は、以下のシングルダイオードモデルで記述されます。

I = I_{ph} - I_0 \left[ \exp\left( \frac{V + I R_s}{n V_T} \right) - 1 \right] - \frac{V + I R_s}{R_{sh}}

各項の意味を日本語で解説します:

項 意味 単位 現実的な値の目安
$I$ セルから取り出せる電流(出力) A 0〜9 A(セルサイズによる)
$I_{ph}$ 光電流(光で生成されたキャリアによる電流) A 照射強度に比例(1000 W/m²で約8〜9 A)
$I_0$ 暗飽和電流(暗闇でも流れる微小な逆方向電流) A 10⁻¹¹〜10⁻⁸ A(極めて小さい)
$V$ セルの端子電圧 V 0〜0.7 V(単セル)
$R_s$ 直列抵抗(電極・配線・半導体バルクの抵抗) Ω 0.1〜1 Ω(健全なら0.1〜0.5 Ω)
$R_{sh}$ 並列(シャント)抵抗(リーク経路の抵抗) Ω 100〜数千Ω(健全なら500 Ω以上)
$n$ 理想因子(ダイオードの品質指標) 無次元 1〜2(結晶Siで1〜1.5)
$V_T$ 熱電圧 = $kT/q$ V 約0.02585 V(25°C時)

なぜこの式が「解くのが難しい」のか

この式、実は$I$が右辺と左辺の両方に出てくるんです。

つまり、$I = f(I)$という陰関数になっていて、単純に代入して解くことができません。実際の計算では、ニュートン法などの数値解法が必要になります。

導出の1ステップ——暗電流の項を理解する

ダイオードを流れる電流(暗電流)は、理想的なpn接合では:

I_{diode} = I_0 \left[ \exp\left( \frac{V_d}{n V_T} \right) - 1 \right]

ここで、$V_d$はダイオードにかかる電圧。しかし、直列抵抗$R_s$があるため、セルの端子電圧$V$とダイオード電圧$V_d$は異なります:

V_d = V + I R_s

つまり、電流が流れるほど、直列抵抗による電圧降下が発生し、ダイオードにかかる実効的な電圧が増える——これが曲線の「肩をつぶす」メカニズムです。


コードで実装する ★最重要★

それでは、上記の式を実際に動くJavaScriptコードで実装してみましょう。

このコードは、シミュレーターのコア計算ロジックを再現しています。ブラウザの開発者ツール(F12)のコンソールに貼り付けて実行できます。

/**
 * 太陽電池セルのI-V特性を計算する(シングルダイオードモデル)
 * 
 * @param {number} G - 照射強度 [W/m²](標準: 1000)
 * @param {number} T - 温度 [°C](標準: 25)
 * @param {number} n - 理想因子(標準: 1.3)
 * @param {number} Rs - 直列抵抗 [Ω](標準: 0.3)
 * @param {number} Rsh - 並列抵抗 [Ω](標準: 500)
 * @param {number} N - 直列セル数(標準: 1)
 * @returns {Array} I-Vペアの配列 [{V, I}, ...]
 */
function calcIVCurve(G = 1000, T = 25, n = 1.3, Rs = 0.3, Rsh = 500, N = 1) {
    // 物理定数
    const k = 1.380649e-23;  // ボルツマン定数 [J/K]
    const q = 1.602176634e-19; // 素電荷 [C]
    
    // 温度を絶対温度に変換
    const TK = T + 273.15; // [K]
    
    // 熱電圧 VT = kT/q
    const VT = k * TK / q; // [V](25°Cで約0.02585 V)
    
    // 光電流 Iph: 照射強度に比例(標準状態 1000 W/m² で 8.5 A と仮定)
    const Iph = (G / 1000) * 8.5; // [A]
    
    // 暗飽和電流 I0: 温度依存性を考慮(簡易式)
    const I0 = 1.0e-10 * Math.pow(TK / 298.15, 3) * 
               Math.exp((1.12 * q / (k * 298.15)) * (1 - 298.15 / TK));
    // ※ 1.12 eV はシリコンのバンドギャップ(簡易近似)
    
    // I-V曲線の計算(電圧を0から開放電圧付近までスキャン)
    const points = [];
    const Vmax = 0.7 * N; // 最大電圧(単セル約0.7V)
    const steps = 200;
    
    for (let i = 0; i <= steps; i++) {
        const V = (Vmax * i) / steps; // 端子電圧 [V]
        
        // --- ニュートン法で電流Iを解く ---
        // 目的関数: f(I) = Iph - I0*(exp((V+I*Rs)/(n*VT))-1) - (V+I*Rs)/Rsh - I = 0
        // 導関数:   f'(I) = -I0*(1/(n*VT))*exp((V+I*Rs)/(n*VT)) - Rs/Rsh - 1
        
        let I = Iph * 0.9; // 初期推定値(短絡電流の90%)
        const tol = 1e-12; // 収束判定
        const maxIter = 100;
        
        for (let iter = 0; iter < maxIter; iter++) {
            const Vd = V + I * Rs; // ダイオード電圧
            const expArg = Vd / (n * VT);
            
            // 指数関数のオーバーフロー対策
            let expVal;
            if (expArg > 50) {
                expVal = Math.exp(50); // 大きな値でクリップ(実用上問題なし)
            } else {
                expVal = Math.exp(expArg);
            }
            
            // 関数値 f(I)
            const f = Iph - I0 * (expVal - 1) - Vd / Rsh - I;
            
            // 導関数 f'(I)
            const df = -I0 * (1 / (n * VT)) * expVal - Rs / Rsh - 1;
            
            // ニュートン法の更新
            const delta = f / df;
            I = I - delta;
            
            // 収束判定
            if (Math.abs(delta) < tol) break;
            
            // 電流が負になったら強制的に0に(逆流防止)
            if (I < 0) { I = 0; break; }
        }
        
        points.push({ V, I });
    }
    
    return points;
}

// --- 使用例 ---
// 標準条件(1000 W/m², 25°C, n=1.3, Rs=0.3Ω, Rsh=500Ω)で計算
const result = calcIVCurve(1000, 25, 1.3, 0.3, 500, 1);

// 最初の5点と最後の5点を表示
console.log("標準条件のI-V特性(最初と最後の5点):");
for (let i = 0; i < 5; i++) {
    console.log(`V=${result[i].V.toFixed(4)} V, I=${result[i].I.toFixed(4)} A`);
}
console.log("  ...");
for (let i = result.length - 5; i < result.length; i++) {
    console.log(`V=${result[i].V.toFixed(4)} V, I=${result[i].I.toFixed(4)} A`);
}

// 最大出力点(MPP)を探索
let maxPower = 0;
let mppV = 0, mppI = 0;
for (const pt of result) {
    const power = pt.V * pt.I;
    if (power > maxPower) {
        maxPower = power;
        mppV = pt.V;
        mppI = pt.I;
    }
}
console.log(`\n最大出力点 (MPP): V=${mppV.toFixed(4)} V, I=${mppI.toFixed(4)} A, P=${maxPower.toFixed(4)} W`);

このコードのポイント:

  1. ニュートン法で陰関数を解く — これがシングルダイオードモデル計算の核心
  2. 指数関数のオーバーフロー対策 — 電圧が高くなると指数が爆発するので、クリップ処理が必要
  3. 温度依存性を簡易的に考慮 — 飽和電流I₀は温度の3乗とバンドギャップの指数関数に依存

数値例で確かめる

実際に数値を入れて計算してみましょう。

条件:標準状態(1000 W/m², 25°C)

  • $G = 1000$ W/m² → $I_{ph} = 8.5$ A
  • $T = 25$°C → $T_K = 298.15$ K → $V_T = 0.02585$ V
  • $n = 1.3$, $R_s = 0.3$ Ω, $R_{sh} = 500$ Ω

短絡状態(V = 0 V)の計算

$V = 0$ を代入すると:

I_{sc} = I_{ph} - I_0 \left[ \exp\left( \frac{0 + I_{sc} \times 0.3}{1.3 \times 0.02585} \right) - 1 \right] - \frac{0 + I_{sc} \times 0.3}{500}

これをニュートン法で解くと、$I_{sc} \approx 8.493$ A が得られます。

$I_{ph} = 8.5$ A とほぼ等しいですね。直列抵抗が小さければ、短絡電流は光電流にほぼ一致します。

開放状態(I = 0 A)の計算

$I = 0$ を代入すると:

0 = 8.5 - I_0 \left[ \exp\left( \frac{V_{oc}}{1.3 \times 0.02585} \right) - 1 \right] - \frac{V_{oc}}{500}

$I_0 \approx 1.0 \times 10^{-10}$ A とすると、この式を解いて $V_{oc} \approx 0.618$ V が得られます。

最大出力点

コードの実行結果から、MPPは:

  • $V_{mpp} \approx 0.504$ V
  • $I_{mpp} \approx 8.050$ A
  • $P_{max} \approx 4.057$ W

フィルファクター(FF)の計算

FF = \frac{V_{mpp} \times I_{mpp}}{V_{oc} \times I_{sc}} = \frac{0.504 \times 8.050}{0.618 \times 8.493} \approx \frac{4.057}{5.249} \approx 0.773

FF = 0.773 — 健全な結晶シリコンセルでは0.75〜0.82程度が一般的です。この値が0.8を切ると「少し抵抗が大きいかも?」と疑う目安になります。


シミュレーターで遊ぶ——実験3連発

それでは、実際にシミュレーターを開いて、パラメータを動かしてみましょう。

実験1:直列抵抗 Rs を変えてみる

  • 条件: G=1000, T=25, n=1.3, Rsh=500, Rsを0.1→1.0→5.0 Ω と変化

結果の見方:

  • Rs = 0.1 Ω: 曲線の肩がシャープ。FF ≈ 0.80
  • Rs = 1.0 Ω: 肩が明らかに「丸く」なる。FF ≈ 0.65
  • Rs = 5.0 Ω: もはや肩がなく、曲線がなだらかに下がる。FF ≈ 0.35

なぜ? 直列抵抗が大きいと、電流が流れるたびに $I \times R_s$ の電圧降下が発生します。これにより、ダイオードにかかる実効電圧が下がり、高電圧側で電流が取れなくなる——これが「肩がつぶれる」現象です。

現場での教訓: はんだ不良や電極の接触抵抗増加は、この形で現れます。Rsが1Ωを超えたら要注意。

実験2:並列抵抗 Rsh を変えてみる

  • 条件: G=1000, T=25, n=1.3, Rs=0.3, Rshを500→100→20 Ω と変化

結果の見方:

  • Rsh = 500 Ω: 低電圧側でほぼ水平。Isc ≈ 8.5 A
  • Rsh = 100 Ω: 低電圧側でわずかに傾き。Isc ≈ 8.3 A
  • Rsh = 20 Ω: 低電圧側の傾きが顕著。Isc ≈ 7.5 A

なぜ? 並列抵抗が小さいと、光電流の一部がリーク経路から逃げてしまいます。これが「腰が落ちる」状態。特に低電圧領域で影響が大きく、短絡電流が減少します。

現場での教訓: マイクロクラックや端面のリークは、この形で検出できます。Rshが100Ωを切ると不良の可能性大。

実験3:理想因子 n を変えてみる

  • 条件: G=1000, T=25, Rs=0.3, Rsh=500, nを1.0→1.5→2.0 と変化

結果の見方:

  • n = 1.0: 立ち上がりが急峻。Voc ≈ 0.65 V
  • n = 1.5: 立ち上がりが緩やかに。Voc ≈ 0.58 V
  • n = 2.0: さらに緩やか。Voc ≈ 0.52 V

なぜ? 理想因子nはダイオードの「非理想性」を表します。nが大きいほど、同じ電圧で流れる暗電流が増えるため、開放電圧Vocが低下します。また、曲線の立ち上がりが緩やかになるため、MPPの電圧も下がります。

現場での教訓: ペロブスカイト太陽電池など新しい材料ではnが2に近いことがあります。nの値から、再結合のメカニズム(拡張型かSRH型か)を推定できます。


現場でハマるポイント——適用限界と落とし穴

1. 「直列抵抗と並列抵抗は独立」という誤解

シミュレーターではRsとRshを独立に動かせますが、実際の不良セルでは両方が同時に悪化することが多いです。

例えば、マイクロクラックが入ると:

  • 電流経路が狭まる → Rs増加
  • クラック部分でリーク → Rsh低下

「Rsが増えたらRshも減っていないか?」 常にセットで確認するクセをつけましょう。

2. 開放電圧Vocの温度依存性を軽視しない

「Vocは温度で変わらない」と思っていませんか?

実際には、温度が1°C上がるごとにVocは約2〜3 mV低下します。

\frac{dV_{oc}}{dT} \approx -\frac{V_{oc} - n V_T \ln(G)}{T}

60°Cの環境では、25°C時よりVocが約0.1 Vも低下。システム設計でこれを考慮しないと、インバータの入力電圧不足を招きます。

3. シミュレーターのパラメータ範囲に対する過信

Rsを10Ω、Rshを10Ωなど極端な値に設定すると、変換効率が100%を超えることがあります。

これは、シングルダイオードモデルの適用限界を超えているからです。現実のセルでは:

  • Rs: 0.1〜1 Ω(健全なら0.1〜0.5 Ω)
  • Rsh: 100 Ω以上(健全なら500 Ω以上)
  • n: 1〜2(結晶Siで1〜1.5)

まずは「普通の範囲」で感覚を掴んでから、あえて不良状態を再現するのが上達のコツです。

4. シングルダイオードモデルの限界

このモデルは1つのダイオードでセル全体を近似しています。しかし、実際のセルでは:

  • 表面と裏面で再結合速度が異なる(2ダイオードモデルが必要なケース)
  • 部分影の影響を表現できない
  • 高注入効果(高照度下でのキャリア密度増加)を無視

あくまで「教育用・傾向把握用」 と割り切り、精密設計には専用ソフトを使いましょう。


まとめ——3つの要点

  1. I-V曲線の「形」がすべてを語る

    • 肩のつぶれ → Rs増加(電極不良・はんだ不良)
    • 腰の落ち → Rsh低下(マイクロクラック・リーク)
    • 立ち上がりの緩さ → n増大(再結合欠陥)
  2. 数値計算の核心はニュートン法

    • シングルダイオードモデルは陰関数
    • 指数関数のオーバーフロー対策が実装のポイント
    • 現実的なパラメータ範囲を守る(Rs: 0.1〜1 Ω, Rsh: 100 Ω以上)
  3. シミュレーターで「不良の指紋」を覚えろ

    • 異常なI-V曲線を見たら、Rs, Rsh, nのどれが原因か瞬時に判断できるようになる
    • それが現場でのトラブルシューティング力になる

さあ、あなたの手で確かめてみてください。

▶ 太陽電池セル特性シミュレーター — ブラウザで即動作、登録不要

スライダーを動かすたびに、I-V曲線がリアルタイムで変化します。「Rsを0.3から2.0にしたら、確かに肩がつぶれた!」——その体験が、教科書の知識を現場で使えるスキルに変えてくれます。

NovaSolverでは1,600以上の工学シミュレーターを無料公開中 👉 一覧はこちら

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?