« docomo L-07C の時限爆弾 (空き容量消滅!) | トップページ | Fujifilm X-M1 とそのアクセサリー »

2014年12月10日 (水)

Beaglebone Black をバッテリー駆動

この記事を真似て BBB をバッテリー駆動してみた。

/*-----------  -----------*/

コネクターの取り付けは要注意

取り付けるコネクターは 2mm ピッチだが BBB の基盤上のパターンは 2.54mm ピッチである。元ネタの記事は基盤のピッチに合うようコネクターの足を広げるか曲げるかする必要があると書いているが、この程度の違いなら少し無理をすれば挿入できないことは無い。そのノリで差し込んだら写真のような情けないことになってしまった。

Misfit

P9 と干渉して斜めになってしまったのだ。ピッチもさることながら P9 と干渉しないようにピンを整形する必要がある。

この状態でも電気的な問題は無いから当面はこれでも良い。しかし見栄えが悪いし、コネクターの抜き差しも少し困難なので、ずっと使うならやり直す必要がある。

 

PMIC TPS65217C の設定変更

定格電圧 3.7V の Li+ バッテリーを満充電するには充電完了電圧を 4.2V に設定する必要があるが、BBB では TPS65217C のディフォルト値 4.1V の設定になっている。これを確認したり変えたりするのは i2c-tools パッケージに含まれている i2cget/i2cset コマンドを -f オプション付きで使えば良い。

ubuntu@arm:~$ dpkg-query -l 'i2c*'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                          Version             Architecture        Description
+++-=============================-===================-===================-=========================================
ii  i2c-tools                     3.1.0-2             armhf               heterogeneous set of I2C tools for Linux
ubuntu@arm:~$ 
ubuntu@arm:~$ sudo i2cget -f -y 0 0x24 0x05 b
0x80
ubuntu@arm:~$ sudo i2cset -f -y 0 0x24 0x05 0xa0 b
ubuntu@arm:~$ sudo i2cget -f -y 0 0x24 0x05 b
0xa0
ubuntu@arm:~$ 

CHARGER CONFIGURATION REGISTER 2 の VOREG[1:0] フィールドを ディフォルトの 00b から 10b に書き換えている。常時バッテリー駆動対応にするなら Linux の起動時に実行されるスクリプトに組み込むのが良い。これ以外の設定を変えなければならない場合は稀だと思う。

充電状況は CHARGER CONFIGURATION REGISTER 0 を調べれば分かる。

ubuntu@arm:~$ sudo i2cget -f -y 0 0x24 0x03 b
0x10
ubuntu@arm:~$ 

0x10 は充電完了だ。充電中は 0x08 または 0x48 になるはずである。これ以外は何か異常事態が発生している可能性がある。詳細は TPS65217C のデータシートを参照してほしい。

なお TPS65217C のレジスターの値を書き換えることでコア電圧などを変更できてしまう。最悪 BBB を壊してしまうことが無いとも言えないので慎重に作業する必要がある。

 

バッテリー駆動時に必要な情報

残量を知るためにバッテリー電圧が必要だが、BBB では回路を追加しないと測ることができない。ただしバッテリーが間もなく空になりそうかどうかなら、回路を追加しなくても知ることができそうだ。

3v3b

バッテリーからの電力は TPS65217C 内部の FET スイッチを介して SYS_5V に出てくる。そして上の図にあるように LDO TL5209 を通って VDD_3V3B レールに出力され、それを1/2に抵抗で分圧した信号を ADC で測るようになっている。

TPS65217C の UVLO (Under Voltage Lock-Out) の閾値はディフォルトで 3.3V になっていて、バッテリー電圧がそれを下回ると「空になった」と判断して電源を切ってしまう。この時 Linux は自動的にシャットダウンするようになっていない様なので何か手を打つ必要がある。(これは今後の課題)

TL5209 は LDO だと言っても電圧降下が少なくとも 100mV 程度はあるので UVLO の少し前には VDD_3V3B レールの電圧が低下するはずである。

これを確かめるため下のリストのスクリプトを走らせながら満充電した Sparkfun ブランドの 400mAh Li-Po バッテリーで BBB を動かし続けてみた。

