太陽電池の計算シミュレーションと実験データの比較

このQ&Aのポイント
  • 太陽電池の式を使用して計算シミュレーションした結果と実験データを比較する方法について教えてください。
  • 太陽電池のI-V特性のグラフを出力する機器を使用して、実験データをグラフ化しました。
  • 直列抵抗成分(Rs)、並列抵抗成分(Rsh)、光電流(Iph)、逆方向飽和電流(Is)、ダイオード因子(n or nVt)の計算方法と具体的な値について教えてください。
回答を見る
  • ベストアンサー

太陽電池を式を使用して計算シミュレーションしたものと、実験したデータと

太陽電池を式を使用して計算シミュレーションしたものと、実験したデータとを比較しようと考えています。 前に質問させていただいたときに各パラメータの求め方を教えていただいたのですが、頭ではなんとなくわかるんですが、実際やろうとするとよくわかりませんでした。 太陽電池のI-V特性のグラフを出力する機器を使用してグラフ化したものが、添付した画像です。 直列抵抗成分:Rs 並列抵抗成分:Rsh 光電流:Iph 逆方向飽和電流:Is ダイオード因子?:n or nVt がどのように計算して(実際の値や式など)、それぞれがどういう値になるのかを教えていただきたいです。 初歩的な質問、そして前に回答をいただいたのに申し訳ありません。 よろしくお願いします。

この投稿のマルチメディアは削除されているためご覧いただけません。

質問者が選んだベストアンサー

  • ベストアンサー
  • inara1
  • ベストアンサー率78% (652/834)
回答No.8

ソルバーの実行前後の結果を添付します。 実は、ここで使った実測データというのは、以下のパラメータで理論式から作ったものです。    Iph = 0.15 A    Rsh = 100 Ω    Rs = 0.1 Ω    Is = 3000 pA    NVt = 26 mV 最小2乗による近似結果は、Rsh を除けば、真の値に近い値が得られています。Rsh が大きいときは、最小2乗による近似を行っても、精度の高い値が得られないことに注意してください。

qwe1232
質問者

お礼

本当に分かりやすく書いていただきどうもありがとうございました。 自分のようなものでもきれいなVIカーブを描き出すことができました。 しかし求めた結果より少しおかしいかなと思う点がありました。 少しまた分からないので、お暇であればできればそちらのほうも見ていただければと思います。 http://okwave.jp/qa/q5970407.html 図々しく質問してもうしわけありません。 本当にありがとうございます。助かりました。

その他の回答 (7)

  • inara
  • ベストアンサー率72% (293/404)
回答No.7

ANo.4のコードですが、1箇所、改行が抜けていました。6行目の Dim eps As Single, a As Single, x As Single, x0 As Single, x1 As Single eps = 1 / 10 ^ 6 ' --- 相対計算精度 は Dim eps As Single, a As Single, x As Single, x0 As Single, x1 As Single と eps = 1 / 10 ^ 6 ' --- 相対計算精度 の2行に分けてください。

  • inara
  • ベストアンサー率72% (293/404)
回答No.6

ANo.2の添付図の下半分を拡大したものを添付します。

  • inara
  • ベストアンサー率72% (293/404)
回答No.5

ANo.2のワークシート見にくいので拡大したのを添付します。

  • inara
  • ベストアンサー率72% (293/404)
回答No.4

ANo.3のマクロコードの改行記号が抜けていました。以下が正しいコードです。 Function I(Iph, Rsh, Rs, I0, nVt, V) If Iph < 0 Or Rsh < 0 Or Rs < 0 Or I0 < 0 Or nVt < 0 Or V < 0 Then I = "" Exit Function End If Dim eps As Single, a As Single, x As Single, x0 As Single, x1 As Single eps = 1 / 10 ^ 6 ' --- 相対計算精度 x0 = -2 * Iph x1 = Iph ' --- I の値を x0 から x1 の範囲で探す I0 = I0 / 10 ^ 12 ' --- pA → A nVt = nVt / 1000 ' --- mV → V While Abs((x0 - x1) / (x0 + x1)) > eps x = (x0 + x1) / 2 a = (V + x * Rs) / nVt If a > 700 Then a = 700 ' --- exp 計算のオーバフロー防止 If Iph - (V + x * Rs) / Rsh - x - I0 * (Exp(a) - 1) > 0 Then x0 = x Else x1 = x End If Wend I = x End Function

  • inara1
  • ベストアンサー率78% (652/834)
