2.ハードウェア(ニッケル水素電池充放電器)

2.1.概要、全体説明
2.2.制御部:DAコンバーター
2.3.制御部:ADコンバーター
2.3.制御部:マルチプレクサー
2.4.充放電部
2.5.ATX電源
2.6.漏れ電流との戦い
2.7.その他いろいろ

2.1.概要、全体説明

基板はこんなの。



で、こんなの。

おそらく、これだけ見れば、電子回路に詳しい人なら、全部、解ってしまうレベルのものだと思います。
特に、高レベルのことはしてませんし、できません。

左側が制御部と放電部です。

パソコンからのパルスによる指示でカウンターをアップさせ、すだれ抵抗(DAコンバーター)が電圧を順々に上げていきます。その電圧と、測定対象の電圧とを、コンパレーターで比較して、パソコンに返します。
一周のカウンターアップ操作で、電池の電圧、サーミスタ(温度計)の電圧、充電電流測定用の電圧、放電電流測定用電圧、2.5Vの基準電源の電圧の5つの電圧を測定します。(ここまで左半分)

右側下半分が、マルチプレクサーで、パソコンからの指示により、どの電池について測定するかを切り替えます。

右側上半分が、放電回路です。パソコンからの指示により、トランジスタがスイッチの役目をして、放電します。放電する電流を測定できるように、0.5Ωの抵抗(1Ω2本並列)が、電池と直列につながっています。

右が、充電部です。

これも、パソコンからの指示で、トランジスタがスイッチの役目をして、充電します。同様に電流測定用の、0.125Ωの抵抗(1Ω8本直列)がついています。

パソコンとのインターフェースは、パラレルです。


パソコンのプリンターポートからの信号線は、全部(GNDを除いて、17本)使い切っちゃいました。

電源は、古いパソコンのATX電源。この電源もプリンターポートから、ON/OFFします。


電池ボックスの裏には、サーミスタが仕込んであり、温度を測定できるようになっています。

写真の右したあたりの電池ボックスの裏、ネジのちょっと左に、サーミスタが見えてるけど、わかるかなあ。

2.2.制御部、DAコンバーター

パソコンのプリンターポートの16番ピンからパルスが来ると、12ビットカウンターIC(4040)がカウントアップされ、その結果、

電源電圧 × カウンターの値 × 2 ÷ 3 V

の電圧が、出力されます。

これ、原理は簡単なんだけど、抵抗の値が揃ってなきゃいけないです。
で、10kΩの金属皮膜抵抗を100本300円なりで、買ってきて、抵抗の値を、測定して分類しました。
デジタルテスターなんてもってない私は、こんな回路をブレッドボードに組んで、計測。

で、分類して、袋に入れてみた。

それぞれの袋ごとの本数は以下のような感じ。

しかし、−0.17%から、+0.225%の間に、90本が収まってました。公称±1%なんで、なかなか、きっちりしてるなあ。
でも、真ん中が抜けてるのは、きっちりした値の抵抗を抜き取って、精密抵抗として、高く売ってるんだろうか、、、なんて邪推してしまう。

で、回路図の抵抗の、横向きの抵抗のうち、GNDにつながっていないのは、グラフの右側の高い山から11本を使いました。
ええっと、最上位ビットのは、その中でも値が、中間のもの。その右は、ちょっと高いもの、その右はちょっと低いもの、というように、桁上がりの時の誤差が少なくなることを考慮して並べました。
次に、GNDにつながる横向きの抵抗(2本づつを2組)を、ちょうど倍になるように、高いものと、低いものを組み合わせて、選びました。

さて、グラフの右側から選んだ、というのは、ロジックICの出力インピーダンスが無視できないから、、、です。
以下のような回路でロジックICの出力インピーダンスを測定してみました。

結果はと言えば、
  Hから0Vが43.5Ω、
  Lから5Vが31.8Ω、
となりました。実際には、隣の端子や、一番遠い端子から負荷をかけると、この値は変わります。
あと、DAコンバーターとしては、桁上がりの時に、値が飛ぶとどうしようもないが、値が逆転するのは、ソフトでどうにでもなる、というのもあるので、
結論として、ロジックICの出力インピーダンスは、ちょっと低めに設定で35Ωと決めました。

話は戻って、ロジックICにつながる抵抗の選別です。で、さっきの横向きの抵抗より35Ωすくなくなるようにします。
こちらは2本組み合わせればいいので、割とあわせやすいんですが、さらに、精密に抵抗を分類してみました。
棒グラフの1つの山を4種類に分けてみました。

これで、2本組み合わせるんだけど、やっぱり、どうしても組み合わせがなくて、わざわざこのために買うのもなんだし。

