電流計測まとめ

## 1. はじめに
モータを代表としたアクチュエータを使う場合は電流計測がマストで必要になってきます．
もちろん導通チェックにも使えるので扱えるようにしておくに越したことはないのですが...
意外と電流センサや電流計などの情報って少ないんですよね．
自分が知る限り回路の電流をシステムにフィードバックする手法をまとめました．

## 2. 一覧
- ASC712
- INAシリーズ INA219, INA226
- INA2331
- デジタルマルチメータ 7351A
- デジタル電流計
- アナログ電流計
- (MAX471)
- (抵抗分流方式を用いた高電流測定)

## 3. ACS712
計測原理：ホール素子
精度：中
出力：アナログ
Amazonとかで調べるとまず出てくるのがこのセンサ．
低価格で入手性が高く，さらに出力がVcc, Signal, Gndの3端子だけというシンプル構成なのが強み．

上限が5A, 10A, 20Aの3種類あり，外見だけでは見分けがつかないので注意が必要です．
メインチップの中段の`ELC-20A`のハイフン右側を見て判断します．
ホール素子を使用しているため，磁力が周囲にないことが使用条件です．

アナログ出力は2.5[V]基準で0~5[V]の範囲の電圧を出力します．
しかし，5Aモデルは-5~5[A]を1.5~3.5[V]の範囲の電圧を出力するとのこと．
キャリブレーションはゼロ点電圧を探した後，そこ基準に傾きを算出すればおしまいです．

他にもACS715, ACS724, ACS723などなど．

## 4. INAシリーズ
計測原理：シャント抵抗を使った電圧降下測定
精度：高
出力：I2C

高精度で電流計測できる高コスパなセンサ．しかし，出力方式がI2Cなのでシステムによっては扱いづらいかもしれません．
通販サイトStrawberry Linuxで精度や電流上限で様々な種類が販売されています．

https://strawberry-linux.com/catalog/?c=current

よく見かけるのはINA219ですね
<img width="20%" alt="108221.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/1d990a2f-d109-36ab-3883-e8f6b3c262fd.jpeg">

[参考] 秋月電子, "INA219使用電流センサーモジュール(カレントセンサー)"

https://akizukidenshi.com/catalog/g/g108221/

I2Cはクロック(SCL)とデータ入出力(SDA)の2本のワイヤでシグナルを扱うので配線がスマートです．近距離でなければいけませんが．

### INA219
INA219はアドレスを4種類設定できるので，Arduinoなどから4台同時に計測値を扱うことができます．

3台のINA219を接続して計測するとき，Arduinoの場合は以下のように配線します．
ちなみに，図例の計測対象はリニアアクチュエータであり，黄色がアクチュエータのGNDとつながっています．
並列で計測できることを示したいのでINA219周辺の配線は別のサイトを参考に．
<img width="50%" alt="ina219_breadboard.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/4d8317c5-05ba-b8bf-9e0e-6c9df6a60b5b.png">

以下のプログラムで計測することができます．
``` c
#include <Wire.h>
init16_t ShuntVolt[3];
const float shuntResistance = 100.0;    // [orm]
float current;  // [A]
char buf1[8], buf2[8], buf3[8];  // for display

void setup() {
  Serial.begin(115200);
  Wire.begin();
  Wire.setClock(400000);
  
  int16_t config_value = 0x399F;           // Default
  
  // Device 1
  Wire.beginTransmission(0x40);            // INA219 address 1
  Wire.write(0x00);                        // config address
  Wire.write((config_value >> 8) & 0xFF);
  Wire.write(config_value & 0xFF);
  Wire.endTransmission();

  // Device 2
  Wire.beginTransmission(0x41);            // INA219 address 2
  Wire.write(0x00);
  Wire.write((config_value >> 8) & 0xFF);
  Wire.write(config_value & 0xFF);
  Wire.endTransmission();

  // Device 3
  Wire.beginTransmission(0x44);            // INA219 address 3
  Wire.write(0x00);
  Wire.write((config_value >> 8) & 0xFF);
  Wire.write(config_value & 0xFF);
  Wire.endTransmission();
}

void loop() {
  //Get ShuntVoltage 1
  Wire.beginTransmission(0x40);
  Wire.write(0x01);
  Wire.endTransmission();
  Wire.requestFrom(0x40, 16);
  while (Wire.available() < 16);
  shuntVoltage[0] = Wire.read() << 8 | Wire.read();

  //Get ShuntVoltage 2
  Wire.beginTransmission(0x41);
  Wire.write(0x01);
  Wire.endTransmission();
  Wire.requestFrom(0x41, 16);
  while (Wire.available() < 16);
  shuntVoltage[1] = Wire.read() << 8 | Wire.read();

  //Get ShuntVoltage 3
  Wire.beginTransmission(0x44);
  Wire.write(0x01);
  Wire.endTransmission();
  Wire.requestFrom(0x44, 16);
  while (Wire.available() < 16);
  shuntVoltage[2] = Wire.read() << 8 | Wire.read();

  current[0] = shuntVoltage[0] / 10.0;
  current[1] = shuntVoltage[1] / 10.0;
  current[2] = shuntVoltage[2] / 10.0;

  // To enhance visibility.
  dtostrf(current[0], 6, 1, buf1);
  dtostrf(current[1], 6, 1, buf2);
  dtostrf(current[2], 6, 1, buf3);
  Serial.print(buf1);
  Serial.print(",");
  Serial.print(buf2);
  Serial.print(",");
  Serial.print(buf3);
}
```