回答No.3

ANo.2の続きです。 【理論式から計算されるデータを生成する方法】 (1) ワークシート上で Alt キー押しながら F8 (ファンクションキー)を押し、マクロ名のところに a を半角で記入し、「作成」をクリック (2) 出てきた画面上の Sub a() と End Sub を消して以下のコードを貼り付ける(以下の文をコピーしペーストすればいい) Function I(Iph, Rsh, Rs, I0, nVt, V) If Iph < 0 Or Rsh < 0 Or Rs < 0 Or I0 < 0 Or nVt < 0 Or V < 0 Then I = "" Exit Function End If Dim eps As Single, a As Single, x As Single, x0 As Single, x1 As Single eps = 1 / 10 ^ 6 ' --- 相対計算精度 x0 = -2 * Iph x1 = Iph ' --- I の値を x0 から x1 の範囲で探す I0 = I0 / 10 ^ 12 ' --- pA → A nVt = nVt / 1000 ' --- mV → V While Abs((x0 - x1) / (x0 + x1)) > eps x = (x0 + x1) / 2 a = (V + x * Rs) / nVt If a > 700 Then a = 700 ' --- exp 計算のオーバフロー防止 If Iph - (V + x * Rs) / Rsh - x - I0 * (Exp(a) - 1) > 0 Then x0 = x Else x1 = x End If Wend I = x End Function (3) 貼り付けたら、 Alt キー押しながら Q を押すか、ウィンドウの×ボタンで編集画面を終了させる (4) ワークシートに戻って、添付図の E11 のセルに=I($E$3,$E$4,$E$5,$E$6,$E$7,D11)と記入し(この式をコピー&ペースト)、Enter を押すと計算値がそのセルに表示されます。$E$3,$E$4,$E$5,$E$6,$E$7 はパラメータのあるセル位置で、D11 は電圧値のあるセル位置です。 (5)  E11 のセルをコピーして、E12 以下の、データのある行を全て選んでペーストします。これで、D列の電圧に対する計算値の表が作れます。 【セキュリティレベルの変更】 マクロを含むExcelファイルを開くとき、セキュリティレベルによってはマクロが実行できない場合があります。その場合、以下の手順でセキュリティレベルを変更してください。 新規にワークシートを作成して、左上隅の丸(Officeボタン)をクリック→下端の「Excelのオプション」を選択→左側の「セキュリティーセンター」を選択→右下の「セキュリティーセンターの設定」をクリック→左側の「マクロの設定」をクリック→「すべてのマクロを有効にする」を選択 → OK → OK → Excelの終了(保存しない)→ マクロを含むExcelファイルを開く

  • inara1
  • ベストアンサー率78% (652/834)
回答No.2

