INA226 を arduino nano で

もう1月も終わりですね。なんだか速く月日が経つような気がします。

さて、今日は 先日作った INA226 の電流電圧センサーを I2C で arduino nano クローンにて計測してみました。

前回の調査で見つけた、ポーランドのサイトにいいチュートリアルがありました。

Korneliusz Jarzębskiのサイト
Dwukierunkowy cyfrowy czujnik prądu/mocy INA226

github
Arduino-INA226
https://github.com/jarzebski/Arduino-INA226

このGitHub のsimple のソースにライブラリを配置し、

./INA226_simple
├── INA226.cpp
├── INA226.h
└── INA226_simple.ino

INA226.cpp の記述を以下に変更。25mR のシャント抵抗の設定をします。

#include "INA226.h"
::
void setup() 
{
::
  // Calibrate INA226. Rshunt = 0.025 ohm, Max excepted current = 4A
  ina.calibrate(0.025, 1);
::

配線は以下のようにしました。ちょっとわかりにくいですが、Arduino の A5(SCL) と A4(SDA) をつないで、GND と 3.3V を VSS に入れます。あとは、負荷を電流計測にハイサイド側に付ける感じです。

arduino_ina226

シリアル通信を開くと、以下のようになっています。

Initialize INA226
-----------------------------------------------
Mode:                  Shunt and Bus, Continuous
Samples average:       1 sample
Bus conversion time:   1.100ms
Shunt conversion time: 1.100ms
Max possible current:  3.28 A
Max current:           3.28 A
Max shunt voltage:     0.08 V
Max power:             117.96 W
-----------------------------------------------
Bus voltage:   4.67875 V
Bus power:     0.01250 W
Shunt voltage: 0.00007 V
Shunt current: 0.00300 A

Bus voltage:   4.68125 V
Bus power:     0.01250 W
Shunt voltage: 0.00007 V
Shunt current: 0.00300 A

Bus voltage:   4.67750 V
Bus power:     0.01250 W
Shunt voltage: 0.00007 V
Shunt current: 0.00300 A

PC からのUSB 電圧は4.67V 程度のようです。3mA で12.5mW ということがわかりました。ちゃんと計測できているようですね。

arduino だと装備からLCDなどに出す用途で使えそうですね。データをどこかに飛ばすものであれば、ESP8266 が良さそうです。

 

IC 回路の電圧は3.3V でも5V でもOKです。LEDの負荷を arduino の 3.3V から取って計測してみると以下のようになりました。

Initialize INA226
-----------------------------------------------
Mode:                  Shunt and Bus, Continuous
Samples average:       1 sample
Bus conversion time:   1.100ms
Shunt conversion time: 1.100ms
Max possible current:  3.28 A
Max current:           3.28 A
Max shunt voltage:     0.08 V
Max power:             117.96 W
-----------------------------------------------
Bus voltage:   3.26875 V
Bus power:     0.00500 W
Shunt voltage: 0.00004 V
Shunt current: 0.00150 A

Bus voltage:   3.27000 V
Bus power:     0.00500 W
Shunt voltage: 0.00004 V
Shunt current: 0.00150 A

Bus voltage:   3.26875 V
Bus power:     0.00500 W
Shunt voltage: 0.00004 V
Shunt current: 0.00160 A

 

ちょっとコードを追加して、レジスターの値を取ってみました。

Initialize INA226
-----------------------------------------------
Mode:                  Shunt and Bus, Continuous
Samples average:       1 sample
Bus conversion time:   1.100ms
Shunt conversion time: 1.100ms
Max possible current:  3.28 A
Max current:           3.28 A
Max shunt voltage:     0.08 V
Max power:             117.96 W
-----------------------------------------------
INA226_REG_CONFIG          (0x00):16679 ---
INA226_REG_SHUNTVOLTAGE    (0x01):30 ---
INA226_REG_BUSVOLTAGE      (0x02):3749 ---
INA226_REG_POWER           (0x03):5 ---
INA226_REG_CURRENT         (0x04):30 ---
INA226_REG_CALIBRATION     (0x05):2048 ---
-----------------------------------------------
Bus voltage:   4.68250 V
Bus power:     0.01250 W
Shunt voltage: 0.00007 V
Shunt current: 0.00300 A

レジスター値は10進です。アベレージの回数とかも定数があるので便利ですね。

精度は、0.1mA  のようですね。PCB のあまり部分で作ったモジュールでも結構遊べました。あと、小さなパーツの半田付けの練習にもなりました。

 

▼参考サイト

http://denshi-kousaku.fan.coocan.jp/report030.html

 

▼まとめ

・ライブラリ便利!

・INA226 モジュールを使って、arduino で i2c にて電流電圧を簡単に取れる

・精度は、シャント抵抗次第で、0.025R だと0.1mA(100μA) の精度になるようです

・GND はIC回路と共通で測定で、電圧を測定する場合は、IC の VBUS 8pin に計測電圧をかける

・LSB とは一般的には、最下位ビットのことで、least significant bit の頭文字。

・これの分解能力は16ビットなので、0.025R だと電流は0.1mA で電圧は 1.25mV

・とりあえず、十分な精度です。