2013年8月9日金曜日

〔番外編〕 電力測定ツールも自作してみよう


はじめに

アプリ配布を始めた途端に「あなたのアプリ入れたらバッテリの持ちが悪くなった」なんて話をよく耳にします。そんなことにならないよう配布アプリにあっても開発段階から省電力を心がける時代になってきたのではないでしょうか。
スマートフォンの電力測定というと高価な測定器が必要なイメージがありますが、用途を絞れば安価に入手が可能になります。今回は番外編としてソフトウェア開発者向けに安価で電力測定が行えるツールの自作方法について紹介いたします。




免責事項

この記事に書かれている内容は技術的な参考資料として記載しています
端末等の破損や作業上の事故について弊社および記事作成者は責任を持ちません
また設計上の品質についても保証を行っていませんので、作成時は各自で性能確認等を行うようにしてください。


1. 測定ツールの構成

今回作成する測定ツールは次のような構成になっています。


・電源回路(安定化電源キット)
 ダミーバッテリへ供給するバッテリ電源を生成している部分です。
 今回は回路設計を簡略化するために市販の電源キットを使っています。
・電流検出回路
 ダミーバッテリへ送られる電圧と電流を検出しArduinoに送っています。
・Andorid端末との接続を行う回路
 検出された電圧と電流をA/D変換してAndroidへ送信します。
 今回 Androidタブレットとの通信にはAndorid Accessory を使いました。
・表示装置
 測定された電流値を表示したりグラフ化します。
 安価に入手可能な Androidのタブレットを使っています。

2. 回路設計

電源部分はキットを使いますので、測定部分だけ回路を設計しています。
 緑点線で囲まれた部分が電源キットの回路で、オレンジ色に囲まれた部分が今回設計した回路になります。

実際の基板では次のようになっています。




測定する電流成分はシャント(分流)抵抗器 R2で検出されます。なお 0.1Ωで分流された電圧はA/D変換するのには小さすぎることからU2のオペアンプで10倍に差動増幅して Arduinoへ送られます。またダミーバッテリへ出力される電圧の測定のために R3,R4の抵抗でバッテリ電圧を2分の1にしてから Arduinoへ送るようになっています。
この回路のポイントはハイサイドで電流検出をしているということで、これによりローサイド検出でありがちなUSB接続等でGND経路が変わり不正な電流値となるのを防いでいます。ハイサイド検出は設計が難しい感がありますが、今回使用したオペアンプは入出力rail-to-railのCMOSデバイスであったことから比較的簡単に実現できました。

またCMOSオペアンプを使うときは未使用入力はVSSもしくはGNDに接続するようにしてください。そうしないと意図しないノイズやラッチアップ破損に悩ませられることになります。

Tips: SPICEでの検証
今回の作成では回路定数をSPICEによるシミュレーションで決定し、ブレッドボードで特性を検証するというプロセスを経て回路を決定しました。



上記シミュレーションではsine-waveで負荷が変動するモデルを使用していて、シャント抵抗に流れる電流値と出力される電圧の波形が完全に重なっていることから、増幅回路がリニアに追従していることが判ります。

ただし実際の基板では回路図に記載されない回路が存在しているのでシミュレーション通りの結果が出るとは限りません。特にブレッドボードは接触抵抗が大きく、今回のような低インピーダンス回路では検証結果が合わず悩まされました。

そのため検証結果から回路図に記載されていない回路部品(導体抵抗etc)を付け加えシミュレーションと検証結果と合致するまで検証を繰り返しています。




3. 使用部品

今回作成した測定ツールの部品は以下の通りです。
・安定化電源キット 1台
 今回は秋月電子さんの安定化電源キットを利用させていただいております 
・多回転可変抵抗1KΩ 1pcs <VR>
 安定化電源キットに付属している可変抵抗の代わりに取り付けます
・酸金抵抗 0.1Ω 1W <R2>
・カーボン抵抗 100Ω 1/8W 2pcs <R5,R6>
・金属皮膜抵抗 1KΩ 1/4W 2pcs <R3,R4>
・金属皮膜抵抗 10KΩ 1/4W 2pcs <R7,R8>
・金属皮膜抵抗 100KΩ 1/4W 2pcs <R9,R10>
・ターミナルブロック 2pcs <CN1,CN2>
・ヘッダコネクタ 8ピン 1pcs <CN3>
 Arduino接続用に使います
・CMOSオペアンプ LMC6482 1pcs <U2>
・3端子レギュレータ TA7805S 1pcs <U3>
・アルミ電解コンデンサー 47uF 16V 1pcs <C6>
・セラミックコンデンサー 0.1uF 50V 1pcs <C7>
・アルミ電解コンデンサー100uF 16V 1pcs <C8>
・ユニバーサル基板
・ACアダプタ 9V 2.5A
・ヒートシンク
 安定化電源キットに載っているレギュレータはドロップ式なのでかなり発熱します。
 高温になりすぎないようヒートシンクを取り付けます
