車載電圧計 & ソーラー充電コントローラーの製作 (2010/06/12〜2010/06/26)

(Last update:2010/12/25)


ブレッドボード上でデバッグ中。
バーはユーザーフォント(外字)で表示する
製作途中の表面。LCD は最後に
中央のピンに直接ハンダ付けする。
基板中央の筒状の部品 (6KA24) は
24V カットのサージアブソーバー
 
完成品表面。
電流センサー (SOT23) は
無理やりピッチ変換 ^^;
基板裏面
ケースに実装。
ホットボンドでケースに固定
ケーシング後。実機には
オレンジバックライト LCD を投入
最大値・最小値記憶も可能
所定電圧で充電を停止
本体設置の様子。
ハンドル右に設置
太陽電池が横長なので、映り込みが気に
ならない位置に設置できる。
配線参考レイアウト
(レイアウトには PaaS を使用)
回路図
参考:電流センサー ZXCT1010 無し版回路図

製作の動機:

 バッテリー上がりはいつも不意にやってくる ^^; かくいう管理人も、過去2回ほど不測のバッテリー上がりに遭遇し、難儀した経験がある。

 管理人の車は、(1) 週末(しかも隔週程度)しか載らない、(2) 常時電源を使用する電装品を追加装備している、という理由から、比較的バッテリー上がりを起こしやすい。加えてそろそろ危険な夏場ということで、バッテリを常時監視する電圧計を製作することにした。


仕様:

 バッテリー電圧を LED で表示させるぐらいなら、こちらのようにレベルメーター IC を使うのが手っ取り早くて確実。

 が。ただの電圧計なら機能豊富で安価な市販品が多数出回っているし、先人達による車載電圧計の製作例は極めて豊富。ありきたりなものを作っても面白みが無い。そこでひとヒネリして太陽電池で補充電できるよう、充電コントローラー機能も持たせてみた。

 仕様は以下の通り。

 (1) バッテリー電圧と太陽電池からの充電電流を数値とバーグラフで表示
 (2) バーフラフは直感的にわかり易いようなユーザーフォント(外字)を定義して表示する
 (3) バーグラフはジャンパピンによる設定でピークホールド表示も可能に
   (既に開発済みのオーディオレベルメーター用バーグラフ表示ルーチンを流用)
 (4) ジャンパ設定(もしくはプッシュスイッチ)で推移グラフ表示も可(v3.0〜)
 (5) 2色 LED で電圧を簡易色表示
 (6) 電圧値、電流値とも最小値、最大値を記憶し、スイッチを押すと表示 (v1.3〜)
   スイッチを3秒以上押しつづけると最大値、最小値をリセット
 (7) LCD はバックライト付きのものにし、イルミネーション電源で点灯
 (8) 満充電検出電圧は、14.8V とし、この電圧を検出したら一定時間充電をカットする
 (9) 充電電流は 100mA 程度を想定
 (10) 12V車専用

 といったところ。

 車のバッテリー電圧は、エンジン停止時は概ね 12.5V、オルタネーター動作時は 14V 以上になる。充電停止電圧を何Vにするかは悩ましいところだが太陽電池による充電は停車時のみでよいこと、バッテリを痛めてしまっては本末転倒であることから安全な 13.5V に設定する。(したがってオルタネーター動作時は太陽電池からの充電は行われない)、14.8V で充電停止にすることにした。

 まぁたかだか 100mA 程度の充電電流なら、よほどのことがない限り大容量な車のバッテリを痛めることはないだろう。


