constant current discharger

ニッケル水素電池用 デジタル式定電流放電器の製作

[TopPage] -> [PIC] -> [ Discharger ]  |   [blog]
1. はじめに
 PIC16F886を使ったニッケル水素電池用放電器を作成しました。

 特徴は次のとおりで高機能かつ極力シンプルなハードウェアになるようにしています。
 また、今回の製作ではプリント基板作成及び3Dプリンタでのケース作成も行いました。
                                                                 
1)放電は定電流方式とし、放電電流は0.5A〜1.3Aの範囲で0.1Aステップで設定可能
2)放電停止電圧(カットオフ電圧)を0.8V〜1.00Vの範囲で0.01Vステップで設定可能
3)最大電池4本までの同時放電が可能で各電池の容量も測定できる。
4) 放電中は経過時間と共に各電池の放電電流総量(電流 x 時間なので放電総電荷=放電容量)[mAh]電圧値[V]電流値[A]を1秒間隔でLCDに表示します。スイッチ操作により任意の電池の詳細表示と全電池の表示(表示領域が足りないので時分割での表示)を選択可能  
5) 制御部分の電源は放電対象の電池から供給しているので専用の電源は不要(消費電流は数mA程度なので誤差範囲内)。また放電完了後(放電中以外)に一定時間スイッチ操作がない場合はスリープ状態となり消費電流はμAオーダーになる。
6) 放電中の各電池の電圧値と電流値を10秒間隔でPIC内のフラッシュメモリにロギングデータとして保存する(最大で約2.8時間分(電池がN個の場合、最大保存時間は4/N 倍))。また放電電流総量[mAh]も保存されます(当然設定変更した場合の値も保存)。すべての電池の放電が完了してから5分後にロギングは自動停止する。
7) ロギングデータは電源を切っても(電池を抜いても)消えず、放電実施後パソコンにシリアル通信で送信可能
8) PWM方式で定電流制御することでハードを極力シンプル化している。パソコンとのシリアル通信もソフトウェアで実現している(USARTを使用していない)ため、パソコンとのインターフェースは抵抗1本のみで実現している。


2. 定電流制御方式
 定電流制御のPWM制御として
  • PWM周期は 250ms とし、2.5ms毎の割り込み処理で電流値を測定し、電流の積算が設定電流値になった時点で放電用の抵抗を切り離す。(最初はある時点の電流値から次のPWM周期の適切なdutyを予測して制御していたが、電流値が変化した場合、予測誤差が発生するためこのような制御方法とした)
  • 250ms 周期内で 2.5ms 間隔で測定した電圧値の平均(放電用抵抗接続時及び非接続時の電圧の平均)を電圧値としている(放電用抵抗接続時の電池の内部抵抗のための電圧降下が線形であればこの方法は妥当と考えられる)
  • 平均値を取ることでノイズ対策も行っている
  • 2.5ms毎の電流値を積算しているので放電容量(放電総電荷)もついでに算出している
  • Dutyが100%の場合でも設定電流値の電流に満たない場合は定抵抗放電になる。逆に言うと定電流の設定値を高くすることで定抵抗放電のデータが取れる。この場合でも容量計算は2.5ms毎の電流の積算なので(定電流値x時間で計算しているわけではないので)問題なく測定可能

3. 基板作成
 今回は汎用基板ではなく、プリント基板を作成しました。
 放電用の抵抗(1Ω5Wのセメント抵抗)が接続される部分をベタパターンとして放熱効果をあげるようにしました。また放電用の抵抗は結果として放電時に触っていられるくらいの熱さになりました。
 電池ホルダへの接続はコネクタを介さず、直にプリントパターンにハンダ付けするようにしました。電池ホルダーまでの結線は2.0SQ(最大17A)のコードを使っています。下図のパターンの左端のグランド部分は抵抗を下げるためにハンダを盛りました。
 電池ホルダは検討した結果、接触抵抗が小さいことが期待できる電極にバネを使用していないアルミ製のものにしました。
 電極部分はカシメ方式で取り付けられていましたが抵抗を少なくするために半田を盛りました。
 右下の写真はプリント基板に接続した状態のものです。半田面にFETチップ2個とコンデンサ(3個)が実装されてはいますが機能の割には部品数が画期的に少ないことがお解かり頂けると思います^^

基板パターン 電池ホルダ取付け


4.ケース作成
 ケースは放熱面の考慮からアルミケースを加工して作成しようと思っていましたが放熱のための穴あけが必須です。放熱用穴の作成の容易性やLCDのサポート部分の作成の容易性等を考慮し、3Dプリンタで作成しました^^
 左下の写真がCAD画面で右側の写真が作成した部品です。(一部最新版では無いですが^^;)

CASE設計 ケース部品 組立て後



5.操作方法
 LCD表示内容をまとめて操作の説明を書くのは非効率なので YouTube に操作動画をアップしました。



YouTubeで見る場合は こちら から