・DC分岐ケーブル
・ヒューズ
 短絡時はACアダプタ側の保護が入りますが念のため付けています
・Arduino MEGA ADK R3
・Androidタブレット
・USBケーブル
・コードやメッキ線などの配線材

4. 組み立て

電源キットはトランスを用いる回路になっていますが、今回はACアダプタを用いていますのでブリッジダイオードの回路をバイパスして使います。またバッテリの特性に合わせて微妙な電圧調整が必要なことから半固定抵抗は多回転タイプに変更しています。

電流検出をする回路部分は写真のように組み立てます。



5. 動作テスト

-- 警告 --

作成記事において擬似負荷として使用しているセメント抵抗は非常に高温になります。
テスト作業にあたり火傷をしないよう注意してください。



 単体テスト

・まず出力端子に何も繋がずACアダプタを接続します。
この時に入力側の電圧がACアダプタの定格である 9V近辺ならばOKです。
もし電圧が低かったり安定しない時はACアダプタを取り外し、基板の組み立てを再チェックしてください。


・出力電圧の調整
出力端子にテスターを繋ぎ電圧モードで測ります。
電源基板上のVRを回し出力電圧の調整を行って下さい。
リチウムイオン電池の満充電電圧は4000~4200mVあたりですが、実際の100%値は端末ごとに異なりますので、安全をみて 4000mVに合わせます。

単体テスト2

・電流検出の確認
写真のように出力コネクタに5Ωのセメント抵抗と電流計を接続します。
また電流測定回路に動作確認用の電源を入れるために CN3の3ピンと4ピンを短絡します


この時コネクタCN3の7番ピンから電流値と同じ電圧値が出ていれば正常に動作しています。
4000mV出力で5Ω負荷の場合
 4000mV / (5 + 0.1)Ω =  784.3mA となり 784mV に近い電圧が出ているはずです。

今回作成した測定回路では1%グレードの抵抗を使っていますので動作上の誤差は1~2%程度に収まるかと思います。
ただし抵抗は温度が上がると抵抗値が上がる傾向があり、特に擬似負荷として使っているセメント抵抗は非常に高温となることから抵抗値の変化による誤差が多くなります。
もし電流計の値が上記数値と合わない場合は、擬似負荷に使っているセメント抵抗を別のものに変えてみて下さい。

単体テスト3

・Arduino単体テスト
写真のように回路を接続します。
電源回路とArduinoは分岐ケーブルを用いて1台のACアダプタから供給するようにしています。


ArduinoにA/D変換プログラムを書き込み、シリアルポート接続すると現在の電圧と電流値が表示 されるようになります。

以下に単体テスト用のスケッチ記載しました。
MEGA2560でビルドして書き込んでください。

#define  ANA_VOLT        A0
#define  ANA_AMP         A1
#define  VOLT_CONST      5000000/1024 *2
#define  AMP_CONST      5000000/1024

void setup();
void loop();
        uint16_t val;

byte c;
void setup()
{
    Serial.begin( 115200 );
    Serial.print("\r\nStart\r\n");
}

void loop()
{
        uint16_t val;
        val = analogRead(ANA_VOLT); // dummy read
        val = analogRead(ANA_VOLT);
        Serial.print(val * VOLT_CONST /1000 , DEC);
    Serial.print("mV [0x");
        Serial.print(val, HEX);
    Serial.print("]\t");
    delay(10);
       
        val = analogRead(ANA_AMP); // dummy read
        val = analogRead(ANA_AMP);
        Serial.print(val * AMP_CONST /1000 , DEC);
    Serial.print("mA [0x");
        Serial.print(val , HEX);
    Serial.print("]\r\n");
    delay(250);
}



全体試験

ここからArduinoとタブレットを接続し、また実負荷として測定対象の端末も接続します。


写真のようにタブレット画面に端末のバッテリ電圧と電流値が表示されるようになります。
また端末の電力消費により表示が変化しています。

今回ここで使っているプログラムは公開していませんが、次回のアプリ開発編にてよりグレードアップしたものを公開していく予定です。

まとめ

今回の記事ではハードウェア作成を紹介させて頂きましたが、比較的簡単に作成できることがご理解いただけたかと思います。
これで読者の方々の手元でも省電力の確認が出来るようになれば幸いです。



ブランド戦略部 - 中村和貴
140 180 ツール作成 , 省電力

記載されている会社名、および商品名等は、各社の商標または登録商標です。

0 コメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...