ANo.1です。Excelのソルバーを使った最小2乗近似の方法を紹介します。 以下は Excel 2007 での手順です(Excel97-2003でも可能ですが(7)の手順だけが異なります)。 【準備】 (1) 実測データを添付図のようにワークシートに貼り付ける(添付図ではB列とC列が実測データ) (2) E3 から E7 のセルにパラメータの概略値を記入する(最後にこのパラメータを動かして実測値に近づけます)。この値の単位は D3 から D7 のセルの()に書かれているものにしてください。 (3) 実測データの右側に理論式から計算されるデータを生成する(この方法は後ろの【理論式から計算されるデータを生成する方法】に載せます)。添付図のD列はA列をそのままコピーしたもので、E列が電流の理論値です。理論値は E3 から E7 のセルの数値(青字)とD列の電圧値から計算します。 (3) 実測特性と理論特性のグラフを描く。添付図では青丸が実測値、ピンク色が理論特性です。 (4) まず、E3 から E7 のセルのパラメータの値を手動で変えて、実測特性とだいたい同じになるようにします(添付図のような近さで十分です)。光電流 Iph は短絡電流にほぼ等しいので、短絡電流の値を初期値とします。シャント抵抗は最初は 1000Ω 程度でいいです。Rs と飽和電流 Is と熱電圧 nVt (n*Vtの意味) を変えると特性が結構敏感に変わるので、これはグラフを見ながら実測特性に近くなるような数値にします(添付図の特性はqwe1232さんの質問にある発電特性を参考にしているので、だいたいこのような値でいいはずです)。なお、パラメータの単位が V や A に統一されていませんが、これは統一すると、Is などが非常に小さい数値になって、Excel のソルバーでうまく近似計算できなくなるからです。 (5) F列に実測値と理論値の電流の差の2乗の値を記入します。添付図の例では、F11 のセルに=(E11-C11)^2 と書いて、そのセルをコピーして、下の行にコピーします。 (6) F列の最後の行の下に、電流の差の2乗の総和を書きます。添付図の例では=SUM(F11:F25) と書けば計算されます。 【最小2乗近似】 (7) ソルバーアドインが有効になっていれば、ワークシートのメニューの「データ」をクリックすると、右上に「ソルバー」と出ていますので、これをクリックします。すると、添付図左下のようなウィンドウが現れるので、「目的セル」の右側の欄を(6)のセル位置とします。 (8) 「目的セル」の下にある「目標値」の右側の「最小」を選択します。 (9) 「目標値」の下の「変化させるセル」の右側の欄を、パラメータの数値のあるセル範囲(添付図の例では $E$3:$E$7)とします。(7)~(9)の設定によって、誤差の2乗が最小となるようにパラメータを振る(最小2乗近似)という動作をさせることになります。 (10) 右側の「オプション」をクリックして、その内容を添付図右下のような変更します。   制限時間 100   反復回数 1000   精度~収束 0.000000000001   「単位の自動設定」と「非負数を仮定する」にチェックを入れる   近似方法は「2次式」、微分係数は「中央」、探索方法は「共役傾斜法」にチェックを入れる (11) 変更したら OK → 右上の「実行」をクリックすると最小2乗近似が始まります。しばらく待つと、「解が見つかりました・・・」と出ます。このとき、ワークシート上のパラメータの値とグラフの近似曲線も変わっていますが、うまく近似されているのなら、OK をクリックします。もし、パラメータの値がムチャクチャになっていたり、近似度が足りないの場合は、近似に失敗しています。その場合は、「元の値に戻す」をチェックして OK とします(そうすれば、近似前のパラメータの値に戻ります)。データによってはうまく近似できないときもあるので、最小2乗近似前のパラメータの値を別の値に変えるなどしてください。添付図の例ではうまく近似でき、以下のようになりました。   Iph (A)   0.148・・   Rsh (Ω)  1058.2・・   Rs (Ω)   0.107・・   Is (pA)  3482.9・・   nVt (mV) 26.2・・ 文字数の制限のために、この続きは次の回答に書きます。

  • inara
  • ベストアンサー率72% (293/404)
回答No.1

