MPPT 充放電コントローラーの製作 (2007/11/7〜11/18)

(Last update:09/03/31)


まずはスイッチング部の特性をチェック。
ファンクションジェネレーターとオシロが
あって良かった・・・
ブレッドボードで全体動作確認。
基板表面
今回は大き目の基板で
余裕のある実装に
基板裏面
スイッチング FET と SBD、PIC の
チップなパスコンは裏面に実装
動作検証の様子
12V 鉛電池 直結時
12V 鉛電池 コントローラー経由時
6V 鉛電池 直結時
6V 鉛電池 コントローラー経由時
NiMH 2セル 直結時
NiMH 2セル コントローラー経由時
回路図

製作までの経緯(きっかけ)

 2007/7 から PIC を使い始め、2ヶ月ほど前には PIC 制御の充放電コントローラーを製作する等、PIC プログラミングにもだいぶ慣れてきたので、いよいよ PWM/MPPT (Maximum Power Point Tracker) 制御に挑戦することに。


プログラミングのポイント

 MPPT のポイントは、どうやって最大出力点(MPP)を追いかけるか、という点。世の中的にはいくつか追従方法があるようだが、ここは下記文献 6 を参考に、実装が容易な電圧追従法を採用することにした。すなわち、結晶系太陽電池の場合、開放時電圧の 80% を MPP とし、この電圧になるべく近づけるよう、一定時間、太陽電池電圧測定〜 PWM 制御(デューティー比増減)を行う。


回路設計


 まずは PWM 周波数を決めるわけだが、文献 6 等を見るとだいたい 16KHz 〜 32KHz としている。手持ちの FET で降圧コンバーター回路を組んでオシロで波形を観察したところ、10KHz・デューティー比 95% ぐらいで FET のターンオフが間に合わなくなるようだったので、とりあえず確実な 2KHz で設計することに。(スイッチング部だけなら 20KHz でも余裕なのだが・・・ 回路設計はなかなかに難しい・・・)

 PIC クロックは、あまり高すぎても無駄に電気を食うので、1MHz 〜 2MHz 程度を目指すが、後述のとおりデューティー比の分解能にも影響するので実験しながら決定する方向で。

 使用ポートは、

・太陽電池電圧検出にアナログポート (AN0)
・鉛電池電圧検出にアナログポート(AN1)
・PWM 出力にデジタルポート (CCP1)
・夜間検出用にデジタルポート (GP3)
・負荷接続コントロール用デジタルポート(GP4)
・過放電検出時の警告表示にデジタルポート(GP5)

 回路は省電力のため、

 (1) 3端子レギュレーターは自己消費 10μA の CMOS 品を使用
 (2) 負荷接続制御にはパワー MOS FET を使う。
 (3) 夜間検出を行い、夜間は PWM を停止してクロックを 31KHz までダウン
 (4) コントローラーの電源を切っていても通常の充電は可能(緊急充電用)

とした。ここで若干注意を要するのは (4) で、通常ならデューティー比を上げる=太陽電池電圧が下がる、であるところ、この回路では逆にデューティー比を上げる=太陽電池電圧が上がる、となるので、プログラムで間違わないようにしなければならない。

 なお、太陽電池は開放時 24V のものが格安で手に入ったので、これを基本に回路を設計(例えば、AN0 ポートには PIC の電源電圧 5V を超えないよう、太陽電池電圧を 1/6 に分圧する、等)。また、降圧チョッパ部/PWM制御部以外は、以前製作した充放電コントローラーからハード/ソフトをほぼそのまま流用した。

 また充電池は、12V の鉛電池を念頭に回路を設計。(ただし5.6V 以上なら充電は可能。過放電はプログラム中の定数変更が必要)。


夜間時の省電力


 夜間は PWM 制御が必要ないので、「夜間」を検出したら省電力処理を行う。

 この夜間検出は、状態変化割り込みがかけられるように専用の回路とポートを利用することにした。こうしておけば、例えば暗くなったらスリープさせて省電力で待機させ、明るくなったら自動復帰させる、といったことも可能になる。充電コントロールのみに特化した場合は有効な省電力方法になるであろう。

 ただし、今回は過放電コントローラーも兼ねているので、スリープは不可。夜間だろうが充電池電圧を監視して過放電処理を行わなければならないからである。そこで夜間はクロックダウンで省電力を図ることとした(したがって状態変化割り込みは使用しないので、夜間検出回路を省略し、A/D 変換で夜間判定をしても良い)。


回路について補足

(1) FET1 について

 基本的にアナログポート(AN0)には太陽電池の 1/6 の電圧がかかる。今回は PIC 部に電源スイッチを儲けたので、PIC 部の電源を切った場合に AN0/GP3ポートを保護するため FET1 でスイッチを構成することに。実は保護のためだけならば、PIC の内部にも保護ダイオードが入っているため FET は不要。しかしこの PIC 内部の保護ダイオードが曲者で、PIC の VDD に接続されているため、ポートから入り込んだ電流で PIC が動作してしまう可能性が有る。低消費電力がウリの PIC ならではの現象だが、不安定に動作されても困るので回避策として FET スイッチを実装してある。


