Датчик тока MAX471, подключение к Arduino

Модуль датчика GY-471 на микросхеме MAX471, аналоговый датчик тока, позволяет измерять ток до 3А при напряжении от 3 до 36 В .

Особенности модуля:

  • Аналоговый датчик тока, усилитель сигнала встроенного шунта.
  • Изменение тока на положительной шине.
  • Возможно параллельное подключение нескольких датчиков для увеличения измеряемого тока
  • Напряжение питания: 3 В — 36 В (Датчик не измеряет напряжение, питается от измеряемой шины)
  • Максимальный ток: 3 А.
  • Разрешение на аналоговом выходе: 1А/1В

Распиновка модуля:

  • RS- — К выходу подключается нагрузка.
  • RS+ — К выходу подключается источник питания.
  • SIGN — Логический выход с открытым коллектором, состояние выхода указывает в какую сторону течет ток, низкий уровень означает что ток течет от RS- к RS+.
  • OUT — Аналоговый выход, на выходе формируется напряжение в зависимости от величины протираемого тока, 1 вольт на выходе соответствует 1 амперу через шунт.
  • GND — Масса.


Подключение к Arduino:


Для модуля GY-471
Похожий модуль с делителем напряжения и возможностью измерения напряжения.

Датчик подключается на любой аналоговый вход ардуино.


Софт:

Для модуля не требуется сторонних библиотек, принцип работы аналогичен измерению напряжения на аналоговом входе. Можно воспользоваться стандартным примером, который не дает точных измерений.

/*
  ReadAnalogVoltage

  Reads an analog input on pin 0, converts it to voltage, and prints the result to the Serial Monitor.
  Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu).
  Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/ReadAnalogVoltage
*/

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float current = sensorValue * (5.0 / 1024.0);
  // print out the value you read:
  Serial.println(current);
}

Проблема в том, что в качестве источника опорного напряжения для АЦП используется напряжение питания, которое практически не когда не является стабильным и равным 5,0 вольт. Правильным решением будет использовать встроенный источник опорного на 1,1 вольт (для ATmega328), но в данном случаи диапазон измерений будет ограничен 1,1 А.

 
void setup() { 
  Serial.begin(9600);
  analogReference(INTERNAL);
}
 
void loop() {
   
  float current = (analogRead(A0) * 1.1) / 1024.0; 
  Serial.println(current);
}

Если это не подходит, можно воспользоваться внешним источником опорного, например MAX6125 на 2,5 В.



Видео