Измерение и контроль протекающего тока являются принципиальным требованием для широкого круга приложений, включая схемы защиты от перегрузки по току, зарядные устройства, импульсные источники питания, программируемые источники тока и пр.
Спецификация (Datasheet)
Датчик тока ACS712 20А основан на эффекте Холла и позволяет в аналоговом режиме определять силу тока до ± 20 А. В зависимости от включения может замерять от 0 до 20 А или от 0 до -20 А. Выходное напряжение на выводе OUT пропорционально току. При измерении переменного тока есть нюансы – поскольку в этом случае в зависимости от периода синусоиды ток будет меняться при замерах в разное время показания будут отличаться, для корректного измерения нужно делать замеры в пиковой точке синусоиды.
Датчик имеет 3 вывода:
- VCC – «плюс» питания;
- GND – «минус» питания, общий провод, «земля»;
- OUT – выход для отправки данных на управляющее устройство.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
const int acs712_pin = A0; // Количество единиц АЦП на 1 ампер рассчитывается по формуле: ЧУВСТВИТЕЛЬНОСТЬ * 1024 / 5000 const int SCALE_5A = 37.88; // чувствительность 5-амперного модуля — 185 мВ/А const int SCALE_20A = 20.48; // чувствительность 20-амперного модуля — 100 мВ/А const int CSALE_30A = 13.5168; // чувствительность 30-амперного модуля — 66 мВ/А int zero; // уровень нуля, относительно которого измеряется ток, обычно VCC/2 float scale = SCALE_20A; // выбираем для работы подходящее значение void setup() { Serial.begin(9600); // определение напряжения на A0 без нагрузки 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; // отклонение от нуля шкалы int current = (int)delta*1000/scale; // считаем ток в мА и округляем до целых return current; } |
Спецификация (Datasheet)