3

NDK アプリからバッテリー情報を読み取ろうとしています。これを達成する唯一の方法は、値を読み取ることです/sys/class/power_supply。問題は、タイプが「Battery」のエントリが複数見つかり、どれを使用すればよいかわからないことです。

KitKat 4.4.4 を搭載した Nexus 10 では、次のように表示されます。

$ ls /sys/class/power_supply
ds2784-fuelgauge
manta-battery
smb347-battery
# other non-battery entries

3 つすべてに type=Battery を指定します。例えば:

$ cat /sys/class/power_supply/ds2784-fuelgauge/type
Battery

AndroidBatteryManagerコードでは、バッテリー デバイスを繰り返し処理し、必要なエントリを持つ最初のデバイスを取得します ( http://androidxref.com/4.4.4_r1/xref/system/core/healthd/BatteryMonitor.cpp )。ただし、私の Nexus 10 では値が異なります。たとえば、ds2784-fuelgauge/voltage_nowとの場合smb347-battery/voltage_now:

$ cat ds2784-fuelgauge/voltage_now
4153100
$ cat smb347-battery/voltage_now
4300000

ds2784-fuelgauge/voltage_now定期的に更新されているようですが (たとえば、計算負荷の高いタスクを開始すると変更されます)、smb347-battery/voltage_now修正されているようです。と を比較するds2784-fuelgauge/current_nowと、同様の効果が見られsmb347-battery/current_nowます。

私の質問は次のとおりです。

  1. ここに type=battery のエントリが複数あるのはなぜですか?
  2. 一般的な方法でそれらをどのように区別しますか?
  3. どちらを使用すればよいですか?

編集

  • voltage_nowファイル名の誤字を修正
  • 3 つのデバイスすべてで type=Battery であることを強調する
4

2 に答える 2

5

Android デバイスでは、RTC やその他の周辺機器のバックアップなど、複数のバッテリーを搭載している場合があります。3 つの sysfs エントリすべてのタイプ ファイルを既に cat しましたか? 3つすべてで「バッテリー」を取得しますか?

Android がバッテリーからいくつかのパラメーターを予期していることを考慮すると (以下を参照)、それらは取得した 3 つの sysfs ファイルに分割されていると推測できます。

たとえば、燃料ゲージは、バッテリーから/への電流の流れを読み取り、残りの容量を計算するハードウェア コンポーネントです。したがって、容量ファイルを読み取ると % が得られますが、おそらく電圧は別のファイルから読み取られます。

バッテリー パラメータ (例: /sys/class/power_supply/my_batt/status):

  • ステータス: 充電中、放電中、充電していない、フル、不明
  • health (文字列): Cold, Death, Good, Overheat, Over voltage, Unspecified failure, Unknown
  • present (int): 存在する場合は 1
  • 容量 (整数): 97% の場合は 97
  • voltage_now (単位は uV) または batt_volt (単位は mV): 4205000 の場合は 4205000 uV = 4.205 V
  • temp または batt_temp (10 分の 1 °C): 30.5 °C の場合は 305
  • 技術 (文字列): リチウムイオン
于 2014-12-16T11:22:43.427 に答える
1

あなたの質問は、どのソースを使用するか、そしておそらくそれをプログラムで決定する方法についてでした。

すべての Android デバイスで、燃料ゲージを使用する必要があります。

ネクサス 10:

Android デバイスの電力の測定に関する source.android.com の公式ドキュメントによると、Nexus 10 には Dallas Semiconductor DS2784 を使用する必要があります。SMB347 は、同じドキュメントに燃料ゲージとして記載 されていますが、おそらくバッテリー充電器です。これは、チップのデータシートにバッテリー充電器としてリストされているためです。これにより、定電圧(CV)が得られる理由が説明されます。(CV ソースが 4.2V で動作すること。これは、リチウムイオン電池の電力曲線の漸近的な上限です。)

システムFS

Android 4.4.4 を使用していました。Android M は、この記事の執筆時点でデベロッパー プレビューの段階にあり、Android 5.1.1 はすでにリリースされています。このため、電話機をアップグレードすると、/sys ファイルシステム (SysFS) のマッピングが同じにならない場合があります。つまりYMMV。

ON BKG: リチウム電池

  • ほとんどすべてのリチウムイオン電池の最大充電電圧は 4.2V です。
    2015 年の一部の新しいリチウム ポリマー バッテリーの最大電圧は 4.2V ではなく 4.35V です。これは、リチウム イオン化学 (および、この分野の進歩によるバッテリーの電極の許容可能な劣化と見なされるもの) の結果です。

  • リチウムイオン電池は、充電が 100% から 1% または 0% になると、電圧が大きく変化します。3.0V から 4.2V の範囲を期待してください。

  • すべてのリチウム電池は回復不可能なほど壊れており、放電しすぎると発火する危険性があります。そのため、リチウム* バッテリーを使用するデバイスには、ハードウェア/ファームウェアだけでなく、ソフトウェアでさらに制御できる何らかの調整回路が必要です。カットオフ電圧は 3.0V から 3.6V の間です。使用されるカットオフ電圧の選択は、安全性と容量設計の選択によって決まりますが、最後の数 100mV でバッテリが放電するときに蓄えられるバッテリ エネルギーの量は非常に少ないです。パワーカーブは少し奇妙です。以下で参照されるデータシートのような放電曲線 (mAh で表される電圧対残存容量) を参照してください。

  • このため、リチウム電池を使用する最新のデバイスは、燃料ゲージなどを使用して現在の電圧を報告する必要があります。

参考文献:

データシート

Summit SMB347 データシート

(評判ポイントが足りない)。パナソニック 18650 のデータシートなどの 18650 データシートも参照してください。パナソニックは、リチウム* バッテリーの多くのメーカーの 1 つです。テスラは、業界設定の方法で協力することを好みます。

于 2015-09-08T03:59:24.420 に答える