Skip to main content

Grove - ±5A DC/AC電流センサー (ACS70331)

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

Grove - ±5A DC/AC電流センサー (ACS70331) は、ACS70331をベースにした高精度のDC/AC電流センサーです。ACS70331EESATR-005B3は、<5Aの電流検知用途向けのAllegro社製高感度電流センサーICです。このセンサーは、従来のホール効果センサーよりも25倍感度が高い巨大磁気抵抗(GMR)技術を採用しており、低抵抗の統合型一次導体を流れる電流によって生成される磁場を検知します。

Grove - ±5A DC/AC電流センサー (ACS70331) は、DC電流とAC電流の両方を最大5Aまで測定でき、基本感度は200mV/Aです。

tip

以下のResourcesセクションに、電流に関する測定データ表がありますので参考にしてください。

特徴

  • DCおよびAC負荷に対応
  • 1MHz帯域幅、応答時間<550ns
  • 低ノイズ:1MHzで8mA(rms)
  • 1.1mΩの一次導体抵抗により低電力損失を実現
  • 高DC PSRRにより、低精度の電源やバッテリー(3~4.5V動作)での使用が可能
  • アナログ出力

仕様

パラメータ
電源電圧3.3V / 5V
動作環境温度-40 – 85℃
保管温度-65°C – 125°C
動作電圧<100V
電流検知範囲0 – 5A
感度200mV/A (Typ.)
出力インターフェースGroveアナログ
入力インターフェーススクリュー端子

動作原理

電流検知には直接検知と間接検知の2種類があります。分類は主に電流を測定するために使用される技術に基づいています。

直接検知:

  • オームの法則

間接検知:

  • ファラデーの誘導法則
  • 磁場センサー
  • ファラデー効果

Grove - ±5A DC/AC電流センサー (ACS70331) は磁場センサー技術を使用しています。そして、磁場センサー技術には以下の3種類があります:

  • ホール効果
  • フラックスゲートセンサー
  • 磁気抵抗電流センサー

Grove - ±5A DC/AC電流センサー (ACS70331) は磁気抵抗電流センサー原理(GMRとも呼ばれる)に基づいています。磁気抵抗(MR)は、磁場が加えられると抵抗が放物線状に変化する2端子デバイスです。磁場によるMRの抵抗変化は磁気抵抗効果として知られています。

ACS70331 QFNパッケージの内部構造は図1に示されています。ダイは一次電流経路の上に配置されており、磁場がダイ上のGMR要素と平面内で生成されます。GMR要素1と2は、正のIP電流が流れる場合に+X方向の磁場を検知し、GMR要素3と4は、正のIP電流が流れる場合に-X方向の磁場を検知します。これにより、電流の差動測定と外部の迷走磁場の除去が可能になります。

図1. ACS70331内部構造

4つのGMR要素は、図2に示されるようにウィートストンブリッジ構成で配置されており、ブリッジの出力は4つの要素によって検知される差動磁場に比例し、共通磁場を除去します。

図2. ウィートストンブリッジ構成

ハードウェア概要

図3. ピン配置

対応プラットフォーム

ArduinoRaspberry Pi

はじめに

Danger

テスト中にモジュールに人間の体が触れることは禁止されています。そうしないと感電の危険があります。

Arduinoで遊ぶ

必要な材料

Seeeduino V4.2ベースシールド±5A DC/AC電流センサー (ACS70331)
今すぐ購入今すぐ購入今すぐ購入

さらに、Seeeduino Lotus M0+を検討することもできます。これはSeeeduino V4.2とベースシールドの組み合わせに相当します。

note

1 USBケーブルを優しく差し込んでください。そうしないとポートを損傷する可能性があります。内部に4本のワイヤーがあるUSBケーブルを使用してください。2本のワイヤーしかないケーブルはデータを転送できません。使用しているケーブルが不明な場合は、こちらをクリックして購入できます。

2 各Groveモジュールには購入時にGroveケーブルが付属しています。Groveケーブルを紛失した場合は、こちらをクリックして購入できます。

DCデモ

