Найти тему
19,9K подписчиков

Как померять ток в розетке - самодельный ~AC Амперметр на Arduino платформе

1,4K прочитали

Данное устройство предназначено для измерения действующего (эффективного) значения силы синусоидального переменного тока.

Состоит из датчика тока ACS712ELCTR-20A-T и внешнего АЦП MCP3201. Напряжение питания 5V. Может быть подключен к любой Arduino-платформе через интерфейс SPI, без необходимости адаптировать код.

  • ACS712 имеет гальваническую развязку, пробивное напряжение: 2,1кВ => можно проводить измерения в бытовой электросети ~220/380В;
  • максимальный ток измерения ~14,1А;
  • для сети ~220В максимальная мощность подключаемого электроприбора составит 3,1кВт.

Тестирование проводилось с использованием контрольного мультиметра:

Тока в цепи нет!

Самодельный амперметр показывает 0.00А
Самодельный амперметр показывает 0.00А

Понижающий трансформатор ~7V, лампа накаливания, ток в цепи 0,82A

Самодельный амперметр показывает 0.82А
Самодельный амперметр показывает 0.82А

Понижающий трансформатор ~7V, 2 лампы накаливания, ток в цепи 1,40A

Самодельный амперметр показывает 1.35А
Самодельный амперметр показывает 1.35А

Понижающий трансформатор ~7V, 3 лампы накаливания, ток в цепи 1,76A

Самодельный амперметр показывает 1.66А
Самодельный амперметр показывает 1.66А

Напряжение ~220V:

Стырено от сюда: http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:troyka-current-sensor
Стырено от сюда: http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:troyka-current-sensor

Лампа "Ильича" 95Вт. Ток в цепи 0,40А.

Самодельный амперметр показывает 0.43А*220V = 94.6Вт.
Самодельный амперметр показывает 0.43А*220V = 94.6Вт.

Электрочайник Витёк. (провода тонкие - измеряем кратковременно!!!)

Ток в цепи 7.58А. Мощность 7.58А*220V = 1667Вт или 1,67кВт.

Самодельный амперметр показывает 7.01А*220V = 1542Вт или 1,54кВт.
Самодельный амперметр показывает 7.01А*220V = 1542Вт или 1,54кВт.

На больших токах датчик подвирает больше, но можно ввести коэффициенты с скетч, а в целом результаты для пары микросхем суммарной стоимостью чуть больше 100 рублей более чем приличные.

Как это все подключено?

Дисплей и плату Arduino можно прикрутить любые - поэтому разберу работу только той части схемы, которая занимается измерениями:

Схема подключения MCP3201 и ACS712 к Arduino
Схема подключения MCP3201 и ACS712 к Arduino

У ACS712 есть скрытая, невероятная, запретная, секретная особенность про которую, вам никогда не расскажет местный дзеновский электрик от Бога. Если поиграться с микрухой с помощью ЛБП - при диапазоне входных напряжений 4....5V, при отсутствии тока в цепи - ACS712 умудряется всегда выдавать ровно половину питающего напряжения. Например:

  • при 5V на выходе будет 2.5V
  • при 4V на выходе будет 2.0V

Поэтому, напряжение с источника питания который питает Arduino-платформу, датчик и другой обвес вешаем на вход Vref внешнего АЦП. Если вместо 5.0V напряжение питания на входе чуть просядет, или будет чуть больше, показания на выходе АЦП от этого ни как не изменятся, т.е. программно-аппаратные ухищрения под напряжение конкретного источника питания больше не нужны!

Для платформы ESP32 полная схема подключения будет иметь следующий вид:

Схема тестирование самодельного Амперметра на ESP32
Схема тестирование самодельного Амперметра на ESP32

Где находятся выводы MISO и CLK для другой платформы Arduino-платформы, можно посмотреть в документации на плату.

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

Крайне нежелательно во время проведения измерений (особенно высоковольтных) питать плату от USB порта компьютера.

  • точность будет ни какая, от слова совсем. Для вывода показаний лучше использовать любой дисплей чем COM порт;
  • при неправильном подключении можно сжечь ПК, а заодно и квартиру.

Самый простой вариант - после прошивки скетча воткнуть USB кабель от Arduino-платформы в зарядное устройство для смартфона.

Как это все запрограммировано?

Время, за которое переменный ток делает одно полное туда-сюда, для частоты 50Гц составляет 20мс.

Что надо найти?
Что надо найти?

Следовательно, выполняя многократное снятие показаний с датчика минимум в течении 20мс (один период T), можно будет обязательно наткнуться на 1 максимальное(Im) и 1 минимальное(-Im) значение получаемое с выхода АЦП.

