Как и обещал, модифицировал версию своего измерителя электроэнергии. Доработал схему и упростил код, работать стало значительно лучше. Вс подробности ниже.
Translation to English is here. Также основной канал в telegram.
В прошлой статье я описал способ изготовления такого устройства и отдельно сделал статью по коду для него. На всякий случай, вот ссылки на эти публикации:
Все работало и можно было воспользоваться девизом "и так сойдет", однако меня тревожил и внешний вид готового устройства, отсутствие защит и качество измерения. Давайте взглянем на демонтированное изделие:
Пиком инженерной мысли назвать это сложно, но для экспериментального образца вполне сойдет. Первым делом я решил облагородить провода. Идея была хорошая, но я поторопился, позже пришлось все разобрать и заново собрать...
Теперь по поводу торчащих во все стороны резисторы... Я писал, что моя ESP32 очень старая и, подобно esp8266, входы АЦП воспринимают напряжение в пределе 0-1.1В. Говорят, что в последних ревизиях ESP32 АЦП замеряет до ~4В, но у меня таких нет, проверить не могу.
Первое, что требовалось исправить - источник опорного напряжения. Это при помощи двух одинаковых резисторов было легко получить половинку от 3.3В, а теперь нам надо получить ~0.55В. Рассчитывать резистивный делитель и искать у себя подходящие номиналы - я не желал. Использовать переменный резистор я не желал еще больше, т.к. они имеют особенность со временем "плыть". Идеально было бы взять стабилитрон, но его у меня не было, зато были обычные выпрямительные диоды. напомню, что на диоде, как и на других полупроводниках, происходит падение напряжения, как раз в пределах десятых долей. В блоках питания это свойство для нас является преградой, потерей КПД и источником дополнительного нагрева, а вот в микроэлектронике это свойство часто применяют именно для понижения напряжения или для ограничения его максимального значения, например в тех же GSM модулях ставят по 2 диода с падением 0.4В и тем самым получают 4.2В из 5В на входе. Я решил, что стоит попробовать имеющиеся у меня диоды и посмотреть на то, какое на них падает напряжение. Схема для теста используется следующая:
Работает она ну очень просто. Конденсатор заряжается через резистор R6 и в нормальной жизни должен зарядить конденсатор C1 за некоторое время (его мы рассчитывать не будем, т.к. смысла для нас не имеет). Как только напряжение на конденсаторе достигнет напряжения падения на диоде, он откроется и начнет пропускать ток через себя. Таким образом, напряжение на конденсаторе не превысит напряжение падения на диоде. Резистор должен быть достаточно большим, чтобы ограничить ток через диод, но не на столько большим, чтобы емкость не зарядилась (внутри нее тоже есть паразитное сопротивление, которое разряжает конденсатор). Естественно, я взял резисторы на 2,4 кОм (кто читает меня давно тот знает эту историю), а диод 1N4007, просто потому что был. Проверил схему в работе и насладился удачей:
Замер показал 0,604В. Это конечно не 0,55В, но я считаю, что это лучшее из возможного. Далее проверяем схему в действии и накидываем АЦП ESP32 вместо мультиметра. Для этого добавим в код следующие строки:
- platform: adc
pin: A0
name: "A0"
raw: true
accuracy_decimals: 0
unit_of_measurement: /4095
update_interval: 5s
Теперь с пина А0 нам будет отображаться значение в сыром формате, т.е. в пределах 0-4095 единиц, где 4095 соответствует 1.1В. Подключаем и смотрим:
Получим 2085 из 4095. Отлично, это конечно не 2048, но меня такой результат более чем устраивает. Теперь будем эмулировать схему, подключим наш источник опорного напряжения на вход каждого АЦП:
Забавное обстоятельство, при запуске ESP, первые значения были для всех АЦП одинаковы и равнялись 2064, а затем поплыли в предел 2090-2095 для всех входов. Но, меня все устраивает, а это значит, что можно двигаться дальше.
Схема новая ниже, а этапы ее сборки следом.
Отпаиваем все с платы → Напаиваем источник опорного напряжения → подрезаем провода → напаиваем резисторы назад → припаиваем их на плату → общую точку трансформаторов припаиваем к "источнику опорного напряжения" → упаковываем все в термоусадку для надежности → замеряем напряжение, которое идет к трансформатору (оно почти идеально, я знаю☺)
Теперь мне нужно добавить дополнительный функционал для моего устройства. для этого мне потребуется пин GPIO на плате. Для этого я обратился к таблице "esp32 pin table", которых в любом поисковике огромное количество и выбрал нейтральный пин 16, который не моргает при загрузке и не требует никаких подтяжек. Для ESP8266 такая таблица тоже имеется. "Функционал", который будет возложен на этот пин я раскрою позже, это будет версия 2.1.
Теперь, когда все собрано, можно устройство отправлять на рабочее дежурство, но мне покоя не давала другая проблема: защита от КЗ и пусковых токов. В статье, ссылку на которую я привел ниже рассказано про проблемы:
Так вот, при токе в 10А на наше АЦП придет 0,5В, это мы уже обсуждали, а если мы включим что-то низкокачественное с пусковыми токами в 10 раз больше? Правильно, трансформатор тока все нам покажет и на долю секунды на АЦП прилетит не 1В, а в несколько раз больше. А еще в сети, кроме основной синусоиды, которую мы замеряем, есть и гармоники. Я все это к тому, что напряжение свыше 1В на входе АЦП может оказаться без проблем. Резисторы 2.4 кОм, которые я ставлю по входу каждого АЦП должны защитить цепь, но нельзя полагаться только на них не хочется. Вернемся в начало статьи, где я рассказывал про волшебные свойства диодов... Напряжение на трансформаторе тока не должно превышать 0.5В, что соответствует 10А, а диод пропускает через себя все, что свыше 0,6В. Будем использовать те же диоды, но теперь для защиты входов микроконтроллера. Исправим схему на следующую:
Надеюсь, ошибок не допустил. Как только на одном из трансформаторов величина напряжения превысит 0,6В, ток пойдет через диоды и тем самым обрубит амплитуду сигнала. Измерения такого тока мы, конечно, не получим, но и цель стоит далеко не в этом. Естественно, что в вашем случае, если измерение происходит в других пределах, то и диоды потребуются другие. Напаиваем все и собираем:
Теперь включаем и смотрим на результаты. В прошлый раз, когда я собрал устройство, мне пришлось калибровать каждый сенсор, снимая по 6-7 точек. В этот раз результаты сырых измерений говорят нам, что рассчитанный ток в 20 раз меньше, чем измеренный:
Если задуматься, то так и должно быть: Когда ESP рассчитывает ток, то 1В, вероятнее всего, соответствует 1А. У нас при 1А на трансформаторе будет 1мА, что даст на резисторе сопротивлением 52Ом 0,052В, что примерно в 20 раз меньше. Все сходится.
Получается, что теперь вместо огромных таблиц калибровки мы можем использовать одну строчку и все сразу заработаем:
- platform: ct_clamp
sensor: adc_6
name: "conditioner living room"
update_interval: 10s
filters:
- multiply: 20
accuracy_decimals: 5
id: measured_current6
device_class: current
Приписав - multiply: 20 вместо полиномиальной калибровки мы получаем сразу отличный и главное правильный результат.
На этом считаю вторую версию законченной, надеюсь, что на этот раз я получил действительно хорошее решение и переделывать больше ничего не придется. Всем добра.
Подпишитесь, чтобы не пропускать следующий контент.
Нажмите лайк, если интересно, так я пойму какие публикации больше нужны моей публике.
Также публикации можно найти на других площадках: Instagram, telegram (RU, EN, DE), Medium, LiveJournal, YouTube.
Мой блог является некоммерческим, поэтому позитивный комментарий, лайк или репост поможет публикациям выходить чаще ☺.