### INA2331
3chついているセンサモジュール．
どうも回路が良くないというチャットが散見されるので皆各々工夫して使っているみたいです．
うまくいったら追記します．

## 5. デジタルマルチメータ 7351A
計測原理：シャント抵抗?
精度：超高
出力：USB(NISA), GPIB, ロガー
エーディーシー(ADCMT)さんが出しているデジタルマルチメータ．
7351E+03だとRS232にも対応しているとか．

USB(A-B)ケーブルでNISA通信を使ってPCに計測値を送ることができます．
通信のラグはあるので，応答などを見たいときはロギングしましょう．

受け取り側のPCのpythonプログラムは以下の記事を参考にしてください．

## 6. デジタル電流計
定常値を見るならお手軽な手法ですね．
お気に入りは共和のこれ．
共和電業, RD701
https://www.monotaro.com/p/0560/3342/?srsltid=AfmBOorKp_G6xgPK_aQTyC770r1H8a6wbuUGj9rkakAKnV9CyTe9qwta

持ち運びならこれ．
三和電気計器, PM3
https://www.monotaro.com/g/00027831/?t.q=%E3%83%86%E3%82%B9%E3%82%BF%E3%83%BC%E3%80%80%E5%85%B1%E5%92%8C
ディスプレイの更新周期は遅いので，過渡応答なんかを動画を撮ってチェックするのはナンセンス．

回路の途中で直列にむき出し部を作らないといけないのがネックなので
お手軽にざっくり測定するなら，クランプ型でDCに対応しているこちら．
マザーツール, MT-119
https://www.monotaro.com/g/00407222/?t.q=MT-119
<img width="20%" alt="mono40524023-120619-02.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/f467d59b-30db-f01f-0c15-c6b422d3e8e6.jpeg">


## 7. アナログ電流計
アナログだからといってあなどれないのがメータ型のアナログ電流計．
導通しているかは針の様子で直感的に確かめることができます．
秋月かAmazonで買うのが安くていいですね．

## 8. モータドライバ付属の電流推定機能
ものによると思いますがノイズがひどくて使い物になりませんでした．
古いドライバを使用しているからか，そもそもおまけ機能扱いだからかもしれません．

## 9. 電流電圧測定モジュール
何かがダメだったらしく配線時立て続けに燃えたのでそれ以来手を出していません．
こういうの↓
https://www.amazon.co.jp/gp/product/B09T3F6L1B/ref=ppx_yo_dt_b_search_asin_image?ie=UTF8&psc=1

## おまけ
導通チェックするなら検電ドライバを1本は持っておきたいところ．
ケーブルの断線やコネクタが正常に接続しているかなどシステムのデバッグに役立つこと間違えなし！
検電ドライバの中にはAC100Vの検電のみ対応したものもあるので買うときは一応注意．
重宝しているのはこいつ．
ドライバの上端の金属部を親指で押さえ，チェックしたい他端を指で触ります．
LEDが点灯すれば導通しています．
<img width="20%" alt="mono75190087-160526-02.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/61f0063e-5108-3f31-c878-6b369e4d9279.jpeg">

https://www.monotaro.com/g/00697395/?t.q=%E6%A4%9C%E9%9B%BB%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90