エントリー

2008年10月17日の記事は以下のとおりです。

やっぱり目の付け所がシャープ

  • 2008/10/17 19:58
  • カテゴリー:make:

 昨日,PC-E500というシャープのポケコンの電池電圧検出回路を「謎だ」と書いたのですが,気になってずっと動作を考えていました。

 電圧検出器は4.0Vのものが1つ,3.9kΩと39kΩの2本の抵抗で電池電圧(PC-E500の場合電池電圧と回路電圧はダイオードの電圧降下分だけの差で変化は同じです)とGNDを分圧し,その中点が電圧検出器に入力されています。

ファイル 226-1.jpg

 この回路で2つの電圧を検出し,1段階目ではBATTマークの点灯,2段階目では強制的な電源OFFと,2つの動作を行うようになっています。どちらも割り込みで処理をしていますから,CPUの割り込み入力端子に繋がっています。

 検出電圧は4.0Vのみ,割り込みも1本のみ,この状態でどうやって2つの電圧を判定しているのか・・・頭をひねって考えていました。そして,ようやく答えが出ました。

 え,こんなん簡単やんけ,ですって?こんなん当たり前やがな,ですって?

 いやー,私は頭が固いので,こういうパズルは苦手でして。


・フェイズ1~電源OFFの状態

ファイル 226-2.jpg

 39kΩの抵抗をずっとGNDに落としたままにしてしまうと,電源を切っていようがいまいが常に140uA程度の電流が抵抗に流れ続けてしまい,電池が消費されてしまいます。電源OFFのときなど,何の役にも立たない電流ですから,これをカットするためにCPUのGPIOをHighにしてあります。

 これはまあ,いいですね。


・フェイズ2~電源が入った

ファイル 226-3.jpg

 電源がONになると,GPIOをLowにし,図のように39kΩをGNDに落とします。すると電圧検出器の入力電圧は,抵抗によって分圧された電圧になります。仮に電池電圧が5Vだとすれば,4.55Vになります。

 電圧検出器は4.0VでCPUに割り込みを発生させますから,この電圧ならまだ割り込みは発生しません。


・フェイズ3~電圧が下がった

 このまま使い続けると,電圧が下がっていきます。電圧検出器の入力電圧が4.0Vになる電池電圧を計算すると,4.4Vと求まります。4.4Vになって割り込みが入ったら,CPUは画面にBATTマークを点灯させて,ユーザーに電池が減ったことを通知します。この段階ではまだ電源を強制的には切りません。1つ目の電圧検出が終わりました。

 そして,これがミソなのですが,GPIOをHighに切り替え,39kΩを電池電圧と同じにします。


・フェイズ4~さらに電圧が下がると

ファイル 226-2.jpg

 39kΩが電池電圧と同じなったために,電圧検出器の入力電圧はまた4.4Vに上昇します。CPUへの入力も復帰しますが,割り込みはかかりません。

 そして電圧がさらに下がり,電池電圧が4.0Vになった瞬間,同じ割り込み端子に2度目の割り込みが入ります。CPUはこの2度目の割り込みによって,電源を強制的にOFFするわけです。

 実際には,電池からダイオードを通っていますので,電池の電圧はすべて0.6Vほど高い電圧です。ということは,BATTマーク点灯は5.0V,強制電源OFFは4.6Vとなります。

 3.9kΩを大きくすればBATTマークの点灯する電圧が高くなり,同時に電源が切れるまでの差が広がります。逆に小さくすればBATTマークの点灯する電圧が下がり,電源が切れるまでの差は縮まります。

 どうですか・・・GPIOによって電源OFF時の無駄な電流をカットすることと,検出電圧を2つ用意するという2つの機能を実現出来ているんですね。いやー,私などは目からウロコがボロボロ落ちましたよ。見事ですね。

 PC-E500,PC-E550,PC-1480Uなど,同じ回路構成の派生機種や,製造時期の違いによって分圧抵抗の値もちょっとずつ違っていたりします。BATTマークを点灯させる電圧を何度か修正してあるということでしょう。どっちにしても,電源をOFFにする電圧は4.0Vということがはっきりしました。

 実は,PC-E500のエミュレータで,LowBattery割り込みを与えてみると,1度目の割り込みではBATTマーク点灯,2度目の割り込みでは電源OFFという動作をします。割り込みによってどういう動きをするかはファームウェアによるわけですが,そのファームウェアは実機のROMから吸い出したものを使っていますから,今回の答えで間違いないのではないかと思います。

 さて,この回路は電池の電圧とGPIOのHighの電圧が同じ,という条件で動いています。しかし,昇圧回路を組み込んで回路電圧を安定化したモダンな回路構成では,もうひとひねりが必要です。

 まず,電池電圧の検出は,電池端からショットキーダイオードを通して3.9kΩに与えます。これは,電池の電圧がGPIOのHighよりもいつも低くなることで発生する逆流を防止するためです。また,回路電圧は5.0Vで安定化してありますので,GPIOのHighは5.0Vとなります。

 同じような手順で考えてみると,