ubuntu@arm:~$ sudo -s
root@arm:~# echo cape-bone-iio > /sys/devices/bone_capemgr*/slots
root@arm:~# exit
exit
ubuntu@arm:~$ while $True ; do
> date | tee -a log.txt
> cat /sys/devices/ocp.*/helper.*/AIN7 | tee -a log.txt
> sleep 15
> done
Wed Dec 10 11:49:37 JST 2014
1695
Wed Dec 10 11:49:52 JST 2014
1695
^C
ubuntu@arm:~$ cat log.txt
Wed Dec 10 11:49:37 JST 2014
1695
Wed Dec 10 11:49:52 JST 2014
1695
ubuntu@arm:~$ 

上のリストは動作確認のために Ctrl+C で止めているが、実際には UVLO で止まるまで放置した。こうやって得られた log.txt を加工してプロットしたのが下のグラフである。ここでは /sys/devices/ocp.*/helper.*/AIN7 から読み取った値を2倍して求めた VDD_3V3B レールの電圧をプロットしている。

Figure_1

これは思いのほかうまくいきそうだ。条件を上手に設定すれば 50% 以下の任意のバッテリー残量で警告を出したり自動的にシャットダウンしたりできそうである。(本当ならスリープさせたいところだが現在主流のカーネルは対応していない様である)

なお現在バッテリーで動いているか、あるいは USB または AC アダプターからの電力で動いているかの情報は TPS65217C の STATUS REGISTER から得ることができる。

 

意外と用途が限られる

今回の方式でバッテリー駆動した場合 5V 電源が得られないことがその原因である。そのため一部の例外を除き USB ホスト機能は使えない。セルフパワーの USB ハブを使えば解決する話だが、そうしてしまうと何のために BBB をバッテリー駆動しているのか分からなくなってしまう。

5V 出力のモバイルバッテリーで BBB を使うのが一番現実的な解決策かもしれない。

「一部例の外」はバスパワーが 3.3V でも動作してしまう USB 機器がある、と言うこと。いくつかの Bluetooth アダプターがこれに該当する。実際に BBB では試していないが、動くものがあることを PIC では確認している。

私が今回のバッテリー駆動方式に最も適していると思っている用途は「UPS付マイクロサーバー」だ。最近の Linux は動作中にいきなり電源を切ってもあまり壊れないが、絶対ではない。もしそんなものがあれば、だが、データの整合性が特に重要な用途にはうってつけではないかと思う。またバッテリー駆動中にシャットダウンして、その後 USB または AC アダプターから給電開始すると自動的に起動することを確認できた。これはサーバーには望ましい挙動である。

「UPS付マイクロサーバー」は、USB または AC アダプターからの給電が途絶えたら暫くバッテリーで動作した後にシャットダウンすることを想定している。これは短い時間の停電ならシャットダウンせずにサービスを継続させたいからだ。しかし AC アダプターで給電しているとその通りに動かない。給電が途絶えた途端に Linux が「Power button pressed」と言って勝手にシャットダウンしてしまうのだ。これは想定外である。なので USB 給電に限る、と言うことにしておきたい。BBB のリビジョンや Linux イメージに依存するのかもしれないが、実際に確かめていない場合について安全サイドに考えておくべきだからである。

 

もう一つ想定外

今回の方式でバッテリー駆動可能にしてしまうと、バッテリーを取り外した状態で起動しなくなってしまった。どうやらバッテリー無しで TP5 と TP6 を接続するのは具合が悪いらしい。バッテリーの代わりに 1kΩ 程度の抵抗を接続してやれば起動できるし、また一旦起動してしまえば何も接続していなくても大丈夫である。

バッテリー有無を誤検出している疑い濃厚だが、もし仮にそうであってもデータシートを読む限り AC アダプターや USB が優先されて問題なく起動しそうなものだ。しかしなぜそうならないのか良く分からない。今回の方式でバッテリー駆動可能とした場合、常時バッテリー接続が必要と思っておいた方が間違いなさそうである。

 

今回のまとめ

TPS65217C の充電完了電圧の設定変更が難物かと思っていたが、意外と簡単に片付いてしまった。その反面色々と想定外の事があり、何でもやってみないと分からないものである。

|

« docomo L-07C の時限爆弾 (空き容量消滅!) | トップページ | Fujifilm X-M1 とそのアクセサリー »

BeagleBone Black」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/543745/60789322

この記事へのトラックバック一覧です: Beaglebone Black をバッテリー駆動:

« docomo L-07C の時限爆弾 (空き容量消滅!) | トップページ | Fujifilm X-M1 とそのアクセサリー »