6.サンプルデータ
 放電完了時刻がバラけるようにある程度放電した電池3本の放電ログを取ってみました。
 グランド強化のためにパターンと電池ホルダ結線を見直したことにより、放電完了時に他の電池のデータに干渉しておらず、効果があったことを確認できました(実は初期バージョンでは放電完了時に他の電池のデータに影響が出ていた^^;)


サンプルログ



 放電時の電圧遷移をみると一般的に良く見られる様な放電開始時に放物線(y=x)の左側のように低下し、途中はほぼ平らで放電終了前にまた低下するような曲線ではありません。
 使用した電池が手持ちの古いもの(いつも使っているような使用状態でもない)のためか、今回のような(結構遅い周期の)PWM放電の影響なのかを確認するために電流設定値を1.3Aに設定して定抵抗放電のデータを取ってみました。
 結果は左下のグラフでやはり一般的な曲線にはなっていないことから使用した電池が原因のようです。放電電流の積算は 1996mAh でした。電池の仕様は 2000mAh なので(一致しすぎている感はありますが)放電完了タイミングは適切なようです。

 容量測定値の評価を兼ねてダイソーで新規購入したReVOLTESの放電データ(購入から3回目の充電直後の放電)を取ったものが右下のグラフです。
 新品なのでまだ性能劣化は無いはずで、測定容量は 1292mAh で電池の仕様は 1300mAh なので仕様と測定値がほぼ一致します^^


定抵抗放電 ReVOLTES


 電圧のグラフがカクカクしているのが気になり、データ管理方法を見直しました。
 今まではPIC内蔵のフラッシュメモリ(14bit長)に保存する形式として、電流側は情報量が少ない(殆どが定電流設定値付近の値)にもかかわらず放電終了時に急にゼロになりダイナミックレンジが大きいことから8bit(最小単位0.01A)でそのまま保存し、電圧値は変化分を6BIT(最小単位0.01V)で保存していました。

 電圧データの方が情報量が多いので電圧側に9bit(最小単位0.001V)を使い、電流側はゼロの値を特殊値として扱うことで5bit(最小単位0.01A)で保存するように見直しました。

 また、今までは1秒間の平均値を保存していましたが、250msの平均値に変更することで変化への追従性を改善しました。内部処理の方法も見直しデータ保存時までなるべく情報落ちがないように考慮しました。整数演算時に四捨五入できりが悪い(0.5付近の少数値)場合は事前処理(たとえば割り算で除数がn.5の場合は非除数を2倍(左シフト)してから 2 x n + 1 で割る等)することで誤差を最小化するようにしました。(浮動小数点が自由に使えればこのようなチューニングも要らず、桁溢れもあまり気にする必要もないのですが・・)

 改良後のロギングデータをエクセルでグラフ化したサンプルが下記のグラフです。

サンプルグラフ

6.その他
  • ワンボタン(スイッチ)で操作するUIでクリックで項目移動、1秒以上の長押しで項目選択という操作に統一しているので説明無しで操作可能です(と思います)。例外として放電中の長押しで放電中断です。
  • 全電池の放電終了時にブザー2回(ブッブッ)、それから5分後のロギング終了時にブザー3回(ブーブーブー)鳴るようにしました。その30秒後に(スイッチ操作が無ければ)スリープ状態に移行します。スリープ状態でスイッチを押すとsleep直前の状態になります。
  • 初めての起動時に定電流値等、EEPROM内の設定値を初期化します。また、スイッチを押しながら起動した場合も設定値を初期化します。初期化処理が動作した際には「ピッ」音が鳴ります。
  • ブザーが必要でない場合はPL1への圧電ブザーの接続は不要です。
  • ブザー音が大きすぎる場合はブザーの穴をテープで塞ぐか抵抗を経由してブザーを接続するかして下さい。
  • OneBitLoaderを使わない場合はPL2コネクタは未使用となります。
  • 保存したログを転送する際のシリアル設定は 38400bps、データ長:8bit、パリティ:無し、ストップビット:1bit です。  また、ログのフォーマットは下記の通り。

    Discharger v0.04
    CutOffVol,Current
    1.000,0.90
    
    total current[mAh]
    1891,2006,2069,1053
    
    sec,V1,A1,V2,A2,V3,A3,V4,A4
       0,1.367,0.90,1.386,0.90,1.359,0.90,1.389,0.90
      10,1.361,0.90,1.383,0.90,1.353,0.91,1.370,0.90
      20,1.358,0.90,1.377,0.90,1.349,0.90,1.366,0.90
      30,1.355,0.91,1.368,0.90,1.346,0.90,1.359,0.91
      40,1.351,0.90,1.362,0.90,1.344,0.90,1.354,0.90
      50,1.349,0.90,1.361,0.90,1.343,0.90,1.349,0.90    
             ・
             ・
             ・
    


7.ダウンロード
回路図
パターン図等
ソフトウェア(Hexファイル)

※:商用利用の場合は本ページに記載した内容を許可なく使用することを禁じます。


[history]
2015/12/29 Ver0.04   update hex-file, voltage log data is smoothed
2015/04/05 Ver0.03   first published by skyriver

[TopPage] -> [PIC] -> [ Discharger ]  |   [blog]