回路、部品、設計時の考慮点等:

 ・電流センサーにはヤフオクで入手した ZXCT1010 を使用。回路図を見ると判るとおり、ハイサイド側で検出した電圧をローサード側に出してくれるので、グラウンドを浮かせずに済むのが最大のメリット。ハイサイド側の電流検出抵抗は最大電流時に 100mV 程度の電圧が発生するよう選べばよいので 1Ω とした。(この抵抗は手持ちの関係で 1/4W しかなかったが、本来なら 1/2W 以上が望ましい)

 ・電流センサーからの出力は PIC16F785 の内蔵オペアンプで増幅し、部品点数を削減する。

 ・当初、基準電圧は VDD で十分だろうと思っていたら三端子レギュレーターの出力電圧が案外いい加減(実測 4.90Vとか)だったため、別途基準電圧源として LM336Z-5.0 を投入する(ちなみに LM336Z-5.0 の出力電圧は実測 4.98V )。多少部品点数は増えるが、温度変化の激しい車内での A/D 変換精度を確保するためにも有効のはずだ。(もちろん定番の 431 シリーズでも基準電圧は作れるが、外付け抵抗の温度誤差を考えると LM336Z-5.0 で済ませた方が楽だったり。LM336Z-5.0 は秋月で安価に入手可能だし)

 ・VDD 電圧が LM336Z-5.0 の基準電圧よりも下回らないよう、78L05 と GND の間に SBD を入れて VDD を底上げする。(この出力電圧の底上げワザは低ドロップタイプの三端子レギュレーターでは不可である点に注意。VDD の実測値は 5.15V になった)

 ・太陽電池は結晶系の 16V 50mA 品を使用する。これなら最大出力点(MPP)は 16 * 0.8 = 12.8V となり MPPT 制御は不要。充電アルゴリズムは満充電電圧に達したら 5秒間充電ラインをカットするシンプルなアルゴリズムで十分であろう。

 ・高温になりがちな車内環境を考慮し、コンデンサーは全て積層セラミックとする。

 ・LCD のコントラストは 10K VR で設定するのが定石だが、今回は実装面積削減のためにシリコンダイオードの Vf(約0.6V)で固定する。


A/D 変換関連の考察:

 電圧、電流は 20ms 毎に 5 回測定し、平均値を求める(v3.0〜)。

 今回もアセンブラを使う都合上、小数点演算は極力避けたいので A/D 変換後の処理が簡便に行えるよう頭をヒネってみた。

 <電圧>

 専用の基準電圧 IC を投入し 10bit A/D 変換で処理することにした。考え方としては、電池電圧を 1/5.12 にして 10bit A/D 変換すると 20V が 800 カウントとなる。よって、4 で割ってやれば直読値 x 10 が得られる。

 <電流>

 今回は 100mA 時に 100mV を出力するよう電流検出抵抗を選定。電流センサーによってこの電圧がそのままローサイド側に出てくるので、電流センサーからの出力を 39.06 倍して 10bit A/D 変換してやれば 100mA 時 800 カウントとなり、8 で割れば直読値が得られる。

 なお、今回は電流値にそれほどの精度は必要ないのでこの程度の適当さ加減で OK だが、16F785 内蔵オペアンプはオフセット電圧が 5mV (=5mA) と高いため誤差は出る。精度を求めるにはこちらのように低オフセット電圧のオペアンプを別途投入する必要があろう。


太陽電池:

 今回はヤフオクで格安入手した選別 B級セルを使用。このパネルは横長な形状がメリットで、写真のようにダッシュボード最前面に設置することでフロントガラスへ映り込みを最小限に抑えられる。また万が一事故って助手席側のエアバッグが開いてもセルが顔面に飛んでこないというメリットもある ^^;

 定格出力は 4V 50mA なので、今回は 4セル直列構成 (16V 50mA) とした。ただ車(フィット)のフロントガラスは 100% 紫外線カットタイプのため、変換効率はかなり落ちると思われたが何とか 40mA ほどの出力が得られた。この程度の出力では市販の車用ソーラーチャージャーとたいして変わらなかったりするのだが(逝)、自分で増設した機器の消費分ぐらいは十分に賄えるので良しとする。


