Microbitで電流・電圧測定(INA260使用)
電流・電圧をロギングするにはいろいろ方法があるが、今回手持ちの駒で事足らせようという魂胆で、以下のようなシステム構成を考えた。
図2-1 システム構成図
健全なラズパイ3なら、直接センサーとI2C通信し、ロギングすることができるが、
あいにく手持ちのラズパイ3は過去の実験の失敗時にGPIOが正常動作しなくなっていた。I2CもSPIも使用できない。
そこで、手持ちの2枚のMicrobitを役立てることにした。
MicrobitはI2C通信もSPI通信も可能でA/D変換もでき、MakeCodeを使用して簡単なブロック操作ででプログラムを組めるので本当に簡単にいろいろなことができる。
今回は、電流・電圧・電力計モジュール INA260 をMicrobitに接続し、I2Cで電流・電圧を測定した。
● INA260準備
今回、INA260をストロベリー・リナックスで購入したが、5ピンのピンヘッダとソケットが付属しており、手持ちのジャンパ線の種類に応じてオスメスどちらでも選択できるため、都合がよかった。
ハード的に必要な作業は、
・INA260基板に端子台パーツをはんだ付け
・INA260基板にI2C用ピンヘッダ(またはソケット)をはんだ付け
・I2Cアドレスを決定し、INA260基板上でI2Cアドレス設定部の該当する端子をはんだで短絡させる。
詳細はストロベリー・リナックスの
INA260モジュール説明書
INA260データシート
を参照。
● INA260-Microbit間接続
INA260とMicrobitはI2Cで通信するだけである。
MicrobitのI2C端子は19番(SCL)と20番(SDA)。
ただ、ピンをワニグチで挟むのは難しいので、IOBIT拡張ボードが必要。
私はすでにモータードライバー拡張ボードを持っていたので、そちらのIOポートにピンヘッダを接続して利用した。
SCLとSDAのプルアップは、Microbitでは内部的にプルアップされているので問題ない。
● Microbitプログラム
MicrobitのMakeCodeでI2C通信でセンサー値を読み取るには、「高度なブロック」-「その他」に、I2C関連のブロックが用意されている。
このブロックでI2Cアドレスを設定し、センサーのレジスタ値を読みだすことができる。
イニシャル時に、I2CアドレスとINA260のレジスタ設定のイニシャライズを行う。
ここでは、INA260のI2Cアドレス設定でGNDとSDAを短絡したので、66(b1000010)を設定している。
つぎに、レジスタ設定だが、注意することは、INA260のレジスタは形式「UInt16BE」(16ビット符号なし整数 Big Endian)で読み書きすることである。
ここで「28671(H6FFF)を指定しているが、これは以下のような内容を設定している。
・平均モード サンプル数:1024
・バス電圧変換時間 8.244ms
・シャント電流変換時間 8.244ms
・操作モード バス電圧&シャント電流(継続的に)
イニシャル後、ループ中で周期的にセンサー値を読みに行くが、以下のように読みだす。
最初に、取得する値に対するINA260のレジスタ番号を指定する。
電流値は1、電圧は2である。
電流測定値はプラス/マイナスあるので、形式:Int16BEを指定して値を取得する。
この測定値は1が1.25mAであるとデータシートに書かれているので、1.25倍する。
さらに、mAからAに変換して表示するため、1000で割っている。
こうして取得した電流・電圧値をとりあえずLEDで表示させてみるプログラムは以下の通り。