自作電子小物/太陽電池充放電コントローラ/鉛蓄電池用
自作電子小物/太陽電池充放電コントローラ/鉛蓄電池用
Solar charge controller mini
2009年10月23日金曜日
太陽電池をエネルギー源として、常時5W程度の電力供給を行うための「小物」です。出力は直流12Vで、電力の蓄積に自動車用のバッテリー(鉛蓄電池)を、太陽電池は20Wクラスを使います。Buck型とBoost型を切換えできるDC-DCコンバータを持ち、電力の収支を確認できる稼働状況のデータ出力をUSBで行えます。製作費は1500円、制御部にマイクロチップテクノロジ社のマイコン、PIC18F14K50を使用し、ソフトウエアはC言語にてコーディングしています。
<仕様>
名称:鉛電池用「簡易」太陽電池充放電コントローラ
分類:鉛電池用太陽電池充放電制御装置(情報出力付)
太陽電池:解放最大電圧DC5V〜20V 最大動作出力電力0V〜20W
電池:鉛蓄電池12V(制御弁式、非密閉式)15Ah〜
負荷出力:非安定DC12V 〜1A
発電制御:最大電力点追跡方式(MPPT)
充電側電力が最大になるよう動的に追従
夜間は太陽電池を切り離し、逆流防止ダイオード不要
充電制御:2段定電圧定電流制御充電方式
通常充電CV/CC=14.7V/1.5A完了後、フロート充電CV/CC=13.7V/0.15Aに移行
電池が13.0V以下になると通常充電に戻る
負荷制御:過放電防止
電池電圧11.5V以下で出力を遮断、12.5V以上に上昇すると復帰
情報出力:
USBケーブルを接続すると、リアルタイムのデータと日単位の実績をPCに送信
テキストデータ(CSV形式)をシリアルエミュレーションで転送
PC側に特別なソフトは不要
WindowsはCOMポートにデータが送り込まれるので、ハイパーターミナルで表示出来ます
Macは /dev/cu.usbmodem* のデバイス名になるので、ユーティリティのターミナルを使い、catコマンド等で参照が出来ます(詳しくは参考情報に)
1秒単位に以下の項目を表示(精度は少数点1桁目まで、以降は無効)
太陽電池 Voc 開放電圧[V]/Vsol 供給電圧[V]/Isol 供給電流[A]/Psol 供給電力[W]
バッテリ Vbat 電圧[V]/Ibat 電流[A]/Pbat 電力[W]
負荷 Ilod 電流[A]/Plod 電力[W]
duty 動作モード.PWMデューティ値
stat ステータス〔S: 日照あり、G: 受電中、U: 昇圧中、D: 降圧中、L: 負荷出力中〕
5日分の下記の実績値をUSB接続時に1回だけ表示
Wsol 太陽電池供給電力量[Wh]
Wbat バッテリー蓄積電力量[Wh]
Wlod 負荷消費電力量[Wh]
Day 昼時間[h]、Night 夜時間[h]
外形:幅110mm、奥行116mm、高さ40mm
製作費:約1500円ぐらい(太陽電池、バッテリを含まず)
注意:発火するには十分な電力を扱いますので、最悪の状況を考え使用場所等を考慮して下さい。
<機能/特徴>
■過充電、過放電を防ぎバッテリを守る
■太陽電池パネルの仕様、特性にあまり縛られず、効率良く発電させる
■細かい運用データをPCに取り込める
■ボタン1つで太陽電池ーバッテリを直結にする事ができる
<技術的なポイント>
■ハードウエア
・Microchip Technology社のPIC18F14K50マイクロコントローラ
・降圧回路(buck,step-up)と昇圧回路(boost,step-down)の切換え
・FETの100kHzゲート駆動
・電力の計測
分圧抵抗による直流電圧の計測
シャント抵抗(微小直列抵抗)による双方向直流電流の計測
・USBデバイス、非バスパワー
■ソフトウエア
・プログラミング言語はC、開発環境はMPLAB、C18のペリフェラルライブラリを使用
・USBデバイスCDC(通信デバイスクラス→仮想シリアルポート接続)
<構成・方式>
■基本構成
・電力変換
バッテリーの常用域と太陽電池の最大動作出力域がマッチしており、安定した日射があれば、単純な回路(直結)でも常時100%に近い効率で充電に回せます。では、現実的に整合性の取れた部品は用意できるでしょうか?バッテリは12V鉛電池と決まってしまいますので、太陽電池を何にするかが問題となってきます。特性曲線が判ればある程度予想が付くと思いますが、あまり公開されていませんし高価な物ですので色々試す事もできません。天候についても、気象庁の実績データから想定する位しかないし、流動的なパラメータが多すぎ設計が難しいです。
悩んだ末、現実を考えると電力変換に頼らざるを得ず、できるだけ回路効率を上げるしかありません。
ところで、これまで作った太陽電池「小物」はせいぜい100mW程度のもので、今回の20Wと比べると200倍もスケールが違います。そのためか、太陽電池というのは製品によって大きく特性が違う物だと言う正しくない認識をしていました。このクラスの太陽電池となると、安定した出力特性になるようにされており整合性も良好のようです。もしかしたら単純が一番良いかもしれません。
・情報取得
必要な実績が出るのも大事ですが、シンプルな直結回路に比べ本当にメリットが出るものなのか、確認したいという興味が大きいです。そのため、できるだけ細かい稼働情報を取得できるように考えます。
■DC-DCコンバータ部
以前の「小物」で逆極性Buck-Boost型のDC-DCコンバータを手がけた事があったため、深く考えずにハードウエアをスケールアップし、ソフトウエアをそのまま流用したものを作成しましたが、効率が出ず全域で「直結」に負ける結果となってしまいました。元々、逆極性Buck-Boost型は効率を出しにくい回路という事なので、深入りせずすぐ諦めました。
また、スイッチとダイオードをもう一つ付けるとBoost(昇圧)機能にもなりますので好都合です。縦のN-MOS FETと横のSBDがBoost用です。コイルは共用で、SBDは逆流防止の機能も持ちます。逆極性Buck-Boost型に比べると部品点数が増えていますが、多数製作する訳ではありませんので良いでしょう。これで色々な充電制御を試す事ができます。
回路の説明については一般的に知られたものなので割愛させて頂きます。
単にリレー代わりに使うのであれば、これで十分だと思います。ただ、ゲートの耐圧(大体±20Vが多い)に引っかからないように、抵抗RupとRdで分圧しておきます。ゲートをオン/オフする瞬間、ゲートにチャージされた電荷を放出するための大きな電流が出るようで、I/Oポートの許容を越える可能性があります。そのため、電流制限用の抵抗等が必要になりますがRdがそれを担います。もっとも、スイッチする頻度が少なければ問題ないと思うのですが。 それから、I/Oポートは間違ってもハイ出力してはいけません。マイコン内のポート保護ダイオードを伝って、Vddに高い電圧が流入してしまい、色々な所で不都合が出てくるでしょう。(経験しました)
高速でスイッチングさせる場合は大きく事情が変わってきます。意外にマイコンが直接オープンドレイン出力で100KHzぐらいのPWM/PFM駆動できるものがあまり見当たりません。手持ちで言うとPSoCが可能なのですが低電力化が難しそうなので。
部品は極力増やしたくありませんが、あきらめてゲートドライバを登場させます。一番安く済むトランジスタで駆動する事を考えてみます。これだとマイコンでの制御はハイ出力でゲートオン、ロー出力でゲートオフになりますので、何の問題もありません。
また、ここで部品節約を考えてしまいました。何がカットで出来そうかというとRdです。要は、ゲート電圧Vgsを-5V程度に振るだけで良いので、Rupに流れる電流をコントロールればRup間の電圧、つまりゲート・ソース電圧をコントロールできます。トランジスタは電流駆動の素子なので、ベース電流を正確に流せば、コレクタ電流=Rupに流れる電流も適度に制限できるはずです。増幅率hFEのバラツキが大きいのですが、計算したら許容範囲に収まりそうです。
最初、Rup=R2を10KΩ位で考えていましたが、50KHzでのスイッチングでも、ゲートがオンに張り付いたままになり使い物になりません。ゲート電荷のディスチャージが追いつかないと思われます。R2からGNDに流れる電流は制御のためのムダな電力なので、出来るだけ少なくしたかったのですが、そうもいかないようです。R2を100Ωまで下げて何とかコントロールできる感じですが、これだと50mAもの電流が流れてしまいます。部品を太らせてスイッチング周波数を下げる、部品を増やしてハイ/ローを強制的に振ってやる等、何とかならないものか悩みましたが、いいアイデアは浮かびません。結局、大損害(-0.6W!)となりますが太陽電池側の電力なので、あきらめてこのままで行く事にしました。悪い事に、トランジスタで消費してもらう電力が増えたので、大きめの品種が必要になってしまいます。これについては、LEDに電力を消費してもらう方法で回避です。
■計測部
情報取得がもう一つの目的ですので、できれば多くの情報、太陽電池側の電圧・電流、バッテリ側の電圧・電流、負荷の電流の情報を取りたいと思い、マイコンへのインターフェース方法を考えました。
電圧 はA/Dコンバータの電圧レベルに合う様に、抵抗器による分圧で実装します。回路がスイッチング動作する物なので、ノイズが乗ってきやすいでしょうからローパスフィルタが必要です。ソフトウエアで実装する手段もありますが、節電のためCPUパワーをあまり使わない方が良いと考え、コンデンサを付加する事にしました。また、分圧方式では、バッテリから常時バイアス電流を流す事になるので、出来るだけ高抵抗にして電流を抑えたい所です。A/Dコンバータの入力条件を額面通りに受け取ると、余裕を持った分圧抵抗に設定したくなりますが、ここでは、コンデンサを入れた事と、サンプリング間隔も長いので、大胆に大きな抵抗値にしても支障がないと思われます。
電流 は電流検出抵抗(回路に影響を与えないぐらい低い値の抵抗器直列に挿入し、降下電圧を計測し電流を計算)を使うのがオーソドックスで、あとは電線磁力をセンサで検出する方法等があり、扱いやすい専用のチップも市販されています。安さを求めるのであれば、電流検出抵抗を選択するしかないと思われます。微小電圧を測定するので、A/Dコンバータの入力レベルに合う様に、オペアンプ等で線形増幅する必要があります。またまた部品数削減ですが、抵抗値を大きめにすれば、マイコンで直接取り込めるレベルになります。
前提条件:1.7A(20W/12V) A/D=10bit Vref=2V(仕様外使用4V以上必要)
消費電力が犠牲になるため、0.01Ωにしなければならないようで、やはりオペアンプが必要になります。10Wぐらいまでだったら0.1Ωもいけると思いますが。しかしながら、どうしても部品を増やしたくないので効率低下を覚悟で今回は0.1Ωを選択します。この当たりが、いつもマイコンの選定に悩む所で、アンプを内蔵しているものが使いやすいですね。
計測ポイントは、マイコンで直接取り込む条件では、ローサイドに取付ける形になります。挿入位置は上の手書きメモを参照して下さい。基準位置(GND)は太陽電池のマイナス側で、3ポイント測定し引き算する事によって3つの抵抗の降下電圧を得ます。ちょっと失敗したと思ったのが、バッテリの電流を計測するための抵抗の位置を、なぜバッテリの直下にしなかったのかです。大した話ではないのですが、バッテリ電流を計算するが単純になります。実は、これはこれで良くて、夜間バッテリから負荷に供給している時、通過する抵抗が少ないので有利でした。
■データ出力部
理想的にはリアルタイムでの表示と蓄積の機能が欲しいのですが、安定運用に入ってしまえばあまり必要ではなくなってしまいます。そのような観点で良さそうなものを探しました。
表示器 LED:〜4桁×〜2行、数字のみ +300円
LCD:16桁×〜4行、数字・英字 +700円
ビットマップ系:グラフ表示可能 +2000円
付けない: +0円
蓄積 メモリカード:外部出力も兼ねられる。プログラムメモリを多く必要。 +500円
EPROM:〜100KB、データを厳選/サマリする必要あり。 +400円
なし:マイコン内メモリに10件程度、日次サマリ情報程度。 +0円
外部出力 シリアル:ポートの付いたPCが必要。 +250円
USB:PCが必要。プログラムメモリを多く必要。 +200円
赤外線:単純垂流し式:PC側にUSB-IRドングルが必要。 +500円
IrMC:携帯電話で吸い込み。プログラムメモリを多く必要。 +?円
無線系:モジュール使用(高価)。 +?円
なし:表示を手で転記 +0円
選択 → 表示器は付けず、外部出力をUSBで行います。表示器は絶対必要ではないし、部品代が1ランクアップしてしまうので。詳細な情報蓄積も絶対必要な物とは考えませんでした。必要なった場合は、PCを接続して情報収集できれば良しとします。本当の所、SDカードで常時データ収集できていれば、事後でも調べられるので都合が良いと思いますが、未経験の技術にチャレンジしてみたかったので、この選択としました。
■制御部
複雑な制御を行いますのでマイクロコントローラが前提となります。
・低電力でPWMもしくはPFMを発生できる
・PWM/PFM出力が2チャネル(切換えで良い)
・A/D入力が5チャネル
・入力ポートが2
・出力ポートが1
・1Hzタイマ
・USB機能(Lows peedでも可)
この要件で探した所、PIC18F14K50の値段が安いので即決定です。ATMELのソフトウエアUSBは、いつか試してみたい物です。
<回路図>
基本は方式設計通りです。
ZPYツェナーダイオードは、Boost時にバッテリが外れた場合、高電圧が発生しないようにするための保護用です。その他は、特に変な所は無いと思います。
<部品表>
ケース関係、送料/交通費を除きます。
合計約1500円ですが、1個売りしていない部品が多いので実際はもっと費用はかかります。
私の場合、太陽電池パネルが16,800円、自動車用バッテリが3,800円で入手できましたので、トータルで22,100円かかりました。もし、この費用で電気を買ったとしたら防犯カメラを約20年間動かし続けられます。(22100円/25円=884kWh, 884kWh/5W=176800h)バッテリは20年も持ちませんし、他のコンポーネントが故障する可能性もあり追加費用が発生する事を考えれば、単に費用的な面だけを見ると安くないのが実情です。
<ソフトウエア>
■全体処理フロー
・メインは、とても単純な1秒毎に回るループです。タイマ、USB関連を除きすべてここからコールされます。
・計測処理は、外部からの情報を取得する役割を持ちます。A/Dコンバータでデータを取込み、次に続く処理で処理しやすい様に単位変換を行います。A/Dコンバータの基準電圧にFVRを利用していますが、CPUの電力節約の為、測定の度、毎回オン/オフしています。安定するまでの時間が、データシートで明確になっていないので不安んでしたが、支障が出る程ではないようです。太陽電池の開放電圧は、実際回路から切り離す必要があり、充電タスクにやや影響が出ます。そのため、8秒に1回だけ計測するようにしています。
・制御処理は、CPUが外部に対して出力・反応をする役割を持ちます。大きく2つ、負荷のオン/オフ制御、バッテリの充電制御です。後者が一番重要な部分で、単純化させるためにBoost昇圧/Buck降圧/Throughスルー/Off停止のモード分けします。モードの切換えは昼/夜の情報と、バッテリ電圧で判断させています。Buckとスルーモードは動作が似ているので統合しています。Boostモードもほぼ同じですが、まだ統合させていません。
・Buckモード処理は、降圧でのバッテリ充電制御で、鉛蓄電池の充電パターンを守りつつ、効率が最大になる様に、PWMのディユーティー値を操作する事です。充電パターンに従うのは難しくなく、上限電圧・電流を2セット用意し、これを越えない様にするだけです。効率の最大化は、バッテリへの充電電力が最大になるポイントを探し出します。探す方法は、ディユーティー値を1ステップづつ上げていき、電力が下がった所で折り返し、その動作を繰り返す事により最高点を探ります。簡易MPPTといった感じで、とりあえず単純なロジックにしています。
なお、使っている電力値は、実際は電流値を使っています。これは、バッテリ電圧は緩やかに変化するので、電流値でも問題ないと考えたためです。
また、急激なディユーティー値の変更は、回路に負担が出ます(制限値を超える)ので、モード変更時はゆっくり変化する様にしています。特に、Boostモードは部品に余裕を持たせている訳ではないので重要です。
詳しい実装はやはりソースコードをお読み下さい。K&Rスタイルで書かれており、違和感があるかと思いますが、ご容赦下さい。main()は一番最後にといった書き方になっています。
■マイコン構成設定
クロック:外部の12MHzクリスタルで、CPU/内部モジュールに6MHzを供給。
PIC18F14K50は内部オシレータを持っておりますが、USB機能を使用するには必ず外部水晶が必要です。
データシート上ではUSB機能部へのクロック供給のレジスタ設定がありません。内部の接続パスでは可能な感じなのですが、許されていないのは、やはりオシレータの精度の問題なのかも知れません。やってみたら何だか動きそうな気がしますが、USBホスト機器との相性問題が出てしまう事を考えたら、無理してクリスタルをカットするのは止めておいた方が良いと思います。
選択
ピン割当て:
内部機能モジュール:
■ソースコード
C言語(C18)にてコード化しております。ソースファイルは以下の構成です。
・main.c : 本アプリケーションのソースコード。ローカルサブルーチンも含め、全てこの中に記述しています。A/Dコンバータの基準電圧に、FVR(内部基準電圧)を使って1.024Vを与える様にしていますが、データシートでは2V以上必要です。安定した動作を期待するのであれば修正する必要があります。C言語の仕様の違いに納得出来ない面がありましたので、コンパイル(ビルド)オプションに「-Oi+」 を付ける必要があります。
・itoanm.c: int: 文字列変換サブルーチン。sprintf()で数値・文字列変換すると、プログラムメモリを多量に消費するため、そのメモリ削減目的で作成しました。右詰めと仮想小数点機能に特化しています。
以下USB関連ソースです。
・usb_descriptors.c: USBデバイス定義。デモプログラム(\Microchip Solutions\USB Device - CDC - Basic Demo\CDC - Basic Demo - Firmware\usb_descriptors.c)をベースに、デバイス名、製造元名を修正したのみ。
・usb_config.h: USB動作定義。 デモプログラム(\Microchip Solutions\USB Device - CDC - Basic Demo\usb_config.h)をベースに、ロースピード指定と割込を有効になるように修正。
・HardwareProfile.h: USB関連ハード定義。本アプリケーションプログラムでは使っていませんが、USBライブラリで絶対必要なソース。
・rm18F14K50.lkr: リンクパラメタ。 デモプログラム(\Microchip Solutions\USB Device - CDC - Basic Demo\rm18f87j50.lkr)をベースに、ブートローダ領域を廃止し、プログラムコード領域が最大になる様に修正しました。
USBライブラリが初めての方は、Microchipが提供するデモプログラムが”c:\Microchip Solutions\”配下のソースファイルやドキュメントが参考になります。
<ダウンロード>
バージョン0.2c リリース日:2009.10.23
次のツールを追加インストールする必要があります
Cコンパイラ:Microchip C Compiler for PIC18 MCUs v3.33以上
ライブラリ:Microchip Application Libraries v2009-07-10以上
ライセンス: フリーソフトウエア(GPL v3)
作成者:富樫豊彦 tog001@nifty.com
開発環境:
WindowsXP HomeEdition SP3 / Parallels Desktop for Mac Build3226
CadSoft Computer EAGLE 5.6 Light Edition for Mac
Microchip MPLAB IDE 8.36
Microchip C Compiler for PIC18 MCUs v3.33
Microchip Application Libraries v2009-07-10
PICkit 2 v2.60
<開発時の状況>
USBライブラリ は初めてのトライです。Microchip社からUSB/SDカード/FAT/グラフィックス機能が含まれる” Application Libraries”が無償提供されており、ダウンロード・インストールすると利用する事ができます。ドキュメント類が付いていますので、(離散的ですが)これを読めば良いのですが、何分英文なので理解も?という感じです。私は、デモプログラムから始めるのが近道でした。私がCDCを習得する時に纏めた資料がありますのでご参考に。これでUSBをRS-232C代わりにできます。
PIC18F14K50は16KBと、PIC16を使ってきた者にとっては十分なサイズと思っていましたが、USB機能を利用すると、USBスタックに半分以上のプログラムメモリが使われてしまいます。そのため、開発時は非常に厳しい状態で、最終的なコードメモリ領域の使用率は99%で残りはほぼありません。機能追加するには、何かを犠牲にする必要があります。
<基板>
一品ものなので、蛇の目(ユニバーサル)基板で組みました。
リード線タイプの部品は上面に、FET,SBD等の面実装タイプの部品はパターン面に取付けています。
これは、開発経過のある時点のものです。キャラクタLCDを付けていた時の名残で、左端に14ピンヘッダがありますが今は使っていません。また、右下の可変抵抗器(白いプラネジみたいなやつ)も、Vrefを外部から入れていた時のもので、FVRに取って変わりました。そんなこんなで、最終的にはかなり荒れてしまっています。
<ケース>
ケースはいつものように有り合わせのアクリル板とパンチングアルミを使って、簡単なのを作りました。
(寸法図面:Save0003.TIF)
屋外に設置するので、バッテリに抱かせた状態で大きなケースに納めます。そのため、このケースは接触を防ぐ程度のものです。若干発熱がありますので、通気できるようにしました。
緑色の基板は、本「小物」とは関係ない負荷側の機器です。
<性能検証>
■計測環境
「小物」の測定値の精度を、実稼働(仮設置)で確認しました。ターゲットの場所で、PCを持ち込んで計測するのはつらいので、作業部屋にケーブルを引込んで測定です。サンプリング間隔は1秒ですので、半日で約一万ポイントのデータがとれます。
太陽電池:
ネクストエナジー・アンド・リソース(株) HA-040-12 最大40W/17.5V/2.29A 解放電圧21.5V 短絡電流2.54A
逆流防止用シリコンダイオード追加Vf=1V 10m長ケーブル(往復3.3Ω)
東側2Fベランダ 水平設置 午前中しか日射なし 電線の影が入る事多し
バッテリ:
古河電池(株) 38B19 12V 28Ah
20cm長ケーブル 3Aヒューズ付充電クリップ
充電状態は5割ほど
測定器:DMM
三和電気計器(株) PC-20 × 2台
PC:
iMac (Early 2006) Mac OS X 10.5.8
表計算ソフト Apple iWork Numbers, Microsoft Excel
■自己消費電力
消費電力削減策を行っていない状態で、 夜間にDMMで計測すると1mAを指しますので、12mW程です。
■計測値確認
Vbat - バッテリ電圧
13.2Vを軸にして変な傾き方をしていますので、何らかのズレの原因があるようです。回路上で考えれば、バッテリ電流との関係が疑われたため、こちらもグラフ(右)にしてみました。縦軸がVbat-DMM値、横軸がIbat(バッテリ電流)です。想像通り、一次式の関係になっています。傾きからすると、どこかに0.15オームの抵抗性分があるのでしょうか?考えられるのはヒューズ・接点・電線ですが、ちょっと大きすぎる気もします。
±50mV位のバラツキがありますが、A/Dコンバータ2カウント分なので、こんなものだと思います。
Ibat以外の影響があるかもしれませんので、表計算ソフト上で補正式を書きグラフ化して確認しておきます。ほぼ正比例でいい感じになりましたので、Ibatでの補正だけで良い様です。
Ibat - バッテリ電流
若干のゲインエラー(傾き誤差)がありますが、ほぼ問題ないレベルです。
Vsol - 太陽電池電圧
0.15V程度のオフセットと、わずかなゲインエラーがあります。Vsolは制御に影響を及ぼすわけではないので、特に対策はしません。
Isol - 太陽電池電流
単純なオフセットエラーの様です。また、±30mA位のバラツキがあります。A/Dコンバータ3カウント分は大きすぎです。実害ないレベルなのでとりあえずほっておきます。
■電力変換効率
Psol(太陽電池発生電力=Vsol*Isol)とPbat(バッテリ充放電電力=Vbat*Ibat)+Plod(負荷電力=Vbat*Ilod)の割合を、Psolを横軸にした散布図にしたものです。
5W以下では効率低下しますが、ほぼ95%の効率でした。予想以上の出来です。
ただ、これはあくまでも回路損で、太陽電池の能力を最大限取り出す制御が出来ているかどうかは別の話。それでも、ハードウエアは問題ないという事で嬉しいです。
■太陽電池の制御状況
Vsol(太陽電池電圧)、Isol(太陽電池電流)の時系列グラフです。
前半はあれてますが、十分な電力を発生している後半は14Vにコントロールされているように見えます。使用した太陽電池は17.5Vが効率よいポイントですが何故でしょう。太陽電池の逆流防止ダイオードにVf分=1V、ケーブル抵抗3.3Ωに4V!、12〜3V程度になってもおかしくない状況でした!!今頃気づいてしまいました。これはいけません。試験環境が良くないのでした。しかし、「小物」はこの状況でもがんばっているようです。この位の電圧レベルなら、Boost動作に切換えた方が良いかもしれません。
■データ例
ある日(2009/11/4午前)の快晴時の運用を示します。左軸が電圧[V]で、右軸が電流[A]、横軸が経過時間[秒]です。これはかなり見やすい方で、雲があったりすると荒れてみにくくなります。
中央付近の波は、電線の影が太陽電池パネルを横切って行く為です。これが無ければ、もっと見やすいのですが、設置場所・電線とも移動出来ないのであしからず。後半では、バッテリ電圧の上限14.7Vで頭が抑えられた事により、発電電力を使い切れなくなり、太陽電池の電圧が上昇しています。この状態になったら、フローティング充電に切り替わると考えていたのですが、充電電流の推移の仕方が想定と違っていました。おかしな事に、充電完了する程の電力は吸い込んでいないはずなのに、なぜ限界電圧に達してしまったのでしょう。充電方法について勉強し直しです。
■実測データ詳細
USBへ出力される統計情報の例を紹介します。
統計情報は1日単位で過去10日分の情報が表示されます。左から、Wsol太陽電池の発電電力量[Wh]、Wbatバッテリー充電電力量[Wh]、Wlod負荷への供給電力量[Wh]、Day昼時間[h]、Night夜時間[h]。
Wbatがマイナスの時は、発電量より負荷の消費が上回っている状態となります。負荷をほぼ一定の約66Wh/日にしていましたので、これに満たない数字が出た場合は、負荷を切り離したと言う事になります。天気の様子と照らし合わせて、充電不足かどうかを知る事が出来ます。昼と夜の時間を足すと24時間になるはずですが、日中に非常に暗くなれば、夜になったと誤認識する事もあるでしょう。実際使用してみるととても良く機能し、徐々に日が長くなったり、短くなったりする様子が見て取れました。
<参考情報>
■Macでの便利なデータ収集方法
これを、catコマンドに与えると内容が順次表示されます。表示しながらファイルに残したければ
「cat /dev/cu.usbmodem* | tee ファイル名」
と打ち込めばOKです。この辺は、UNIXコマンドの使い方です。
この「小物」の出力に時刻情報を付加したければ、スクリーンショットのようなスクリプトを作っておくと便利です。
■規模(20W)の根拠について
防犯カメラは24時間稼働×約3Wの電力を消費します。これを賄いかつフル充電された状態で、最大7日間日照が十分でない場合でも電力が供給されるようにするためには
必要なバッテリ容量は
1日の電力量×無日照保証日数=24時間×3W×7日間=504Wh ‥42Ah
必要な太陽電池パネル発電能力は
1日の消費電力量×無日照のための余裕率÷1日の平均充電時間=24時間×3W×120%÷5時間=17.3W
これらには回路損を入れていませんので、もう少し高い能力の物が必要です。仮定として最大出力20Wの太陽電池を選定したとすると、86%以上の効率を出さなければならない事になります。これにはDC-DCコンバータのロスはもちろんですが、充電ロスも含まれますのでかなり厳しいと思います。もっとも、天気は安定していませんので、使い物になるか否かは判断しにくいでしょう。
■C18およびCDC機能の不具合について
「バグと思われる」もしくは「おかしな仕様」が2つ程ありました。
・C18 v3.33 adc.hの550行〜
PIC18F14K50のデータシートと一致しない定義になっています。
本「小物」では回避しています。
・Application Libraries v2009-07-10 usb_function_cdc.cの541行〜
仕様と言われればそれまでなのですが、putUSBUSART()を使って文字列を送信すると、文字列末の’\0’も送信されてしまいます。PC側のソフトによっては異常動作する事があります。
本「小物」では回避していません。
<関連>
<余談>
商用電源の届かせにくい所にある防犯カメラを、完全に独立運用させたかったため、必要に迫られて考え始めました。
市販品では高価な物が多かったのですが、秋月電子から1000円台の安いコントローラが出て来て、購入するかどうか迷っていました。しかし、これは充電だけなので放電制御をしないとすぐバッテリがダメになります。そこで、負荷とバッテリをオン/オフする位のごく簡単な物で良いので、ちょっと自作で済むのではないかと考えてしまいました。もしかしたら、充電制御を加えても安く済むかも知れません。ところが、効率を気にしだしたら設計が落ち着かず時間がかかってしまうはめに。結局買った方が早かった訳で、この小物の存在意義は過放電防止と情報取得機能です。残念ながら、電気代は浮きませんし省エネの目的にもなりません。
ソフトウエアを発展させれば、より効率を上げられると思いますが、実運用で特に支障も出ていないので、この状態での公開となりました。予測等を使ったもっと高度な充電制御もやってみたいですね。PIC18F14K50のプログラムメモリでは足りなくなったので、別のデバイスにするか、最適化コンパイラを導入する必要はありますが...
富樫 豊彦 tog001@nifty.com
Solar-cell and read-acid battery charge/discharge controller.