Как пересчитать значения выходного напряжения с датчика ACS712 в mA?

  • внешний АЦП MCP3201 имеет разрешение 12-bit;
  • при напряжении на входе 5000mV - значение АЦП будет 4095ед;
  • датчик тока ACS712ELCTR-20A-T имеет чувствительность 100mV/1000mA или 1mV на 10mA;
  • 5000mV*10mA = 50'000mA = 4095ед;
  • 1 ед. АЦП = 50'000mA/4095ед. = 12,21mA

Теоретически при изменении тока в цепи на значение 12,21mA, показания на выходе АЦП изменяться на 1ед. Почему теоретически? Невозможно требовать от датчика основанного на эффекте Холла и рассчитанного на максимальный ток 20А точности до десятков mA , но константа const float ACS712=12.21 потребуется для проведения расчетов, а итоговый результат разумеется придется хорошенько "огрубить"....

Зная максимальное и минимальное значения АЦП (для положительной и отрицательной полуволны соответственно), вычитая одно из другого и разделив пополам можно найти амплитудное значение переменного тока Im.

Действующее (эффективное) значение переменного тока рассчитывается по формуле:

Расчет действующего значения переменного тока.
Расчет действующего значения переменного тока.

Строки кода для расчета значения действующего значения тока будут выглядеть так:

Данное устройство предназначено для измерения действующего (эффективного) значения силы синусоидального переменного тока. Состоит из датчика тока ACS712ELCTR-20A-T и внешнего АЦП MCP3201.-12

Где sensorCurrentRMS - действующее значение переменного тока.

Именно действующее значение силы переменного тока используется для расчета мощности, автоматических выключателей, сечения кабелей - НО, это уже совсем другая история.

Гладко было на бумаге, да забыли про овраги.

В аналоговом мире не бывает ничего идеального и разумеется, что датчик основанный на эффекте Холла будет шуметь. Причины?

  • нестабильность источника питания;
  • наличие рядом с датчиком источников электромагнитных полей;
  • неведомая хрень.

Показания АЦП будут гулять в небольшом диапазоне относительно средней точки даже если к датчику не подключена нагрузка.

Алгоритм поиска максимального и минимального отклонения показаний АЦП приведет к тому, что на дисплее самодельного ампер-показометра, всегда будет отображаться некоторое значение тока, которого на самом деле в цепи нет.

Тут можно изобрести 100500 алгоритмов, но я решил использовать такой: после подачи питания (нагрузка обязательно должны быть отключена) в течении 2 секунд слушаем шум на выходе АЦП. Ищем в этом шуме максимальное и минимальное значение и сохраняем их. При проведении измерений (нас ведь интересуют только пиковые значения) все значения ниже уровня этого шума игнорируем.

Борьба с шумом
Борьба с шумом

Да, при этом мы теряем возможность измерений малых токов. Насколько малых?

Данное устройство предназначено для измерения действующего (эффективного) значения силы синусоидального переменного тока. Состоит из датчика тока ACS712ELCTR-20A-T и внешнего АЦП MCP3201.-14

Значение dA=56, соответственно, на действующее значение тока менее 0,24А эта плата реагировать не будет вообще. (мы в любом случае ничего адекватного в этом диапазоне бы и не получили).

Впрочем для сети 220V речь идет о мощности всего в 52Вт. Требовать измерения такой мощности от платы к которой можно подключить 3кВт ТЭН наверное, не очень правильно. Для малых токов имеет смысл брать ACS712ELCTR-05B-T 185mV/A, но максимальный ток (действующее значение) будет ограничен значением 3,5А, а мощность всего 777Вт.

Поскольку алгоритм поиска шума ищет максимальные значения (также как и алгоритм измерений), половину этого значения имеет смысл вычесть из итоговых показаний. Можно было бы замутить более крутой матан, но ручка от лобзика приделанная к бензопиле не превратит бензопилу в лобзик.

Итоговый код будет выглядеть следующим образом:

Данное устройство предназначено для измерения действующего (эффективного) значения силы синусоидального переменного тока. Состоит из датчика тока ACS712ELCTR-20A-T и внешнего АЦП MCP3201.-15

З.Ы. При измерении больших токов на ACS712 скорее всего придется нахлобучить внешний радиатор - обязательно проконтролируйте температуру перед длительной эксплуатацией в предельных режимах.

Скетч из этой статьи качайте по этой ссылке:

Оглавление канала доступно тут:

Всем удачи!