バッテリーのコンディションを監視する

バッテリー駆動の機器では、バッテリーパックのコンディションを監視することがとても重要です。 以前から、バッテリーの電圧検出回路は搭載する予定でしたが、Raspberry PiにはADコンバータがありませんので、適当なデバイスを探していました。 今回は、I2Cインターフェースで簡単に接続でき、電流、電力も取得できる ストロベリー・リナックス社のINA226 I2Cディジタル電流・電圧・電力計モジュールを使用してみました。

INA226 I2Cディジタル電流・電圧・電力計モジュール

 

このモジュールには、電流測定用のシャント抵抗も含まれているので、初期設定として、その補正値を設定するだけで、測定を開始できます。 また、必要に応じて、複数回の平均値で計測したり、異常値の検出、測定サイクル速度の変更などができます。 テキサス・インスツルメンツ社のデータシート(英語!)

接続はこんな感じでハイサイド接続。

ina226接続図

コマンドラインから

i2cset -y 1 0x42 0x05 0x0a00 w  // Calibrationレジスタに a00hを書き込み

i2cget -y 1 0x42 0x02 w               // 電圧レジスタの読み込み

i2cget -y 1 0x42 0x04 w              // 電流レジスタの読み込み

i2cget -y 1 0x42 0x03 w              // 電力レジスタの読み込み

という感じで、値を確認できます。 簡単ですね。 (今回、I2Cアドレスを42hにしています)

電流値はそのままの数値でmA表示ですが、電圧は1.25倍、電力は2.5倍にする必要があります。 また、表示される数値はリトルエンディアンなので、右側1バイトが上位、左側1バイトが下位となります。(ここちょっとハマりました)

PHPでサンプルプログラムを作成しましたが、リトルエンディアンの変換がスマートではありません。 unpack()で、サックとできそうなのですが、文字列操作でこねまわしちゃいました。(!)

<?php
//ina226 testプログラム

// Calibrationレジスタに a00hを書き込み
exec("i2cset -y 1 0x42 0x05 0x000a w");

while (1){
	$vol = exec("i2cget -y 1 0x42 0x02 w");	// 電圧レジスタの読み込み
	$anp = exec("i2cget -y 1 0x42 0x04 w");	// 電流レジスタの読み込み
	$pow = exec("i2cget -y 1 0x42 0x03 w");	// 電力レジスタの読み込み

	$vol = hexdec(substr($vol,-2).substr($vol,2,2)) * 1.25 / 1000;
	$anp = hexdec(substr($anp,-2).substr($anp,2,2));
	$pow = hexdec(substr($pow,-2).substr($pow,2,2)) * 0.025;

	printf("電圧 %.2f V  電流 %.1f mA  電力 %.2f W\n", $vol,$anp,$pow);

	sleep(1);
}
?>

 

ina226テストプログラム実行

 

これで、バッテリーパックの状態が把握できるようになりました。

 

関連記事

  • 加速度センサーで距離を推定する加速度センサーで距離を推定する ハウスローバーにとって、走行距離の計測は重要な項目です。 最も基本的な方法は、車輪の回転を検知することですが、車輪のスリップや障害物の影響 […]
  • Raspberry Piの初期設定 – RaspbianRaspberry Piの初期設定 – Raspbian Arch Linuxで開発を進めてきたハウスローバーですが、先日、いつもの様にシステムのアップデートを実施したところ、 […]
  • WebコントロールをバージョンアップWebコントロールをバージョンアップ 試作版のまま使用してきたコントロール用Webページですが、機能や表示すべき項目が決まってきましたので、この辺りできちんと(?)作りこんでみ […]
  • リアルタイムクロック RTC-8564NB で起動するリアルタイムクロック RTC-8564NB で起動する ESAの彗星探査機「フィラエ」が電力喪失、スリープモードに移行 探査機にとって電力は命です。 フィラエは太陽光パネルに光が当たれば、復活の […]
  • View Direction Rotation Control SystemView Direction Rotation Control System ハウスローバーを無線LAN経由でコントロールする場合、webカメラの映像や命令には遅延が生じます。直進の場合は距離センサーのデータを参考に […]
  • pigpioでPWM制御するpigpioでPWM制御する PWMによる速度制御は「WiringPiでPWM制御する」で実験しましたが、致命的な問題により実用とはなりませんでした。 他に良い方法はな […]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です