Несложно мониторить энергопотребление с использованием инвазивных (нужно испортить электрический кабель) способов снятия информации:
- Сенсоры на основе эффекта Холла. См. статью про использование чипа ACS712. Встраивается в разрыв одного провода в кабеле.
- Трансформатор напряжения. Провод разрезать не требуется, однако нужно разрезать оболочку кабеля, чтобы повесить трансформатор тока на один проводник. Стоимость трансформатора тока, особенно разъемного, довольно высокая.
В некоторых случаях для мониторинга энергопотребления устройств хочется использовать простой и недорогой сенсор, не требующий порчи кабеля для подключения, а, соответственно, более безопасный для монтажников и требующий минимальное время для инсталляции.
Очевидно, что в качестве такого сенсора может выступать катушка индуктивности. Наведенное электромагнитное поле, усиленное операционнным усилителем и поданное на АЦП может быть проанализировано микроконтроллером.
На просторах Интернет нашел статью с подробными результатами замеров подобного неинвазивного детектора тока. Поскольку автор в описании упустил ряд моментов, немного дополню его статью и переведу основные моменты.
Схемотехника
В схеме используются следующие компоненты:
- Операционный усилитель OP07C. Цена 0,8 USD за 10 шт. Заказывал здесь.
- Неэкранированная катушка индуктивности. Брал набор 50 шт. различных катушек по цене меньше 4,5 USD для тестирования различных вариантов здесь. Из минусов — катушки не маркированные. 🙁
- АЦП ADS1115 16 bit в данном проекте избыточен, но с ним удобно работать. Приобретен на Aliexpress. Цена порядка 1.5 USD. Использую плату вишневого цвета. Она компактнее.
- Микроконтроллер MH ET Live Mini ESP32 приобретал на Aliexpress по цене 5 USD с доставкой. Мне нравится этот вариант исполнения, хотя он не пригоден для беспаечных плат прототипирования.
Замер электромагнитного поля неразделенных проводов фазы и нейтрали — сложная задача, поскольку происходит практически полная взаимная компенсация полей. С одним проводом было бы проще, но не так интересно. При наличии высокочувствительного усилителя задача неинвазивного детектирования потребляемой мощности решаема. Я оттестировал схему автора, мои результаты совпадают с его информацией.
Тесты в статье проводились на кабеле с нагрузкой 230V (переменное напряжение).
Эксперименты
Опущу вводную часть экспериментов. Она подробно рассмотрена в статье.
Для нагрузки 1000 Вт при использовании катушки индуктивности 100 uH. Нагрузка включалась на 20 мс. Отсчеты снимались с интервалом 1 с. Коэффициент усиления Aᵥ=1424.24 .
- (1) Aᵥ=470, L=100µH,
- (2) Aᵥ=1424.24, L=100µH,
- (3) Aᵥ=1424.24, L=10mH
Видно, что наибольший уровень сигнала при использовании индуктивности на 10 mH, но есть сдвиг по фазе.
При оптимальном размещении катушки индуктивности по отношению к кабелю датчик в состоянии определять нагрузку от 15 Вт. Уровень нужно калибровать для каждого прибора, разещения датчика и типа кабеля. Однако после того как датчик жестко закреплен в определенном положении на кабеле показания датчика стабильные.
Показания датчика, к сожалению, не совсем линейно зависят от нагрузки. Так что использовать для точных измерений датчик нельзя. На графике показано выходное напряжение в зависимости от мощности нагрузки именяемой от 4 Вт до 1160 Вт.
Зависимость от положения датчика
Кау уже упоминалось ранее, от положения датчика на кабеле значительно зависит напряжение на выходе операционного усилителя.
На графике показаны результаты измерения выходного напряжения в зависимости от позиции датчика на кабеле. Производились 10 измерений с шагом в 45 градусов. Нагрузка 1000Вт, Aᵥ=1424.24, L1 = 100µH. Кабельдиаметром 8 мм, с проводами фаза, нейтраль и земля.
Максимальное выходнео напряжение получается при угле в 180°. При 90° результаты наихудшие.
На диаграмме направленности показан уровень напряжения на выходе операционного усилителя в зависимости от положения катушки индуктивности относительно 3-х проводного кабеля с шагом в 5°.
3-х проводный кабель круглый, поэтому размещение катушки на кабеле несложно. Замеры на 2-х проводном кабеле были более сложные из-заовольной формы кабеля. Этим объясняются некоторые искажения в замерах. Кроме того 2-х проводный кабель запитывался нагрузкой в 20 Вт, а 3-хпроводный — 1000 Вт.
Подключение неинвазивного дачика тока к ADS1115 (16bit ADC)
Схема присоединения несложная. Используется аналоговый вход ADS1115 A0. Питание всей схемы от USB порта микроконтроллера ESP32. На ESP32 вход SCL — GPIO22, SDA — GPIO21.
Программный код несложный. Расчет Vrms и соответствующего тока взят из моей статьи про снятие потребления с помощью ACS712.
Тонкий момент в схеме — приведение показаний АЦП к потребляемому току Irms. Я тестировал схему на электрочайнике с энергопотреблением ~8А, замеренный Uni-T UT61E.
- Мощность потребления немного скачет, поэтому эта нагрузка не лучший вариант для точной калибровки.
- У схемы есть шум. Его можно устранять аппаратно (в схему добавлена емкость на вход АЦП) или программно, усреднением и пр. подходами.
- Величина напряжения зависит от размещения датчика на кабеле. Поэтому только после жесткой фиксации датчика, например, стяжкой, можно проводить калибровку.
Сначала mVperAmp устанавливаем равным 1 и снимаем показания на выходе АЦП. По результатам измерений у меня получилось, что 8А примерно соответствует 668 mV показаний ADC. Соответственно, коэффициент mVperAmp = 668/8.
#include <Adafruit_ADS1015.h> Adafruit_ADS1115 ads(0x48); void setup() { Serial.begin(9600); ads.setGain(GAIN_ONE); // +/- 4.096V 1 bit = 0.125mV ads.begin(); } #define ADCSamples 65536.0 //16 bit ADC #define OneSampleVolt 0.125 //+/- 4.096V 1 bit = 0.125mV//0.1875F; #define ZeroCorrection 0 float mVperAmp = 668.0/8.0; //8A corresponds 688 mV double Vrms = 0; double AmpsRMS = 0; double Vpeak = 0; uint32_t start_time = 0; int readValue = 0; int maxValue = 0; int minValue = ADCSamples; void loop() { if (millis() - start_time < 250) { double readValue = ads.readADC_SingleEnded(0); //16 bits ADC read of input A0 maxValue = (readValue > maxValue) ? readValue : maxValue; minValue = (readValue < minValue) ? readValue : minValue; } else { Vpeak = (maxValue - minValue)/2 * OneSampleVolt; Vrms = Vpeak * 0.707; AmpsRMS = Vrms/mVperAmp - ZeroCorrection; Serial.println("Amps RMS: " + String(AmpsRMS)); maxValue = 0; minValue = ADCSamples; start_time = millis(); } }
Для теста электрочайник включался три раза. На графике видно, что неинвазивный датчик тока хорошо детектирует моменты включения и вполне стабильно показывает энергопотребление в районе 8А.
Полезные ссылки
- https://github.com/Warlib1975/non-invasive-current-sensor-ADS1115-ESP32 — программный код для считывания данных с неинвазивного датчика тока.
- https://hackaday.io/project/15574-energy-harvesting-sensors-for-assisted-living/log/46594-non-invasive-current-detection
- https://habr.com/ru/post/260639/
- https://electronics.stackexchange.com/questions/37095/level-shifting-a-2-5v-signal-to-0-5v — смещение постоянного уровня на операционном усилителе
- https://vk.com/video-155579868_456239051?list=ln-74bbS7bzeYNc5KZLFi
- Китайский датчик тока на эффекте Холла MagnTek MT9523 аналог ACS712.
- Европейский датчик тока на эффекте Холла Melexis MLX91220 5V аналог ACS712.
- Европейский датчик тока на эффекте Холла Melexis MLX91221 3.3V аналог ACS712.
- Китайский датчик тока на эффекте Холла Сhenyang CYHCS91X.
- Китайский датчик тока на эффекте Холла Novosens NSM2012-20B5R-DSPR .
- Китайский датчик тока на эффекте Холла Cosemi CH701 аналог ACS712. Cosemi CH701 datasheet.