前の質問(http://okwave.jp/qa/q5925855.html)で回答した者です。 実験データからパラメータを求めるには、回答No.2の添付図の式(1) と実験データを最小2乗法でカーブフィットするのが良いと思います。実験データの縦軸(電流)の単位は何ですか(A または A/cm^2)。横軸(電圧)の数字が重なってよく分かりませんが、開放電圧は 0.412V くらいでしょうか。それが分かれば最小2乗法の具体的な方法をお知らせします。Excelでできますが、ソルバーは使えますか。Excel 2007 なら、以下の手順でソルバーが使えるようにしてください。   (1) ワークシートを開いたときの左上隅の丸記号(Office ボタン)をクリック   (2) 下端の「Excelのオプション」をクリック   (3) 左側の「アドイン」をクリック   (4) 一番下の「設定」をクリック   (5) 「ソルバーアドイン」にチェックを入れて OK をクリック その後、(1)から(3)までやってみると、「アクティブなアプリケーションアドイン」に「ソルバーアドイン」と出ています。この状態になっていればソルバーが使えます。実験データの個々の数値の組が分かればこちらで試して見ますが。

関連するQ&A

  • 太陽電池のモデル実験をしたいと思っています。

    太陽電池のモデル実験をしたいと思っています。 I = Iph - Is {exp(v/n*Vt)-1} - v/Rsh Iph;光電流、Is;逆方向飽和電流、n;ダイオード因子、Vt;kT/q(k;ボルツマン定数、q;電荷素量、T;絶対温度)、Rsh;シャント抵抗 という方程式を用いて、計算シミュレーションすることで、実験値と比較したいと考えています。 質問は以下です。 方程式を使用して、実際の太陽電池のIV特性を調べるために、その太陽電池の各パラメータが必要になりますが、その測定法がわかりません。 (1)光電流;Iphは太陽電池の端子に電流系を直列に接続し、測定する。で大丈夫でしょうか。 (2)逆方向飽和電流;Ishの測定方法は何もわからないので、どのように測定すれば良いか教えてください。 簡単な質問を。と思うかもしれませんが、インターネット等で調べたつもりですが分かりませんでしたので、初心者ということでよろしくお願いします。

  • 理想ダイオード因子について

    太陽電池の等価回路は左図のようになる。最も単純なモデルでは抵抗成分を無視して、電流源Iph と(理想ダイオードではない)ダイオードのみで表される。抵抗成分を無視した太陽電池の暗電流は、Io を逆方向飽和電流、qを電気素量、Vを電圧、nを理想ダイオード因子、kをボルツマン定数、Tを温度として・・・・・ という文が太陽電池について調べていたら出てきました。 理想ダイオード因子っていったい何ですか? また物理的な意味とかってあります?

  • 太陽電池 温度特性

    太陽電池の温度特性を計算によって求めたいと思っています。 太陽電池は理論通りだと、温度が上昇すると最大電力は下がっていくはずです。 実際に実験を行うと、温度に比例して最大電力は小さくなっていました。 そして、これを計算によって求めようと思い、下の式にパラメータの値を代入して、 プログラムを組んで最大電力を求めてみました。 その結果、最大電力は温度が上昇するにつれ、上がってしまうというおかしい結果になりました。 実験結果と、シミュレーション結果を比較したいので、理論どおりに行かないシミュレーションでは、 問題があります。 そこで、どのようにすれば、シミュレーションが理論どおりの値を示してくれるでしょうか? 一応使用したプログラムも貼り付けておきます。 よろしくお願いします。 以下、使用した式です。 I = Iph - Is * [ exp { ( V + Rs * I ) / n * Vt } - 1 ] - ( V + Rs * I ) / Rsh Iph;光電流、Is;逆方向飽和電流、n;ダイオード因子、k;ボルツマン定数、q;電荷素量、T;絶対温度、Rsh;シャント抵抗、Rs;直列抵抗 上のパラメータは全て値は決定しているとします。(IとVが変数です) 以下プログラムです。 #include <stdio.h> #include <stdlib.h> #include <math.h> #define eps 1.0e-6 //収束条件 double Iph=0.25; //[A] double Rsh=45; //[Ω] double Rs=0.3; //[Ω] double Is=100e-12; //[A] double nVt=0; //[V] double V=0,vx=0; //[V] double a=0; double f(double x); void nibun(void); int main() { nibun(); return 0; } void nibun(void) { int count; double x0,x1,m; double p,pmax,i; double t; double q=1.60217733e-19; //電荷素量 double k=1.3806504e-23; //ボルツマン定数 double n=1.97; //ダイオード因子 printf("温度?\n"); scanf("%lf",&t); nVt = n * ( (k/q) * (t + 273.15)); for(V=0;m>0;V+=0.0001){ count=0; x0=-2*Iph; x1=Iph; do { count++; m=(x0+x1)/2.0; if(f(m)*f(x0)<0) x1=m; else x0=m; //700回ループで未収束→終了 if(count==700) { printf("Error\n"); exit(1); } } while (!(fabs(x0-x1)<eps)); //収束後ループ終了 p=V*m; if(p>0){ if(pmax<p){ pmax=p; i=m; vx=V; } } } printf("最大電力点 : V=%lf I=%lf P=%lf",vx,i,pmax); } double f(double x) { return(Iph - Is*(exp(((V+x*Rs)/nVt)-1)) - (V+x*Rs)/Rsh - x); }

  • 実験での太陽電池の課題である宿題で困っています。

    太陽電池モジュールで測定したものですが、分からないことがあっていろいろ困っています。後、来週まで(10月31日)なんで即、回答がほしいです。来週出来なければ即減点なります。どうかお助け下さい。 電圧,電流,電力で測定した表です。 電圧 V    電力 W    電流 mA 17.95     32.31       1.8 17.92     35.84        2 17.88     40.23       2.25 17.86    46.0788        2.58 17.83    53.3117       2.99 17.79    63.8661       3.59 17.75    79.3425       4.47 17.7    106.023       5.99 17.61    156.5529        8.89 17.35    252.269       14.54 17.09    383.1578        22.42 16.69    544.4278        32.62 16.46    583.0132        35.42 15.94    691.796       43.4 15.24    745.236       48.9 14.47    717.712       49.6 13.95    694.71       49.8 13.24    664.648       50.2 12.37    622.211       50.3 11.47    578.088       50.4 10.78    544.39       50.5 9.47     482.97       51 8.57    441.355       51.5 7.4     385.54       52.1 6.61    347.686       52.6 5.49    291.519       53.1 4.45    237.63       53.4 3.483    187.0371        53.7 2.462    133.9328        54.4 1.473    81.1623       55.1 0.607    33.5671       55.3 0.1117    6.18818       55.4 以上がこの結果であります。早速質問でありますが、先生が「RsとRshを出して理論値を求めよ」と宿題に出されました。そのRs(直列抵抗値)とRsh(並列抵抗値)の求め方や太陽電池での理論値の求め方が全然わかりません。ヒントの紙(もしくはパソコンでhttp://www.ni.com/white-paper/7230/ja)を見ていてもなかなか手掛りが見つかりません。 先生や先輩のヒント言っても全然分からないので、その為にこの質問を投稿しようと思いました。 初めての投稿ですが、どうかこの質問に分かりやすい回答があれば幸いであります。 後、正直私も言語力や文章力(日本語)が全然ダメであるので、詳しい回答を来週の月曜までどうかよろしくお願いします。 不足があったらまた投稿します。

  • 太陽電池で

    太陽電池で発生する電流は、通常のダイオードの順方向電流と逆向きに流れる。その理由はなんですか? 詳しく教えてもらえたら嬉しいです。

  • 太陽電池の電圧

    太陽電池から出る電流から太陽電池の出力電圧はどのように出したらいいでしょうか? 太陽電池の内部抵抗がわからないと電圧は出せないのでしょうか?

  • 太陽電池と最大電力

    太陽電池と抵抗を繋ぎます。 光の照射が弱くなればなるほど、抵抗の最大電力のピークが抵抗の大きい値になるのは何故でしょうか?(太陽電池には内部抵抗があるとします) 数式を出して説明してくれればもっと助かります。 学校の実験の問題なんですが、本文をそのまま載せると 『光入力がへると光電力のピーク値を示す抵抗値が大きいほうにシフトすることを確認しなさい。太陽電池をテブナンの定理より理想電源と内部抵抗(もしくは理想電流源と並列抵抗)と考え、なぜこうなるかを考察しなさい。太陽電池から最大電力を取り出すための条件は?』

  • 太陽電池について

    太陽電池の電圧-電流特性がわかりません。与えてあるのは絶対温度、短絡電流密度、逆飽和電流密度が既値です。これに詳しいHPのアドレスでもかまいませんので、教えてください。

  • 卓上電卓の不要な太陽電池による充電方法

    捨てられた電卓の太陽電池を利用して、単3ニッケル水素電池1.2Vを充電できないかと考えています。 用意した太陽電池は、1.5V、5mAのものと、2.5V、20mAのものです。 ショットキーダイオードと抵抗で作ろうとしていましたが、太陽電池自体の電流値が充電しようとしている充電池の電流値2000mAh(?)に対し非常に小さい気がします。 これでは太陽電池2個を直列でつないで4Vとしたとしても、充電できないのではないでしょうか?? 何か良い方法はあるのでしょうか? また、充電池に書いてある「2000mAh」の意味はなんでしょうか? またまた、間に入れている抵抗の値は、どのように決めればよいのでしょうか? なんとか、もったいなく捨てられるものを利用したいと、素人ながらにやろうとしています。 アドバイスをお願いします!

  • 太陽電池の出力特性

    大学の実験で太陽電池の出力特性を求める実験を行いました。 実験方法は ・太陽電池に可変抵抗を接続する ・抵抗値を変化させて電圧と電流を測定する というものでした。抵抗を変化させることで電流が変化するのはわかるのですが、何故電圧も変化するのかがわかりません。 どなたかこの疑問に答えていただけませんでしょうか。よろしくお願いします。