Armadillo-IoT G3は、Board Management IC(以下BMIC)のADコンバーター機能により、電源電圧およびRTCバックアップインターフェース(CON13)に接続された外付けバッテリーの電圧を取得することができます。
BMIC ADコンバーター仕様
・分解能: 12-bit
・測定範囲: 0V-3.3V(BMIC電源電圧)
・I2C4(I2Cノード: 3-0012)に接続されています。
・Industrial I/O (以下IIO) デバイスとして実装されています。
・sysfsディレクトリ: デバイスを認識した順番で /sys/bus/iio/devices/iio:deviceN (Nは'0'からの連番)となります。
Armadillo-IoT G3ブロック図
RTC用外部バッテリー電圧の取得
電圧値を取得するためには、BMIC ADコンバーターへの入力電圧を取得する必要があります。
電源電圧は分圧されてBMIC ADコンバーターへ入力されますが、RTC用外部バッテリーの電圧は分圧されていないため、BMIC ADコンバーターの入力電圧がそのままRTC用外部バッテリーの電圧となります。
/sys/bus/iio/devices/iio:device0/ディレクトリ下には、以下のファイルとディレクトリがあります。
root@armadillo:~# ls -1F /sys/bus/iio/devices/iio:device0/
current_timestamp_clock
dev
events/
in_voltage0_raw
in_voltage1_raw
in_voltage_scale
name
of_node@
power/
subsystem@
uevent
root@armadillo:~#
RTC電圧の算出には、以下のファイルを使います。
・in_voltage1_raw: シングルエンド入力 CH1(外部バッテリー電圧)のAD変換値
・in_voltage_scale: シングルエンド入力の最小入力電圧変動
なお、in_voltage0_rawにはシングルエンド入力 CH0(電源電圧)のAD変換値、nameにはIIOデバイス名"3-0012"が格納されています。
root@armadillo:~# cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw
1742
root@armadillo:~# cat /sys/bus/iio/devices/iio:device0/name
3-0012
root@armadillo:~#
RTC電圧の算出に必要な値は、以下のコマンドで取得できます。
root@armadillo:~# cat /sys/bus/iio/devices/iio:device0/in_voltage1_raw
3809
root@armadillo:~# cat /sys/bus/iio/devices/iio:device0/in_voltage_scale
0.727539062
root@armadillo:~#
ここでRTC用外部バッテリーの電圧は、以下の式を使って算出できます。
ADコンバータへの入力電圧 (mV) = in_voltage1_raw × in_voltage_scale
したがって、RTC用外部バッテリーの電圧は、約2.771V (3809 × 0.727539062 [mV]) である事が分かります。
補足1: RTCが機能する電圧について
・RTCが機能する電圧は、約2.2V以上を一つの目安として考えることができます。
・ただし、電池の放電特性により急激に電圧が落ち始めるタイミングがあります。
・以下は、あるメーカの電池の放電特性です。
・このグラフから、2.7V近辺から急激に電圧が低下していることが分かります。
・RTCが機能する電圧は約2.2V以上が一つの目安として考えられますので、例えば上記グラフの放電特性を持つ電池を使う場合、マージンを考えて約2.5V程度まで電圧が低下した時が、電池交換のおおよその目処として捉えることも可能です。
補足2: IIO(Industrial I/O)について
・IIO(Industrial I/O)は、各種センサーの情報を取得することを目的としたサブシステムです。
・IIOにより、ADコンバータやDAコンバータなどのデバイス情報を得ることができます。
・詳細は、Industrial I/O (https://www.kernel.org/doc/html/v4.12/driver-api/iio/index.html) を参照してください。