ハードウェア接続
  • ステップ1. Grove - ±5A DC/AC電流センサー (ACS70331) をベースシールドのA0ポートに接続します。

  • ステップ2. テストする回路の正極と負極を、ネジ端子の対応する正極と負極に接続します。

tip

正極と負極を逆に接続すると、読み取り値が逆になります。このセンサーは使用前にキャリブレーションが必要ですので、最初に回路の電源を入れないでください。

  • ステップ3. Grove - ベースシールドをSeeeduinoに差し込みます。

  • ステップ4. USBケーブルを使用してSeeeduinoをPCに接続します。

図4. このデモではDC電源を使用しています。最初に電流を0Aに設定するか、電源を入れないでください。
ソフトウェア
caution

Arduinoを初めて使用する場合は、開始する前にArduinoの使い方を必ずご覧ください。

  • ステップ1. GithubからGrove Current Sensorライブラリをダウンロードします。

  • ステップ2. /example/フォルダ内にデモコードがあります。ここではGrove - ±5A DC/AC Current Sensor (ACS70331)を例に取ります。Grove_5A_DC_Current_Sensor.inoをクリックしてデモを開くか、以下のコードをコピーしてください:

#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define RefVal 3.3
#define SERIAL SerialUSB
#else
#define RefVal 5.0
#define SERIAL Serial
#endif
// OLEDディスプレイが必要です
// ピンA0を使用
#define Pin A5

// 500回の平均を取る

const int averageValue = 500;

long int sensorValue = 0;

float sensitivity = 1000.0 / 200.0; //1000mAごとに200mV


float Vref = 1508;

void setup()
{
SERIAL.begin(9600);
}

void loop()
{
// 500回値を読み取る:
for (int i = 0; i < averageValue; i++)
{
sensorValue += analogRead(Pin);

// 次のループまで2ミリ秒待つ
delay(2);

}

sensorValue = sensorValue / averageValue;


// オンボードADCは10ビット
// 異なる電源は異なる基準電圧をもたらす
// 例:2^10 = 1024 -> 5V / 1024 ~= 4.88mV
// unitValue= 5.0 / 1024.0*1000 ;
float unitValue= RefVal / 1024.0*1000 ;
float voltage = unitValue * sensorValue;

// 無負荷時、Vref=初期値
SERIAL.print("initialValue: ");
SERIAL.print(voltage);
SERIAL.println("mV");

// 対応する電流を計算
float current = (voltage - Vref) * sensitivity;

// 電圧(mV)を表示
// この電圧は電流に対応するピン電圧
/*
voltage = unitValue * sensorValue-Vref;
SERIAL.print(voltage);
SERIAL.println("mV");
*/

// 電流(mA)を表示
SERIAL.print(current);
SERIAL.println("mA");

SERIAL.print("\n");

// 次の読み取りのためにsensorValueをリセット
sensorValue = 0;
// 1秒ごとに読み取る
delay(1000);
}

  • ステップ 3. デモをアップロードします。コードのアップロード方法がわからない場合は、コードのアップロード方法を確認してください。

  • ステップ 4. Arduino IDE の シリアルモニタ を開きます。ツール -> シリアルモニタ をクリックするか、++ctrl+shift+m++ キーを同時に押します。ボーレートを 9600 に設定してください。

  • ステップ 5. キャリブレーション
    電流が流れていない場合でも、センサーは出力値を持ちます。この値を ゼロオフセット と呼びます。

図 5. このボードのゼロオフセットは 595.70mV で、電流に換算すると -4561.48mA です

ゼロオフセットが存在するため、電流が流れていない場合でもセンサーは値を読み取ります。そのため、これを補正するために Vref というパラメータを設定します。このパラメータは上記のコードブロックで確認できます。

32行目:

float Vref = 1508; 
// Vref はゼロドリフト値です。使用する前に実際に測定した値にこの値を変更する必要があります。

デモコードでは Vref を 1508 に設定していますが、ゼロオフセット値はボードごとに異なります。このデモで使用しているボードの値は 595.70 です。したがって、21行目を次のように変更します:

float Vref = 595.70;

その後、コードを保存して再度アップロードします。ステップ 2 とステップ 3 に従ってください。次に確認してみましょう:

図 6. 現在のゼロオフセットが 0.02mA に変わりました