1st TRY (2007/11/15、晴天)

 ある程度ブレッドボードで動作を確認した後、ユニバーサル基板上に試作して、秋の昼下がりに動作実験をしてみた。条件は以下の通り。

 (1) 公称最大出力 12V / 150mA の太陽電池を使用(=約 1.8W)
 (2) 6V の鉛電池に充電
 (3) PWM 周波数 2KHz
 (4) 陽が傾いているため太陽電池出力は低め

 この条件で測定してみたところ、

電池直結時
(*)
MPPT
太陽電池電圧 (V) 7 12
充電電流 (mA) 25 75

(*) 正確に言うと本コントローラー の電源 OFF 時で、SBD、FET、コイルを介して充電している。


単純に考えて充電効率は直結時の 3倍。基本的には大成功と言えよう (^^)v

 ただ PWM 周波数 2KHz が思いっきり可聴域のため、スイッチング音が「キリキリ」と鳴いて(汗)案外うるさい。実際に充電する際は屋外放置なので実害はないのだが、電流計の針を見てみると案外フラついているし(=充電電流量がかなり変動 = スイッチング周波数が足りない)こともあって、もう少し PWM 周波数を上げてみることにした。(ここまでで夕方となり、追加実験は後日に持越し・・・)


2nd TRY (2007/11/18、快晴)

 ネットや市販の書籍とにらめっこしながら 10〜20KHz の PWM 周波数設定方法を再検討し(詳細は下記テクニカルメモ参照)、2度目のチャレンジ。

測定条件は、

(1) 本命の太陽電池パネル(開放電圧 24V、公称最大出力 18.5V / 275mA )を使用 (=約 5W)
(2) NiMH 2セル(=2.4V)、6V 鉛電池, 12V鉛電池に充電
(3) PIC クロック 8MHz、PWM 周波数 10KHz に引き上げ

 カタログスペック上、このパネルの MPP 電圧は開放時電圧の 77% ということになるが、PIC では細かい小数点計算が面倒なので 80% のままで実験することに。

 PWM 周波数は人間の可聴域上限が 20KHz 程度なので、それ以上にするのが理想的なのだが、前述の通り 10KHz、デューティ比 95% 程度で FET のターンオフが間に合わなくなるようなので、多少デューティー比上限を抑え、回路定数を再検討し、15KHz までPWM 周波数を上げて測定することにした。

 動作を検証してみると、スイッチング音はほとんど気にならなくなり、充電電流の変動も安定。快晴のため太陽電池の出力も十分で、実際の測定結果は、

充電効率
太陽電池電圧
(V)
充電電流
(mA)
充電対象 直結 MPPT 直結 MPPT 充電効率
(倍)
12V 鉛電池 13.41 18.18 260 300 1.15
6V 鉛電池 8.83 18.37 260 400 1.53
単4 NiMH x 2 セル (2.4V) 3.38 17.20 260 960 3.69


となった。特に NiMH 電池では電圧差が大きいことから降圧コンバータにより劇的な効果が得られることがよくわかる。

 ところで、MPPT の真の力は「太陽電池の出力をどれだけ最大まで搾り出せたか」であるから、正確には充電電流ではなく、太陽電池からの出力電流を測らねばならない。そこで実際に測ってみた。

発電効率
直結時 MPPT
太陽電池
電圧 (V)
太陽電池
出力電流 (mA)
出力
(W)
太陽電池
電圧 (V)
太陽電池
出力電流 (mA)
出力
(W)
発電効率
(倍)
対公称
最大出力比
(%)
12V 鉛電池 13.75 250 3.40 18.2 240 4.37 1.28 86
6V 鉛電池 8.90 260 2.31 18.0 240 4.32 1.87 87


 最終的な効率は公称最大出力の 86% 前後であるから、MPPT のおかげでだいぶ効率よく電気を搾り出していることが確認できた (^^)v。発電効率は、そもそも降圧コンバーター自体で若干のロスが出ることからハナから 100% は無理であるし、文献 6 の製作例等と比較しても同等の性能は出ていると思われる。

 なお、消費電流は充電時 2.7mA 程度で、実質的には太陽電池から電源が供給されるため神経質になる必要は無かろう。一方、夜間のクロックダウン時は 1.6mA 程度。この程度であればよほど無充電状態で放置しない限り電源スイッチは不要かもしれない。


今回の勉強の成果

 ・PIC12F683 の使い方全般
 ・PWM 制御
 ・MPPT 制御(電圧追従法)
 ・トランジスタと FET の高速スイッチング方法
 ・降圧コンバーターの原理と設計方法


PWM 設定・テクニカルメモ

 (1) まずはタイマ2プリスケール値を選ぶ。

 基本:タイマ2プリスケール値は 1, 4, 16 があり、大きくすると PWM 周波数が下がる。

 プリスケール値は、下記の計算式を元に、基本的には希望 PWM 周波数がより下限値に近いものを選ぶ。何故ならば、次の PE2 レジスタ設定値がなるべく大きい方がデューティー比分解能が上がるためである(=きめ細かい制御が可能)。言い換えれば、デューティー比を設定するレジスタ CCPR1L レジスタ値 > PE2 レジスタ値でデューティー比が100%になるため、実質 PE2 レジスタの値がそのままデューティー比分解能を決定することになる。

