1000円+で作る 100W 級 MPPT 充電器 (前編)

 モバイルルーターと若松ネットガイガー(J209×2 仕様)を車載して、駐車中も 24h 運用(1分おきに測定値を送信)していることは以前から何度か書いてました。
 バッテリー上がりが怖いので、そのシステム一式の電源には車のバッテリーを使わず、別に積んだサブバッテリーを使って運用していますが、そのサブバッテリーへの充電はルーフレールに載せた太陽光パネルで概ね賄っておりました。


 このシステムには、mbed を用いた自作の(記事にはしてなくて未公表の) MPPT 充電器 を使用してきましたが、MPPT 充電の制御ごときに 5000円 もする mbed を投入するのは異常だということに最近になって気がつきました(笑)


 MPPT の細かい原理は こっち を読んで頂くとして、要するに、太陽光発電っていうのは「ちょっと電気を使いすぎると電圧が大きく下がるヘタれ電源」なので、ちょうどいい加減の消費量を維持するのが最も効率がよいのですけど、その「ちょうどいい加減」を見つけるために、みんな「山登り法」とかを用いて消費量を実際に増減させてみて、電圧×電流の計算結果の最大地点を探すわけなんですが、デバッグがてら2年にわたり垂れ流し続けた microSD のログを見て分かったことは、

  • 山登り法で算出した最適点のパネル電圧は開放電圧の 75〜80%の範囲内がほとんどである
  • 75〜80%の範囲であれば、わずかにズレても効率の違いは誤差レベルで気にしなければ気にならない
  • 雲の動きや気温や大気の具合で最適条件は刻一刻と変わっているんだから割り切りが必要


 要はですね