結果、、、出来上がったADコンバーターがこんな感じ。

裏側に、1Ωの抵抗と4.7Ωの抵抗で、補正しているのが、痛々しいです。

で、作ったDAコンバーターをパソコンにつないで、パソコンから、パルスを送ります。
で、オペアンプで増幅して、テスターで測定。



3.3V÷4096=0.81mVに対し、 2048の桁上がりのところだけは、若干少なくて、0.5mV程度。 それ以外は、0.75mVから、0.875mV程度には収まってる感じです。 ま、俺にしては完璧かなと。

2.3.制御部:ADコンバーター

ブレッドボード上で、DAコンバーターとコンパレーターをつないで、ADコンバーターとしての動作をテストしてみました。
こんな感じ。

問題発生。電源ノイズのせいで、全然、測定電圧が安定しません。
時間帯にもよるが、誤差プラスマイナス5ビットぐらいある。

こんな感じで、電源を電池から取ると、安定しますが(笑)

これ、結構、素人の私にしては、苦労したんだよね。でいろいろと格闘の結果、コンデンサーで、いろんなところを、鈍く(?)することにして解決!

2.3.制御部:マルチプレクサー

マルチプレクサーというか、制御部の、とりまとめ的に説明。
こんな回路にしました。

ええっと、パソコンの1番ピンと14番ピンがマルチプレクサの切り替えで、測定対象のX0からX3を選択します。
X0からX4は、電池につながっています。

これが4組あります。あと、2.5Vの基準電圧も測定します。

測定対象 パソコンに戻すピン番号
マルチプレクサ1 電池電圧測定 15
マルチプレクサ1 放電電流測定用電圧測定 12
マルチプレクサ2 電池温度測定用電圧測定 10
マルチプレクサ2 充電電流測定用電圧測定 13
マルチプレクサなし 2.5V基準電圧測定 11