・フェイズ1
 GPIOはHighで,ダイオードがOFFなので電圧検出器の入力電圧は5.0V。よって割り込みは発生しないし,電流の消費もない。

・フェイズ2
 電源ONでGPIOはGNDに落とされる。これは先程と同じ。

・フェイズ3
 1回目の割り込みがかかるのは,先程と同じ4.4Vにショットキーダイオードの電圧降下分を加えた4.6V。4.6Vに達して割り込みが発生するとBATTマークを点灯し,GPIOをHighにする。

・フェイズ4
 GPIOがHighになったので電圧検出器の入力電圧は5.0Vになる。ここから電池の電圧が下がっても,ダイオードがONしないため電流が流れず,よって5.0Vのまま。


 ということになります。あれ,2度目の割り込みはかからないですね。

 実際の動きと違うので,LTSpiceという回路シミュレータを使って動作を見てみました。ショットキーダイオードを使うと実際と同じような動きをしますが,シリコンダイオードを使うと上に書いた状態になります。何が違うのか?

 そうですね,ショットキーダイオードは逆方向電流が多く流れるのです。シリコンダイオードは逆方向電流がほとんど流れないために,シミュレータの結果が上に書いた状態と一致します。

 しかし,ショットキーダイオードは品種によるのですが,今回のシミュレーションでは30uA程も流れてしまいます。試しに,ショットキーダイオードを1N5817にしてみると,以下のような感じの挙動を示します。


・フェイズ1
 GPIOはHighで,電池電圧が4.8Vとすると,電圧検出器の入力電圧は4.82Vと少し高め。割り込みは発生しない。

・フェイズ2
 電源ONでGPIOはGNDに落とされる。これは先程と同じ。電池電圧が4.8Vなら電圧検出器には4.3Vがかかる。まだ割り込みはかからない。

・フェイズ3
 1回目の割り込みがかかるのは,4.45V。この電圧で電圧検出器の電圧が4.0Vを割る。そしてGPIOをHighにする。

・フェイズ4
 GPIOがHighになることで電圧検出器には4.51Vがかかる。ここからさらに電池電圧が下がり,2度目の割り込みがかかるのは3.8V。


 ということで,なんとまあ1度目の割り込みは4.45V,2度目の割り込みは3.8Vという結果が出ました。実機によく似た状況が再現されています。ちなみにフェイズ4における逆方向電流は26.4uA。恐ろしいことに,この微弱な電流が電池に流れ込んでいるというわけです。液漏れしそう・・・

 さらに怖いのは,この電流は温度が上がるともっと増えます。当然検出電圧も変化するだろうし,電池も危険になります。ここにはショットキーダイオードは使えそうにないということが分かってきました。

 実に奥が深い。

 さらにもうひとひねりしないと,実用にならない感じがしてきました。

 それにしても,シャープはなかなか工夫上手ですね。回路電圧と電池電圧が同じであるという前提が制約としてあるとしても,1つの電圧検出器で2つの電圧を判定できるというのは,なかなかパズルっぽくて,いい勉強をさせてもらいました。

ページ移動

  • 前のページ
  • 次のページ
  • ページ
  • 1

ユーティリティ

2008年10月

- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

検索

エントリー検索フォーム
キーワード

ユーザー

新着画像

新着エントリー

過去ログ

Feed