徹底的に1番を追い求めるに越したことはないが苦労しても得られるものは少ない
 民主党政権の時代に某大臣さんが税金の無駄遣いを探している最中に「一番じゃなきゃダメなのか」と公言して問題になったことがありますが、あれ的に言えば「一番なんかどうでもいいです(キリッ」って感じか。


 私がルーフレールに載せてるパネルの仕様は

公称最大出力電圧 17.6V
公称最大出力電流 2.85A
公称開放電圧 21.8V
公称短絡電流 3.28A

というもの。(本音では、もう少し電圧が高いのを選ぶべきだった・・・)


 これは決められた照度条件で測定した結果の一例ですけど、この条件時で単純計算してみると 17.6V÷21.8V=80.7%
 発電時に作用する逆流防止ダイオードの電圧降下は無視できないので、考慮すると(17.6V-0.6V)÷21.8V=78.0%


 経験則で「最大点は開放電圧の75〜80%」かなと感じていたんですけど、なぁ〜んだ、パネルの仕様値のままじゃん!
 というわけで、常に開放電圧の77〜78%付近を狙う簡易型の MPPT 充電器とやらを作ってみようと思います。
 マイコン使った回路は巷に氾濫してると思うので、あえてマイコンレスで。(すべて秋月で揃う部品のみです)


http://dl.ftrans.etr.jp/?646dff1282154514b2e6fe8834baad4a2c2b1148.png
(クリックすると大きく見えます)

 
 今回の回路は緑線でブロック分けしてみました。
 順に解説していこうと思いますが、回路図を見ながら読まないと意味不明な文章が続くので、もうひとつブラウザを起動していただき、横に並べてご覧ください。


CDC



 負荷にバッテリーを加えて「充電量を多くするか少なくするか」で消費電力をコントロールし、最もパネルが効率よく発電するポイントを狙って発電させる、というのが MPPT なので、その細かい制御で無駄がないよう DCDC します。


 上の回路例では 7.5A大電力DCDCコンバータ制御IC NJM2811 を使ってみましたけど、電圧を外部から指定できて、NJM2811 で言うところの 5番 STBY ピンみたいな「動作一時停止」の機能があれば、どんな DCDC でも大丈夫です。


 インダクタや放熱板がセットになってて @300円 と格安な DC−DCコンバータ 12V8A HRD12008 も、ケースを外して少々改造が必要ではありますが、MPPT 充電器として、ばっちり使えます。
(HRD12008を使う場合の改造方法は 後編で書きました


 肝は先ほどの書いたとおり、NJM2811 で言うところの 5番 STBY ピンみたいな「動作一時停止」の機能。
 NJM2811 のデータシート に内部のブロック図が書いてありますが、エラーアンプの評価結果を外に出しているピンでして、GND に落とすと動作を停止してくれます。
 普段はオープンにしつつ、小刻みに GND に落としてやると電圧が下がるので、こいつを弄って後述の充電電流の制御やMPPT制御を行います。


 NJM2811 と HRD12008 は手持ち品を使ってテスト&成功してますが、似たような性格の 可変1〜15V8A DC−DCコンバータ制御IC SI−8010Y は持っていないので試せていません。
 5番 COMP という NJM2811 と同じ香りが漂ってるピンがあるので、たぶんこいつを使って使えると思いますが。



 DCDCの出力として指定する電圧は、バッテリーに対する最大充電電圧です。
 上の回路図のように、18kΩ+10kΩ の分圧中点から FB に戻すと、概ね 13.8V くらいの電圧に、10kΩ側に 91kΩ を並列でつなげてやると、概ね 14.8V くらいの電圧になります。


 太陽光パネルの充電に特化するときは、昼間に充電して夜間に放電するいうサイクルユースになると思うので、14.8V で設定したらいいのですが、AC アダプタなどで充電放置する場合だと昼夜 14.8V かけっぱなしはバッテリーの寿命を縮めるので 13.8V にしたほうがいいでしょう。


 適当なACアダプタをDCDCの入力につないで、無負荷時に希望する電圧が出力されているかテスターで確認しておきます。


 あと、回路図の DCDC の上に 1N4148 が出力→入力の方向で挿入してありますが、これがバッテリーからの逆流保護を兼ねてますので、くれぐれも省略しないようにして下さい。
ダイオードなら何でもいいです)



充電制御



 バッテリーへの充電電流がバッテリーの仕様値を超えないよう制御するための回路です。(リミッターです)
 少し前に秋月電子に新登場した ハイサイド電流センサ を使ってみました。
 10mΩのシャント抵抗 も秋月で揃います。


 LT6106 は IN- と IN+ との間に置いたシャント抵抗の両端のわずかな電圧差を数十倍に増幅してくれるものです。
 回路図の LT6106 周辺に 200Ω と 10kΩ が書いてありますが、この定数は 10kΩ÷200Ω=ゲイン50倍 という意味で、シャント抵抗の両端の電圧差を50倍に増幅して出力する、という風になります。


 たとえば 10mΩ のシャント抵抗に 5A が流れたとき、両端の電圧差は 5A×0.01Ω=0.05V となりますが、ゲイン50倍のとき、0.05V×50倍=2.5V が LT6106 から出力されます。


 シャント抵抗を通過する電流値を LT6106 を使って電圧値に変換し、コンパレータ NJM2303D の入力−側へ繋ぎます。
 コンパレータの入力+へは、0〜5V の範囲で希望する電圧を指定しますが、この電圧とはつまり、最大充電電流のこと。


 コンパレータへの入力電圧が、入力+<入力− になるとコンパレータの出力が GND になって DCDC の動作を停止させます。
 動作を停止させることで電圧降下が始まりますが、I=V÷R の 電圧V が低下していくにつれ 電流I も下がっていき、入力+>入力− になった時点で出力が GND からオープンに戻り、DCDCの動作が再開される、という案配です。
(上記の動作が非常に短時間の間に連続して起きて、「滑らか」な変化に見えます)


 先ほど「シャント抵抗に 5A が流れたとき〜」って例えを出しましたが、最大充電電流を 5A にしたいときは 2.5V を指定します。

希望する最大充電電流 コンパレータの入力+に印可する電圧
(可変抵抗を弄って下記電圧に調整する)
1A 0.5V
2A 1.0V
3A 1.5V
4A 2.0V
5A 2.5V
6A 3.0V
7A 3.5V
8A 4.0V

 バッテリーの容量が変わって最大充電電流も変わったとき、調整しやすいように可変抵抗にしましたが、変更する予定がなければ固定抵抗で分圧するようにして構いません。


 ちょっと余談になりますが、DCDC と 充電制御回路 で、一般的な充電器ができあがります。
 以前に作った セリアDCDCを改造したなんちゃって鉛蓄電池充電器 と違って今回のものは出力側の充電電流を監視しているので、MPPT 制御なしの単純な充電器としてもお使い頂けると思います。。


(簡易)MPPT制御



 「太陽光パネルの電気を使うにあたり、パネル電圧が開放電圧の75〜80%の範囲を維持するように心がけるのが効率がいい」という経験則を、そのまま回路に起こしたものです。


 まず左端 47kΩ+2.7kΩ+9.1kΩ で分圧している部分。
 47kΩ の説明はあとにするとして、2.7kΩ と 9.1kΩ のほうから。
 見た瞬間に分かる方もおられるかもしれませんけど、2.7kΩ の上(47kΩと2.7kΩの中点)を 100 としたとき、2.7kΩの下(2.7kΩ と 9.1kΩ の中点)は 9.1kΩ÷(2.7kΩ+9.1kΩ)×100=77.1 になります。


 この 77.1 のポイントからの線がリレーに向かって、このリレーは普段「断」の状態ですが、「接」になると 47μF のコンデンサに繋がります。
 コンデンサへ充電されることになりますが、この線は コンパレータ NJM2303D の入力−にも繋がっています。
 2.7kΩ の上(100の地点)は、そのままダイレクトにコンパレータ NJM2303D の入力+へ。


 リレーの話も後にして、「100の地点」と「77.1の地点」とをコンパレータで比較させていることになりますが、入力+<入力− になるとコンパレータの出力は GND に変化します。
 つまり、コンパレータの出力がGND になるのは 「100の地点」<「77.1の地点」 のとき。


 100<77.1 はありえないだろ!、と叱られてしまいますが、引き続き LMC662 付近をご覧下さい。
 左の LMC662 が 1MΩ+100μF の定数にて 1/400Hz(f=400秒) 程度の超長周期で振幅幅が電源電圧の 1/3(33.3%)〜2/3(66.6%) な疑似三角波を淡々と作ってます。


 右の LMC662 はその振幅幅のうち 1/3〜1/3+α(αは微少)の僅かな部分を切り取る役目を負ってます。
 100kΩ+51kΩ で得られる分圧比は 51kΩ÷(100kΩ+51kΩ)=33.8% ですので、抵抗の誤差を考えない計算上で、33.3%→33.8% の 0.5% 上昇(下降)する期間だけ、オペアンプの出力を ON にします。
 たった 0.5%×往復 分ですが、f=400秒 ほどの超長周期なので、実際の時間に換算すると(実測で)1秒前後です。
※カーボン被膜1MΩと電解コンデンサ100μFの組み合わせのとき、計算値と実測とはかなり乖離した周期になりますが。


 右側 LMC662 の出力下には、Nch な MOSFET とリレーとが並列でオペアンプの ON を待ち構えています。
 ところで、オペアンプ出力にある 200Ω は、コイル抵抗500Ωで10mA仕様の5Vリードリレー を 9V から使うにあたり、LED による VF も含めて一石三丁くらいを狙った結果でして、他のリレーに置き換えるときはオペアンプの出力が足りるかなども含めて再検討が必要です。


 オペアンプが ON になり MOSFET が「接」になると STBY ピンが GND に落ちるので、DCDC はその動作を中止し、太陽光パネルの電気を消費するのを止めます。
 ほぼ同時に(リレーの作動時間分だけ遅れて)、前述「77.1の地点」をコンデンサに繋ぎますので、コンデンサは「77.1の地点」の電圧まで充電されることになります。


 オペアンプの ON は1秒くらい続き、オペアンプが OFF になるとリレーはコンデンサを切り離し MOSFET は「断」になることで STBY をオープンにし、DCDC は動作を再開します。


 リレーによって「77.1の地点」から切り離されたコンデンサですが、そこへ蓄えられた電圧は太陽光パネルが開放中(DCDC が動作を停止していた間)の「77.1」です。
 コンデンサに蓄えられた電荷は微量ではありますが、次段のコンパレータ NJM2303D の入力にとっては十分な量であり、コンパレータから極めて僅かに漏れ出てくるバイアス電流のサポートとも相まって、次回の充電サイクルが訪れるまで「開放電圧の77.1」に近い電圧を維持します。


 f=400秒のうちの1秒を除いた区間では、コンパレータは「開放電圧の77.1」と「消費中の100」とを比較しながら、DCDC に停止/起動を指令することになるので、結果的にパネル電圧は「開放電圧の77.1」に収束することになります。


 ここで最も重要なのは、MOSFET とリレーともに「接」になってコンデンサに開放電圧を覚え込ませるための充電時間です。
 短すぎると充電しきれませんし、長すぎるとその間は発電しないので太陽光が無駄になります。


 上で実測1秒と書きましたが、いかんせん、f=400秒のうちから正確に1秒前後を切り出すのは、抵抗誤差の与える影響が大きすぎて机上計算どおりにいかないと思うので、上の回路のとおり発光ダイオードを挿入して、「コンデンサに開放電圧を覚え込ませている期間」を視認できるようにしました。
 実際に LED が点灯してる時間を実測して、あまりに短いと思ったら 51kΩに対して 500Ω〜1kΩ 程度を直列追加します。
(いったん設定したら再調整する機会はないとは思いますが財力があれば可変抵抗を直列追加でも構いません)


 「開放電圧の77.1」を 47μF のコンデンサに0から覚え込ませるのに1秒はあまりに短すぎますが、初回の1発目だけは10秒近くかけて「正確に覚え込ませる」仕様になってます。
 普段の「コンデンサに開放電圧を覚え込ませている期間」は疑似三角波が 33.3〜33.8 の期間だけなのですが、100μFのコンデンサが空っぽの通電直後の最初だけは、0〜33.8 の期間になり、実測すると10〜15秒ほどになります。


 「f=400秒から1秒を切り出す」も立派な PWM 制御なのですが、実のところ最初は、555 を使って超長周期の PWM を作ろうとしたんですね
 ON:OFF=1:399(この程度、という意味であって正確でなくても良い)というデューティ比を作ろうとしたんですが、555 ではデューティ比 50%以下は作れないことになっているので、反転させて使うことを前提にした ON:OFF=399:1 というデューティ比 99.75% を作ろうとしたんですよね。
 ブレッドボード上でこの試みは成功し、無事に400秒から1秒を切り出すことが出来たのですが、555 は ON から始まるみたいなんですよ。
 1秒OFF→399秒ON→1秒OFF・・・を期待してたのですが、399秒ON→1秒OFF→399秒ON・・・ということで、起動してから1周期待たないと「覚え込ませる」の番が来ないという。。


 なにか回避する方法があるのかもしれませんが、オペアンプ三角波を作れば切り取る範囲を自由に選べるし、結果的な副産物として「初回だけ10秒ちょっとかけて・・・」も実現することが出来ました。



 疑似三角波の長周期を 1MΩ と共に作り出している 100μF のコンデンサ電荷を抜いてやると初回に戻れるので、強制的に電荷を抜くリセットボタンも搭載してみました。
 400秒おきに開放電圧の再測定をしますが、リセットボタンを押すことで、今すぐ再測定、してくれます。


 最後に「47kΩ の説明はあとにするとして」の件ですが、「100の地点」をコンパレータに突っ込むにあたり、コンパレータの電源電圧以下にするため、テキトーに挿入した抵抗です。
 上記の回路定数のとき、「100の地点」は本当のパネル電圧の 1/5 くらいになるので、仮にパネル電圧が 40V のときでも 40V×0.2=8V となり、コンパレータの電源(9V)以下になるので、コンパレータが壊れずに済む、という風になります。
 これだけの目的ですので、100kΩとかでも構いません。


 私とは違うパネルを使ってて、逆流防止のダイオードも加味した公称仕様値で試算してみて、「開放電圧の77.1%ではなく80%くらいのほうが効率が良さそうだ」って判断でしたら、ここら辺の抵抗の分圧比を弄って下さい。
 そのときは、47kΩの目的も理解していただき、オペアンプの電源電圧を超えない抵抗を選択しましょう。


 後編に続く予定


(追記)2014/09/02
 1ヶ月ほど運用した結果を踏まえて、上の回路図と文章を一部差し替えさせて頂きました。

変更箇所

  • オペアンプ類の電源をバッテリー直でなく 7809 経由とした
  • LMC662 の出力電圧が 9V になったことで LED の下の抵抗を 510Ω→200Ω
  • 充電制御の電流指定に用いる基準電源を 9V から分圧

 変更前の回路図は こちら です。


(追記)2014/09/08
 インダクタや放熱板がセットになってて @300円 と格安な DC−DCコンバータ 12V8A HRD12008 を使った作例を後編として書きました。
 こちらからどうぞ


(追記)2015/03/31
 24Vバッテリーを対象にした昇圧版の簡易 MPPT 充電器を作りました。
 動作原理は本稿と同じため割愛してます。
 回路図くらいしか上げてませんが、参考にどうぞ。
昇圧型 (簡易) MPPT 充電器