実装:

 ケースは、薄さ重視でテイシンの TB-56 (95 x 65 x 20mm)を選択。ただ薄さと引き換えに占有面積はそこそこ大きくなってしまった。また高さを抑えるため基板と LCD は直にハンダ付けすることになってしまったのも痛い。

 基板と LCD はホットボンドでケースに直接接着して固定した。いったん接着してしまうと PIC の交換や VR の再調整ができなくなってしまうのが、美観が保てるのがメリット。

 装置は運転席右側のスイッチパネル部分にマジックテープで貼り付け(写真参照)、車への配線はスイッチカバーをはずして裏側へ通した。もっとも、LCD 部だけ別ケースに入れて引き出し、制御基板側は見えない場所に、という実装にした方が見栄えが良かったと若干反省 orz。

 なお、今回は電圧簡易表示 2色 LED、太陽電池の発電状況をモニタする LED、ピークホールド設定用ジャンパピンは実装していない。


使用感:

 電流センサー ZXCT1010 は、以前使用した ACS712 と違って誤差が小さく、正方向出力限定のためアセンブラの場合はソフトウエアの負担が小さい。どうしても双方向の電流検出が必要なら2個使いで対処可能と、なかなか使いでがある。


改良案など:

 電流センサー ZXCT1010 は比較的入手しづらいと思われるため、ZXCT1010 無し版の回路図を参考までに掲載しておく(ソフトウエアはそのままで OK)。この場合、太陽電池のマイナス極は回路全体のグラウンドから「浮く」ことになるのでその点は注意されたい。

 本装置は停車時に充電させるためバックアップ電源への接続が原則。ただしチャージャー機能を使わずに単なる電圧計として使うならアクセサリー電源に接続しても構わない。さらに LCD のバックライトもアクセサリー電源から供給するようにしておけばシガーコネクターに挿し込んで手軽に使用できるようになる。

 まだポートが余っているので、過放電アラームのような定番機能を実装したり、あるいは車速信号を入れて速度計機能も実装するとか、改良ネタはいくらでも考えられる ^^;


今回の失敗:

 <ハードウエア編>

 ・LCD のハンダ付け不良で動作せず → スルーホールを壊していたのが原因。ハンダ付けしなおしで解決
 ・充電用電源を逆接続し、FET と電流センサーを焼損(爆) → 部品交換で解決
 ・LM336Z-5.0 と 78L05 に合計 5mA ほど喰われてしまい、装置全体の消費電流が LCD バックライト消灯時でも約 11mA と想定外に膨らんでしまった。
  (ちなみに 78L05 にしたのは最大耐圧が 30V だから。CMOSタイプだと最大耐圧は 20V 程度)

 <ソフトウエア編>

 ・プログラムの冒頭で TRIS レジスタの初期化を忘れ、ポートが出力状態にならずに小一時間ほど悩んだ(爆)
 ・PIC16F88 とは EEPROM 関連レジスタのバンクが違うことに気づくのが遅れ、EEPROM 上のデータがうまく取得できずに悩む


今回学んだこと:

 ・LCD へのユーザーフォント(外字)登録方法
  (要するに CG-RAM アドレスを指定して合計8バイトのフォントデータを送ればよい。CG-RAM アドレスは、6-7bit にコマンド、3-5bit に先頭アドレスを埋め込んだデータを LCD に送り、以降 8バイト連続で書き込むと便利 )


プログラム:

 改変自由だが商用利用は厳禁

ソースファイル (asm) & HEX ファイル v3.0 (2010/12/25)
Car_Battery_Monitor_v3.0.zip

謝辞:

 数値演算にはこちらのライブラリを使用させていただいております。開発者に御礼申し上げます。


2010/07/01 追記:

 結局レベルメーター用 IC を使った LED 版も作ってしまった ^^; 詳細はこちら

2010/07/12 追記:

 やっぱり 7セグ版電圧計も作ってしまった(汗)。詳細はこちら

2010/12/25 追記:

 バーグラフ表示に加え、データ推移を表示するモードを追加し v3.0 として公開。これに伴い RC5 ポートに表示モード切替ジャンパ新設(プッシュスイッチでリアルタイム切り替えも可)。


 [電子工作のページへ]