ええっと、保護回路的なところ(回路図のショットキーダイオードとか抵抗とかは、ちと、いろいろとあるので、別途書きます。

で、ブレッドボードでは、X0からX4まではつながないで、X0だけつないでテストしていました。しかも、充放電の回路もつながずに、、、

これが、あとで、問題を起こすことに。顛末は、「2.6 漏れ電流との戦い」で書きます。

2.4.充放電部

充放電回路は以下の通りです。

結局、全然、凝ったことはしませんでした。一応、簡単な定電流回路ですが、その電流を測定もできるようになっています。

もっと正確な定電流回路とか考えてたんですけど、例えば、吐き出し形の回路(充電回路)で、正確な定電流回路で、しかもスイッチも、となると、俺のレベルで思いつく回路だと、結構部品点数が多くなって、大変です。で、せっかく、ADコンバーターを苦労してつくったんだから、それをフル活用して、電流も測定しようか、という企画です。

ええっと、基本的な解説をば、充電回路で説明しようかな。
プリンターポート6〜9の電圧がHになると、2SC1815−YがONになります。
で、電流が、1kΩ、68Ωのところを流れてきます。
すると、2SB1642のベース電圧が、下がるので、2SB1642がONになります。
で、この流れる電流が2000mAぐらいになると、0.68Ωの抵抗の電圧差が1.36Vになり、2SB1642のベース電圧も下がっていくため、68Ωに流れる電流が少なくなり、平衡に達します。で、簡単な定電流回路で充電する、ということです。

2.5.ATX電源

ATX電源の、以下の端子を使ってます。
  PS_ON(緑)
  5VSB(紫)
  5V  (赤)
  GND (黒)
制御回路は、5VSB(紫)で駆動します。
充電するときだけ、PS_ON(緑)とGNDとの間に電流を流してあげて、5V(赤)を使えるようにします。

電源は3種類ぐらい試して見ました。

ええっと、
 A. 奥のは、MATE MA30H(Celeron300MHz)のATX電源
 B. 手前右、MATE MA40H(Celeron400MHz)のATX電源
 C. 手前左、IBMのPentium100MHzについてたAT電源
です。 実は、Cの電源が、一番強力で、200W。他の2つは100W程度です。
で、Cの電源はAT電源の癖に、ATX電源みたいなPS_ONの端子があります。

プリンターポートから、PS_ON端子を操作しようとしているのですが、一応、どれでも使えそうに見えます。
ところが、実際に使い物になったのは、上の中では、Bの電源だけでした。
A:電流をある程度流さないと、電源が勝手に、OFFっぽくなる。で、再び流すとONになるが、立ち上がりが遅いため、
  状況によって測定条件が微妙に変わってしまう。
C:同じく、電流を流さないと、電源がOFFになる。で、再び電流を流そうとしても、PS_ON端子もどきを、
  ONしてやらないとONにならない。

ということで、A、Cの電源を使うには、充電中は、常にある程度の負荷をかけておいてあげないと、いけないので、だめ。ムダに、強力なFANとかでもつなげばいいんだけど、、、

で、PS_ONの端子は、簡単に、プリンターポートの17番ピンがHになると、PS_ON端子から、GNDが道通するようなトランジスタが入ってるだけです。回路は簡単なので、省略。

2.6.漏れ電流との戦い

全体組みあがって、充電し始めてから判明したんですけど、、、どっかから、電流が漏れてる、、、

具体的には、電池のうちひとつでも充電中の時は、4本全部の電圧測定値が高くなる。逆にひとつでも放電中の時は4本全部低くでる、という問題です。で、2本充電中、3本充電中、4本充電中、と充電する本数に応じて高く出てしまうというものです。
具体的には、1本でも、充電が終わったら、他の電池電圧測定値が、下がってしまうので、マイナスΔVの検出に引っかかってしまうといった悪さをします。あと、充電制御自体には影響ないんだけど、充電中の電圧は、0.2Vほど、高く測定されるので、気持ち悪い、というのがあります。

上記の回路をすべて基板上に実装してしまってから、判明した、というのがあり、半田ごて持って、保護回路全部とっぱらってみたり、悪あがきをした結果、推測しているので、完全には、原因が特定できていないですが、
  マルチプレクサの漏れ電流の影響では(多分)ない。
  電源電圧の変動の影響ではない。
という感じで、今のところ、
  充電回路や放電回路と、測定回路との分離ができていないので影響を受ける。
というのが一番怪しい、と思っています。

もしそうなら、電池電圧測定の4つと、放電電流測定用電圧測定の4つと、充電電流測定用電圧測定の4つ、計12個のボルテージフォロワー(つまり、LM324を3つ)使えば、解決するんでしょうけど、これは、基板に乗り切らないなあ、、、

で、この問題は、ハードウェアとしては、諦めてしまいました。

結局ソフトで逃げることにしました。詳しくは、ソフトウェアのところで書きます。ま、そこそこな補正ができたと思っています。

といいつつ、なにやら、他にも、奇怪な現象が、、、ええっと、
 1. 電圧が不安定になり始めると、1週間ぐらい、電圧が不安定という現象が起こる。なぜか、いつのまにか、安定するようになってる。
 2. 4本電池を入れると、電圧測定が不安定になる場合がある。ならない場合もある。
で、、、

以上の問題は、6月1日に、ほぼすべて解決しました。
詳しくは、測定誤差との戦い解決編を、、、

2.7.その他いろいろ

その他、いろいろと工夫したことや、悩んだこととか、未だに謎なことを書いていきます。まだ工事中。

ロジックICの保護回路について
  素人の私としては、ロジックICの説明書は、理解できないことがいっぱい!
  例えばですねえ、、、最大最大定格に、
    入力電圧は、電源電圧+0.5V以下にしなさい、
    入力保護ダイオード電流は、20mA以下にしなさい、
  と書いてあって、
    すべて瞬時たりとも超えてはいけません。
  と書いてあるのは、意図がよおわからんです。なんか嘘じゃないかと思います。

  実際問題、入力保護ダイオード電流を20mAも流そうとすると、
  入力電圧は、電源電圧+0.5V程度じゃ、ぜんぜーん流れないんだけど。
  逆に言うと、保護ダイオード電流を20mAも流していいなら、入力電圧はもっと
  高くしてもいいんだけど、、、
  だったら、両方守る意味がないじゃん、と思うのは素人考えなんでしょうか。

  あと、静電気対策、という意味では、どんな保護コンデンサとか、保護ダイオードつけても、
  一瞬としては絶対超えるはずですよね。
  で、入力電圧は、物凄い値になるはずなんだけど。だって、保護コンデンサとか、保護ダイオードって、
  寄生抵抗とか、寄生コイルみたいなのが、あるはずなので。

放熱について
  一応まじめに、放熱の計算しました。水谷電機工業このページに、詳しくかいてあります。
  なんか、放熱器買うより、トランジスタ並べたほうが、安くつく、という、妙な、結果になっちゃったんだけど、、、
  (買った放熱器は150円。トランジスタは60円なので、3つ並べたほうが安い、、、)
プリンターポートのピン割り当てについて
  ええっと、一応パソコン側になんらかの障害が発生した時に、充電が止まるように、いろいろと、工夫したつもりですが。