【充放電制御ボードの概要】
充放電マネージャの充放電を実際に行う充放電制御ボードの製作です。
完成後のバッテリ充放電制御ボードの完成後の外観は下図となります。
右上の放熱器が放電用のトランジスタ用です。2個のボリュームで充電と放電の電流を設定します。
液晶表示器とBluetoothモジュールはソケット実装としています。
【全体構成と仕様】
充放電制御ボードの構成を下図のようにしました。
PICマイコンには、8ビットの最新デバイスでアナログモジュールが強化されたF1ファミリから
28ピンのPIC16F1783を選択しました。
充電制御ICの電源が5Vとなっていますので、全体を5Vで動作させることにします。
Buetoothのみ3.3V電源ですので3端子レギュレータを使って生成します。
製作する充放電制御ボードの機能と仕様は、下表のようにすることにしました。
電源には充電電流が0.5Aほど流れますのでACアダプタから直接5Vを供給することにします。
充放電制御ボードはBluetooth接続ができなくても液晶表示器で動作しますので、
単体でも使うことができるようにします。
充電電流、放電電流は可変抵抗により手動で設定変更できるようにします。
充電機能そのものは、充電制御ICの機能に依存していますので計測値のモニタがその役割となります。
【アナログ回路部の構成】
項 目 仕 様 備 考 電源 DC5Vで1A以上のACアダプタ
最大消費電流:約0.5ABluetoothのみ3.3Vで動作
他は5Vで動作スイッチ Reset:PICマイコンのリセット
S1:手動放電開始
S2:Bluetooth初期化S2を押しながらリセットでBluetoothの初期設定を行う 表示出力 計測値を常時表示
充電側電池電圧、充電電流、
放電側電池電圧、放電電流表示フォーマット
Chg x.xxV xxxmA
Dis x.xxV xxxmA充電機能 1セルリチウムイオン電池充電
(MCP73837を使用)
電池電圧が4.2Vになるまでは定電流で充電、以降は定電圧(4.20V)で充電電池には充電制御機能が無いものとする
充電電流は 約100mA〜450mAの範囲で可変抵抗により設定可能放電機能 1セルリチウムイオン電池放電
電池電圧が3.0Vになるまでは定電流で放電、3.0Vで放電終了し電池開放放電電流は0mAから500mAの範囲で可変抵抗により設定可能 計測機能 充電側
電池電圧(0〜4.9V)、
充電電流(0〜0.5A)
放電側
電池電圧(0〜4.9V)
放電電流(0〜0.5A)12ビット分解能
15秒ごとに計測Bluetooth接続 タブレットからの要求で接続
コマンドに応答する
UART通信速度:115.2kbps送信中をアイコンの点滅で表示
接続中をアイコンで表示
アナログ回路はPICの内蔵の内蔵モジュールですべて構成しています。【バッテリ充電制御IC MCP73837の使い方】
まず、計測はすべてPICマイコン内蔵の12ビットA/Dコンバータで行います。
電圧の計測は単純に抵抗で分圧すればちょうど適当な電圧としてPICマイコンに
入力できますので問題ありませんが、電流は直列に挿入した低抵抗での電圧降下で
計測することになりますので増幅が必要になります。
この増幅部は下図(a)のように、内蔵オペアンプを使って差動増幅回路として構成しました。
これで10倍のゲインがありますから、1Aの時で3Vの出力となります。
放電用の定電流回路にも下図(b)のようにオペアンプを使い、さらに定電流値の制御は
内蔵の8ビットD/Aコンバータを使って行うことにします。
この調整にはVR2を使います。VR2の電圧値をA/Dコンバータで入力し、その値に比例
させてD/Aコンバータの出力をします。これで、連続的に定電流値をコントロールする
ことができます。
出力トランジスタにはダーリントン構成のものを使って電流増幅率を十分大きくしておきます。
エミッタの抵抗が1Ωですから、D/Aコンバータが1V出力のとき1Aの定電流ということになります。
これでD/Aコンバータのリファレンスを1.024Vとして使うことにすれば、0Aから1Aまで
256ステップで制御できます。
さらに1Ωの抵抗の電圧降下をA/Dコンバータで入力して放電電流値を計測します。
リチウムイオンバッテリの充電制御には、マイクロチップ社のMCP73837という
充電制御ICを使いましたので、このICの使い方を説明します。
このICの特徴は下記のようになっています。
・ACアダプタ入力とUSB入力が可能で自動切り替え
・充電電圧が選択可能 4.2V、4.35V、4.4V、4.5V (購入時指定)
・電流制御トランジスタを内蔵
・高精度な出力電圧 ±0.5%
・最大充電電流 1.2A
・充電電流がプログラマブル
・異常検出と強制充電終了による保護
・温度による保護制御も可能
パッケージはMSOPのものを使いましたので、ピン配置とピン機能は下図(a)のようになっています。
標準的な使用回路は下図(b)のように単体で動作するようになっていますので、そのまま使います。
したがってバッテリを接続した時点で充電が即開始されます。
このICではPROG1ピンに接続した抵抗RPROGで充電電流を100mA(R=10kΩ)から1.0A(R=1kΩ)の
範囲で可変できるようになっています。そこで、このRPROGに2.2kΩの抵抗と10kΩの可変抵抗を
直列接続して電流を半固定で設定できるようにしました。これで100mAから約450mAまでが制御できます。
温度センサにより温度制御をすることができますが、今回は、温度制御は必要ありませんので
固定抵抗で常に正常状態になるようにします。これには、THERMピンに温度スレッショルドの
上下限の間の電圧を加えればよいので、10kΩの抵抗を接続しています。
このICを使った場合の充電のシーケンスは下図のようになります。
最初にプリチャージとして短時間だけ少電流で充電し、電圧が確かに上昇するかを確認します。
これで上昇が確認できれば高速充電に移行しますが、一定時間内に一定電圧まで上昇しない
場合はエラーとして充電動作を終了します。
高速充電に移行後、電池電圧が4.2Vになるまで継続しますが、一定時間内に4.2Vにならない
場合は強制終了します。4.2Vに達したら今度は電圧が一定になるように充電電流を制限します。
これで充電電流が次第に減少し、一定電流以下になるか一定時間が経過したら正常終了とします。
【回路図と組み立て】全体構成図に基づいて作成した回路図が下図となります。【プログラム】
PICマイコンにはPIC16F1783の28ピンを使いました。液晶表示器にはI2Cインターフェースのものを
使いましたので、接続は簡単でPICマイコンのI2Cピンに接続するだけです。
ただしI2Cですのでプルアップ抵抗が必要で、この液晶表示器の駆動能力が小さいので10kΩと
ちょっと大きめの抵抗にしています。液晶表示器のリセットピンはプルアップだけとしています。
電源はDCジャックからのDC5Vを使いますが、Bluetoothモジュールにだけ3.3Vが必要ですので、
レギュレータを使って生成します。
タクトスイッチを2個接続しますがプルアップ抵抗は内蔵のものを使います。
充電ICとの接続は何もありません。
内蔵A/Dコンバータのリファレンスに内蔵定電圧リファレンスの4.096Vを選択することに
しましたので、電圧計測電圧が最大5Vとなりますから4Vに降圧する必要があります。
このため、抵抗分圧してからPICマイコンに接続しています。
充電電流の計測は、充電ICへの供給電流を0.3Ωのシャント抵抗の電圧降下で測りますので、
シャント抵抗の両端の電圧を内蔵オペアンプで10倍に差動増幅して計測しています。
放電にはオペアンプとカスケード接続のトランジスタと1Ωの抵抗で定電流回路を構成し、
一定の電流で放電するようにしています。
この電流をPICマイコンのコンパレータ用リファレンスの8ビットのDAコンバータの出力を
利用して設定制御しています。このトランジスタは発熱しますから放熱器をつけておきます。
電池との接続はコネクタとしていますが、このコネクタは電池のものに合わせた方がよいでしょう。
完成した充放電制御ボードの基板の部品面とはんだ面の外観が下記となります。
左下側に実装した充電制御ICは非常に小さいのではんだ付けには注意が必要です。
拡大したところが下記となります。
このICの周りのパターンは
放熱のためできるだけ広い
面積となるようにしています。
充放電制御ボードのファームウェアはメインの流れと割り込み処理の2本の流れで構成しています。
全体のファームウェアのフローは下図のようになっています。
最初に初期化部では使用する内蔵モジュールの初期設定を行います。入出力ピンの設定と
内蔵モジュールの設定をすべて実行します。
LCDを初期化して開始メッセージを表示したら、タイマ1とUARTの受信の割り込みを許可してから
メインループに入ります。
メインループでは、UARTの受信が完了していれば受信コマンドの処理関数(Process( ))を実行します。
続いて充電と放電の電圧電流の計測を実行し、それぞれ液晶表示器に表示します。
次に放電中でかつ放電終了電圧になっていなければ、放電電流を設定するために可変抵抗の電圧を
読み込んでD/Aコンバータに設定します。
放電電圧が放電終了値以下になっていたらD/Aコンバータの出力を最小にして放電を終了します。
次にBluetoothが接続中の場合には15秒間隔ごとに計測データを送信出力し、液晶表示器のアイコンを
点滅させます。最後に1秒間隔の待ちを挿入してループの最初に戻ります。
割り込み処理では、タイマ1の割り込みの場合は単純にIntervalの変数をカウントアップさせて15秒の
間隔を生成するのに使います。
UARTの受信割り込みの場合には、32バイト全部受信完了するまで受信バッファにデータを格納し、
32バイト完了したら受信完了フラグをオンにしてメインループに通知します。
充放電制御ボードのファームウェアは下記からダウンロードできます。MPLAB X IDEの
プロジェクトファイル1式となっています。
★★★ 充放電制御ボードのファームウェア ダウンロード ★★★