ACS712T 30А модуль датчика тока как подключить к Arduino

ACS712T 30А амперметр Datasheet, модуль датчика тока на эффекте Холла для Arduino

ACS712T 30А модуль датчика тока как подключить к Arduino

Вывод датчика ACS712 

VCC  Питание, 5 В -> (Arduino +5В)
GND  Земля -> (Arduino GND)
OUT  Аналоговый выход датчика, напряжение на котором линейно зависит от протекающего через датчик тока -> (Arduino A0)
IP+  Вывод 1 для подачи измеряемого тока -> (в разрыв нагрузки)
IP-  Вывод 2 для подачи измеряемого тока -> (в разрыв нагрузки)

 

acs712 30a ampermetr modul datchika toka na effekte kholla dlya arduino 4

 

ACS712 и АЦП Ардуино - рассчет коэффициента

АЦП у разных плат Arduino имеет различную разрядность, обычно 10 или 12 бит. С аналогового порта могут приходить значения от 0 до 210 = 1024 для 10-разрядного АЦП.

Условие: диапазон измерений тока от -5 А до +5 А, а чувствительность 185 мВ/А.

Если на 1 А приходится 185 мВ, это соответствует примерно 38 единицам измерения АЦП:

185 * 1024 / 5000 = 37.89

где 5000 – это максимальное значение напряжения, которое способен измерить АЦП Arduino, в милливольтах.

На выходе OUT датчика ACS712, при отсутствии измеряемого тока,  должна быть половина напряжения питания, т.е. 2.5 В.

Так как вся шкала АЦП лежит в диапазоне от 0 до 1024, то при отсутствии измеряемого тока с аналогового порта Arduino считывается число 512. Это начало шкалы отсчёта.

Обозначим его value_zero. Отклонение тока value_adc от нулевого уровня в большую или меньшую сторону и будет показывать силу тока.

Следовательно, чтобы посчитать в амперах значение тока с датчика ACS712, необходимо разницу нулевого уровня и измеренного значения с аналогового порта A0 поделить на 38.

Чтобы получить ток в миллиамперах, следует умножить это значение на 1000:

I(mA) = (value_zero − value_adc) / 38 * 1000 

На практике значение на аналоговом выводе A0 не будет равняться точно 512. Поэтому, чтобы определить начало отсчёта,  в скетч  добавлена примитивная калибровку. Калибровка будет заключаться в том, что некоторое количество раз считывается значение с аналогового порта A0 при отсутствии тока на датчике ACS712, и усредняется. Нагрузка на время калибровки должна быть выключена, чтобы ток не протекал через датчик.

 


Скетч для измерения постоянного тока датчиком ACS712


const int acs712_pin = A0;

int zero; // уровень нуля, относительно которого измеряется ток, обычно VCC/2

void setup() {
Serial.begin(9600);
calibrate();
}

// определим нуль шкалы (до включения нагрузки)
void calibrate(){
zero = 0;
int repeats = 10;
for (int i=0; i<repeats; i++){
zero += analogRead(acs712_pin);
delay(100);
}
zero /= repeats; // берём среднее арифметическое
Serial.print("Zero=");
Serial.println(zero);
}

void loop() {
int sensorValue = analogRead(acs712_pin); // читаем значение с АЦП и выводим в монитор
Serial.print(sensorValue);
Serial.print(" = ");
int c = getCurrent(sensorValue); // преобразуем в значение тока и выводим в монитор
Serial.print(c);
Serial.println(" mA");
delay(100);
}

// рассчитывает ток в мА по значению с АЦП
int getCurrent(int adc) {
int delta = zero - adc; // отклонение от нуля шкалы
float scale = 37.888; // сколько единиц АЦП приходится на 1 ампер, по формуле (1)
int current = (int)delta*1000/scale; // считаем ток в мА и округляем до целых, по формуле (2)
return current;
}


 

You have no rights to post comments