プリスケール値 下限 PWM 周波数
(=PE2レジスタ値最大)
上限 PWM 周波数
(=PE2レジスタ値最小)
8MHz時
下限 PWM 周波数
8MHz時
上限 PWM 周波数
1 PICクロック / 1024 PICクロック / 4 すなわち→ 約7812Hz 2000KHz
4 PICクロック / 4096 PICクロック / 16 約1952Hz 500KHz
16 PICクロック / 16384 PICクロック / 64 約488Hz 125KHz

 例えば PIC クロック 8MHz で PWM 10KHz なら下限値が 7.8KHz となるプリスケール1が最も妥当となる。

 (2) PWM の PE2 レジスタ値を決定する。計算式は、

  PE2 レジスタ設定値 = ( PICクロック周波数 / (希望 PWM 周波数 x 4 x プリスケール値)) - 1

 PIC クロック 8MHz、PWM 10KHz、プリスケール値 1 なら (8x10^6/(10x10^3x4x1)) - 1 だから、PE2 = 199

 この値があまりに小さいようならプリスケール値を小さくするか PIC クロックを上げることを検討してみる。PIC クロックが倍ならテューティー比分解能も倍になる。


今回の感想

 ・PWM はとにかくレジスタの設定がわかりづらい!
 ・オシロとファンクションジェネレーターがあって良かった・・・・というか必須だった。特にオシロが無いと手も足も出なかったと思う。
 ・結晶系の太陽電池でそこそこの出力を得るには太陽光に当てるのが一番・・・・・だが、平日(昼間は仕事)や雨天では動作検証ができないので、完成まで時間がかかってしまった。


問題点

 PIC の電源を充電池側から低ドロップレギュレーター経由で供給しているので、原則、充電池は放電時でも 5.6V 以上が必要。よってニッケル水素電池は6本以上直列にしないと充電できない。(上記では 2 セル充電に成功しているが、これはたまたまうまく動いたに過ぎない。)

 もっと低電圧の電池を充電するには、

 (1) 電源を太陽電池から取る (=電源電圧監視・リセット回路必須、夜間の過放電検出不可、WDT による監視が望ましい)
 (2) 昇圧コンバーターで PIC の電源を生成する
 (3) 低電圧で制御可能な FET を使って全体を低電圧化

 などが考えられる。

 ただいずれの場合も、充電する電池の電圧に合わせて R1/R2 比とプログラム中の定数を変更し、充電池側の測定電圧誤差を小さくするべきである。


改良のアイデア等

・充電コントロール専用とし、PIC 電源を太陽電池から供給する。また過放電 LED の代わりに満充電 LED を付けたり、あるいはモード確認 ( e.g. PWM or not ) 用の LED を設ける
・夜間検出も A/D 変換で行い回路を簡素化
・上記の通り、1.2V 電池(ニッケル水素等)対応

 いずれ 2〜4 セルのニッケル水素電池が充電可能なコントローラーを製作する予定である。

プログラム

プログラム (商用利用厳禁)Ver 1.2, 2009/04/07
ソースファイル HEXファイル
mppt.asm mppt.HEX



2007/12/3 追記

 公約 (?) どおり、NiMH 充電可能なコントローラーを製作。詳細はこちら


2008/11/19 追記

 その後携帯充電用(兼USB電源)バッテリボックスとしてこの基板を活用。詳細はこちら


2009/03/31 追記

 スイッチングに使う FET だが、既に廃盤となっている FX20ASJ を秋月で買える FET 各種 (2SJ471他) に代替できないか試してみたのだが、オシロで見る限り FX20ASJ の ton, toff がズバ抜けて速く、高速スイッチング回路をちゃんと設計しない限り代替が効かない模様(汗)


参考ホームページ、文献等 (著作者様に感謝)

1. PIC マイコンでサーボを制御する まずはこちらのサンプルで PWM の動作実験を行いました。
2. CCP の PWM モードでの使い方 細かいレジスタ設定などを参考にさせていただきました。
3. PWM をマスターする PWM 関連レジスタの設定値計算式がとても便利。
4. 電子回路で遊ぼう こちらの「トランジスタ回路入門」と「DC-DC コンバーター設計入門」は、これほど判りやすい記事は市販本を含めて見たことがありません。回路設計初心者必読。トランジスタや FET の高速スイッチング技術がわかりやすく書かれています。
5. ELECTRONICS SHELVES こちらの「PIC マイコンの使い方とサブルーチン集 8 ビット四則演算ルーチン」を MPP 電圧計算に利用させていただきました。
6. トランジスタ技術 2005年9月号 特集「太陽電池応用製作への誘い」 MPPT 電圧追従法、コントローラー回路を参考にしました。

 [電子工作のページへ]