電流出力が 0mA または小さな値になった場合、キャリブレーションが完了したことを意味します。

  • ステップ 6. これで準備完了です。電流を供給してください。自由に使用できますが、これは 5A 電流センサーであることを忘れないでください。電流は 5A を超えてはいけません!

結果の計算式を知りたい場合は、FAQ Q1 を参照してください。

AC デモ

Danger

AC 電源を使用する場合は、安全に注意し、感電を避けてください。

ハードウェア接続とキャリブレーション部分については、DC デモ を参照してください。唯一の違いはコードです。AC 負荷には以下のコードを使用してください。

#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define RefVal 3.3
#define SERIAL SerialUSB
#else
#define RefVal 5.0
#define SERIAL Serial
#endif
// OLED ディスプレイが必要です
// ピン A0 を使用
#define Pin A5

// 500 回の平均を取る

const int averageValue = 500;

long int sensorValue = 0;

float sensitivity = 1000.0 / 200.0; // 1000mA あたり 200mV


// float Vref = 244;
float Vref = 1494;

void setup()
{
SERIAL.begin(9600);
}
static float tempval;
void loop()
{

// 500 回値を読み取る:
for(int i=0;i<20;i++)
{

for (int i = 0; i < averageValue; i++)
{
int temp;
temp= analogRead(Pin);
if(temp>sensorValue)
{
sensorValue=temp;
}
delayMicroseconds(40);
}
tempval+=sensorValue;
}

sensorValue=tempval/20.0;
tempval=0;
// オンボード ADC は 10 ビットです
// 異なる電源供給により異なる基準値が生じます
// 例: 2^10 = 1024 -> 5V / 1024 ~= 4.88mV
// unitValue= 5.0 / 1024.0*1000 ;
float unitValue= RefVal / 1024.0*1000 ;
float voltage = unitValue * sensorValue;

// 負荷がない場合、Vref=initialValue
SERIAL.print("initialValue: ");
SERIAL.print(voltage);
SERIAL.println("mV");

// 対応する電流を計算
float current = ((voltage - Vref) * sensitivity)*0.707;

// 電圧 (mV) を表示
// この電圧は電流に対応するピン電圧です

voltage = unitValue * sensorValue-Vref;
SERIAL.print(voltage);
SERIAL.println("mV");


// 電流 (mA) を表示
SERIAL.print("current: ")
SERIAL.print(current);
SERIAL.println("mA");

SERIAL.print("\n");


// 次の読み取りのために sensorValue をリセット
sensorValue = 0;

// 1 秒ごとに読み取る
delay(1000);
}

FAQ

Q1# 現在の計算式は何ですか?

A1: 動作原理が非常に複雑だと感じる場合は、簡単に説明します。テスト対象の回路内の電流が磁場を励起し、それによりGMR素子の抵抗値が変化します。そして、ブリッジ内の抵抗変化がチップの出力電圧の変化を引き起こします。この出力電圧をVIOUTと呼びます。

VIOUT = Sens × Ip + VIOUT(Q)

Sens: Sensは電流を出力電圧に変換する係数です。このモジュールでは200mA/Vです。
Ip: Ipはテスト対象の回路内の電流値で、単位はmAです。
VIOUT(Q): VIOUT(Q)はIpが0mA(つまり、テスト対象の回路に電流が流れていない状態)のときの出力電圧で、単位はmVです。

以下が電流値の計算式です:

Ip = (VIOUT - VIOUT(Q)) / Sens

次に、図5を確認してみましょう。テスト対象の回路内の実際の電流値が0である場合でも、出力の電流値が0にならない理由を説明します。図5では、initialValueが595.70mVで、これはVIOUTです。また、電流は-4561.48mAで、これはIpです。VIOUT(Q)はコード内で設定したVrefです。図5では1508です。そしてSensは200mA/V、つまり200mA/1000mVです。では、計算してみましょう:

{(595.70mV-1508mV ) / (200mA/1000mV)} = -4561.50mA

したがって、図6ではVrefを595.70に設定すると、Ipは0mAになります。

回路図オンラインビューア

リソース

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルを用意しています。

Loading Comments...