Датчик переменного тока ZMTC103C

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Добрый день. 

Ни кто не сталкивался, а лучше не запускал сам датчик переменного тока ZMTC103C?

С виду все просто, пропустил фазу, подал 5В, снимаем в А0 (например) показания с OUT.

Но при выводе в сериал, например сначала выдает 700 и показания начинают медленно падать с каждой секундой, подаем ток, показания взлетают дергаясь, и при выключении опять вниз медленно...

В общем пару дней GOOGLa и экспериментов не дали ничего, подключал второй датчик, поведение то-же.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Как подключен? Скетч?

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Как подключен: VCC - 5V с ардуино, GRD - GRD с ардуино, OUT - A0

Скетч (было много экспериментов, но для простоты только что залил стандартный пример ReadAnaogVoltage)

Итог: В сериале 1.20, включаю 2,5A показания дергаются до 0,4 на один показатель и опять несколько показаний 1.20, пока нагрузка включена появляются 0.4 иногда и опять в основном 1.20... ощущения синусоиды.

p.s. пока писал, нагрузка была выключена, стало через 3 минуты 1.30 потом 1.40 и растет медленно. Пощелкал выключателем еще несколько раз и похоже что показания холостого хода увеличиваются при каждом включении выключении... сейчас уже 1.49 

Обновление: через 20 минут уже холостой 1.75 - точно при каждом включении холостой ход выдает все больше вольт в A0

void setup() {
  Serial.begin(9600);
}
 
void loop() {
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.0 / 1023.0);
  Serial.println(voltage);
}
 
asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Так не получится. Ток же переменный, а датчик дает мгновенные значения. Нужно считывать с равномерными промежутками раз 5000 в секунду и считать RMS

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Спасибо за направление! Пойду учить мат.часть. 

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

timheadman пишет:

Спасибо за направление! Пойду учить мат.часть. 

 

можно использовать emonlib

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Большое спасибо !

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Итог: подключил библиотеку EMONLIB.

Несколько попыток подключится по стандартным пинам: значения прыгают, нулевое значение от 0 до 0.4 (иногда выше), вроде все показывает, подобрал коэффициент в библиотеке, порадовался прыгающим, но хоть каким то вмеяемым значениям, но поставив ток не 2,5A а 0,4A - тут же обнаружил что выводится полная шляпа. Попытка играть с переменным резистором не привела к уcпеху. Пока взял таймаут...

Подключился напрямую к трансформатору, ради эксперимента, так как на плате должен быть вроде как установлен резистор между ножками, воткнул напрямую в GRD и А0. И с коэффициентом 93 в EMONLIB при 2,5A вывел более или менее нормальные значения.

НО !!! В амперах, по мультиметру (выдает катушка ZMTC103): 4,5 (3,5); 2,5 (2,49); 0,44 (0,52) - явное расхождение при уменьшении и увеличении тока. А самое прикольное, я использовал ФЕН в качестве нагрузки и ставил положение спирали 0-1-2 (0,44А-2,5А-4,5А). Но как только включил увеличение ОБОРОТОВ не трогая спираль, произошло следующее - мультиметр (ZMTC103) 0,44 (0,52) - 0.7 (1,5).

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

timheadman пишет:

Как подключен: VCC - 5V с ардуино, GRD - GRD с ардуино, OUT - A0

А может просто попробовать правильно подключить? Тогда и библиотеки не нужны. Хотя emonlib не помешает, там вроде всё нормально сделано.

SLKH
Offline
Зарегистрирован: 17.08.2015

ЕвгенийП пишет:

timheadman пишет:

Как подключен: VCC - 5V с ардуино, GRD - GRD с ардуино, OUT - A0

А может просто попробовать правильно подключить? Тогда и библиотеки не нужны. Хотя emonlib не помешает, там вроде всё нормально сделано.

У ТС модуль: трансформатор тока с операционником и обвязкой. Подключение emonlib на этой стадии (не посмотрев, что же именно модуль выдает) вряд ли приведет чему-нибудь хорошему - скорее всего, начнется унылое бессмысленное тыкание с попыткой подобрать коэффициенты. Было уже подобное в теме "Приоритезация нагрузок".

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Евгений, я видел данную схему.

Сейчас просто порассуждаю, не более, как дилетант.

1. Схему видел.

2. ZMTC103C существует с обвязкой и без. Данная схема, на сколько я понимаю, для отдельного трансформатора. У меня вариант с обвязкой. Как на фото в самом первом посту ... Есть такой материал, весьма скупой, как раз там и про emonlib тоже и про версии датчиков.

https://innovatorsguru.com/zmct103c/

3. Может я ошибаюсь и это и для моего тоже ? Не знаю. Я любитель. Моих знаний не хватает.

 

ЕвгенийП пишет:

А может просто попробовать правильно подключить? Тогда и библиотеки не нужны. Хотя emonlib не помешает, там вроде всё нормально сделано.

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Если кто нибудь из ГУРУ (без сарказма) в Москве, могу подарить один датчик для опытов :) Если кому конечно интересно. Территориально в центре на Таганке.

Интересно разобраться, да и материалов по данной теме почти ноль. 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

timheadman пишет:

Итог: подключил библиотеку EMONLIB.

Несколько попыток подключится по стандартным пинам: значения прыгают, нулевое значение от 0 до 0.4 (иногда выше), вроде все показывает, подобрал коэффициент в библиотеке, порадовался прыгающим, но хоть каким то вмеяемым значениям, но поставив ток не 2,5A а 0,4A - тут же обнаружил что выводится полная шляпа. Попытка играть с переменным резистором не привела к уcпеху. Пока взял таймаут...

Ну где-скетч? Какой смысл обсуждать неведомо что?

SLKH
Offline
Зарегистрирован: 17.08.2015

timheadman пишет:

Если кто нибудь из ГУРУ (без сарказма) в Москве, могу подарить один датчик для опытов :) Если кому конечно интересно. Территориально в центре на Таганке.

Интересно разобраться, да и материалов по данной теме почти ноль. 

если действительно интересно разораться - для начала посмотрите на осциллограмму на выходе модуля.

и оставьте в покое упомянутую библиотеку. возможен возврат к ней - но потом.

материалов по теме "измерение переменного тока" почти ноль? полагаете, до вас не измеряли?

Dmitryms1
Offline
Зарегистрирован: 14.10.2020

Добрый день. Вы же фен в 220 включили? Значит ток через него идет синусом (относительно нуля). Сначала верхний полупериод, потом нижний и так с частотой 50 Гц. Если посмотрите осциллографом на катушке, то увидите 50 Гц огибающую которая заполнена более высокими гармониками. Естественно, такой хаос Дунька не переварит. Для этого посмотрите на схему. Она собрана на аперационном усилителе - там 2 ОУ в одном корпусе. На этих ОУ собраны 2 фильтра нижних частот соединенных последовательно. Один отсекает высокие гармоники, а второй делает сигнал ближе к меандру. Поэтому при Вашем включении на выходе получаем меандр 50 гц. Но он также симметричен относительно нуля. Правильнее сигнал пропускать через диодный мост и интегрировать его (например RC цепочкой). Тогда получим сигнал 0...5в пропорциональный току.

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Dmitryms1 пишет:
Добрый день. Вы же фен в 220 включили? Значит ток через него идет синусом (относительно нуля). Сначала верхний полупериод, потом нижний и так с частотой 50 Гц. Если посмотрите осциллографом на катушке, то увидите 50 Гц огибающую которая заполнена более высокими гармониками. Естественно, такой хаос Дунька не переварит. Для этого посмотрите на схему. Она собрана на аперационном усилителе - там 2 ОУ в одном корпусе. На этих ОУ собраны 2 фильтра нижних частот соединенных последовательно. Один отсекает высокие гармоники, а второй делает сигнал ближе к меандру. Поэтому при Вашем включении на выходе получаем меандр 50 гц. Но он также симметричен относительно нуля. Правильнее сигнал пропускать через диодный мост и интегрировать его (например RC цепочкой). Тогда получим сигнал 0...5в пропорциональный току.

Вот это ответ! Супер!
Есть о чем подумать и что поковырять.
Пойду разбираться.
Dmitryms1 большое спасибо!

OK0
Offline
Зарегистрирован: 06.03.2020

timheadman пишет:
Вот это ответ! Супер!

Согласен!

А если серьезно - в чем проблема? На входе ток меняется  от минус корень квадратный от 2 умноженный на I до  корень квадратный от 2 умноженный на I. По синусоиде.

На выходе (в идеале, после подстройки)  напряжение меняется от 0 (соответствует току минус корень квадратный от 2 умноженный на I) до 2,5 вольта (в нашем случае)(соответствует току  корень квадратный от 2 умноженный на I). По синусоиде. Когда мгновенное значение тока равно нулю, напряжение на выходе равно 1,25 вольта.

Сделайте analogRead и сразу вывод в Serial.

void loop() {
    Serial.println(analogRead(A0));
}

Включите  Arduino IDE "плоттер по последовательному соединению" - увидите синусоиду...

 

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

И вновь, что то для меня новое и интересное!
Большое спасибо.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Dmitryms1 пишет:
Для этого посмотрите на схему. Она собрана на аперационном усилителе - там 2 ОУ в одном корпусе. На этих ОУ собраны 2 фильтра нижних частот соединенных последовательно. Один отсекает высокие гармоники, а второй делает сигнал ближе к меандру.

Если ОУ делает сигнал ближе к меандру, то это уже не ФНЧ, а усилитель-ограничитель. А при ограничении теряется информация об амплитуде исходного сигнала.

Цитата:

Правильнее сигнал пропускать через диодный мост и интегрировать его (например RC цепочкой). Тогда получим сигнал 0...5в пропорциональный току.

Пропорциональный исходному току уже не получим из-за ограничения сигнала.

Goudwinn
Offline
Зарегистрирован: 26.11.2020

Всем здрасте. Скажите, указанный в начале статьи датчик можно использовать отдельно как индикатор перегрузки:  Iном=1a, Iсраб~1.5a? И для чего там переменный резистор?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Goudwinn пишет:

И для чего там переменный резистор?

А тему почитать не судьба? В посте #16 подробно написано что и как им регулируют.

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Всем привет. Пол года были не простые и руки ни как не доходили. В последние пару дней, сел разбираться, перечитав все вышеописанное, что мне категорически помогло и всем ОГРОМНОЕ СПАСИБО! Повесил на выход  ZMTC103C вольтметр и включил лампу на 125мА, отрегулировал резистором выход до 0,125V. Подключил библиотеку EMONLIB, И все заработало! Добавил еще одну лампочку и о чудо 0,249А. Работает? Ан нет.

Включил прибор с потреблением 1,8А, и тут ждало разочарование, показал 1,025A, а амперметр верные 1,8А.

#include <Arduino.h>
#include "EmonLib.h"

EnergyMonitor emon1;

void setup(void)
{
  Serial.begin(115200);
  emon1.current(0, 1); // Пин, Коэф.клибровки = 1 так как zmct103c регулируется 1В = 1А резистором.
}

void loop(void)
{
  double Irms = emon1.calcIrms(1480); // Calculate Irms only
  Serial.print(Irms, 3); // Выводим три знака после запятой
  Serial.println("A");
}

 

OK0
Offline
Зарегистрирован: 06.03.2020

 timheadman, попробуйте ответить (себе) на вопросы:

1. Какое напряжение показывает вольтметр при токе равном 0 (ноль)?

2. Какое напряжение должен показывать вольтметр при токе равном 0 (ноль)?

3. Как изменяется напряжение на выходе модуля за период 1/50 секунды при измерении тока (из розетки) через лампочку?

4. Каким вольтметром можно измерять напряжение на выходе модуля при калибровке?

5. Если аналоговый вход (АЦП) ардуины - это и есть вольтметр, зачем цеплять на выход еще один прибор (который вы вольтметром называете)?

 

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Я снова направили и снова спасибо.

На вскидку нет ответа на вопрос 2.

В остальном мерил мультиметром в режиме вольтметра подрежим AC. Утрировал до вольтметра - понимаю был не прав. 5. Верно, по сути это перебор. Оставил мультиметр в схеме в качестве АС амперметра.

Надо переварить.

OK0
Offline
Зарегистрирован: 06.03.2020

 timheadman,  не надо ничего переваривать. Пост №16. Там всё написано. (В теме много всякой откровенной чуши, поэтому оценку поста 16, со стороны взрослых, можно посмотреть в посте №20). Про вольтметр - забудьте (оффтоп: что бы измерить (действующее) напряжение на выходе модуля нужен RMS вольтметр. Если всё в порядке, его показания будут всегда одинаковыми, они не зависят от силы тока "на входе"). Нас интересуют только мгновенные значения напряжения.

Dmitryms1
Offline
Зарегистрирован: 14.10.2020

timheadman пишет:

Всем привет. Пол года были не простые и руки ни как не доходили. В последние пару дней, сел разбираться, перечитав все вышеописанное, что мне категорически помогло и всем ОГРОМНОЕ СПАСИБО! Повесил на выход  ZMTC103C вольтметр и включил лампу на 125мА, отрегулировал резистором выход до 0,125V. Подключил библиотеку EMONLIB, И все заработало! Добавил еще одну лампочку и о чудо 0,249А. Работает? Ан нет.

Включил прибор с потреблением 1,8А, и тут ждало разочарование, показал 1,025A, а амперметр верные 1,8А.

#include <Arduino.h>
#include "EmonLib.h"

EnergyMonitor emon1;

void setup(void)
{
  Serial.begin(115200);
  emon1.current(0, 1); // Пин, Коэф.клибровки = 1 так как zmct103c регулируется 1В = 1А резистором.
}

void loop(void)
{
  double Irms = emon1.calcIrms(1480); // Calculate Irms only
  Serial.print(Irms, 3); // Выводим три знака после запятой
  Serial.println("A");
}

 

 

Я не стал использовать шилд целиком и сделал упрощенную схему. На 16 18 подключается сам датчик тока. Далее диоды отсекают отрицательную полуволну. Далее положительные волны поступают на сглаживающий RC фильтр. С его выхода снимаем напряжение пропорциональное току. Инерция фильтра есть, но зато пульсации сглажены.У меня такая схема исправно уже 3й месяц мониторит насосы в многоквартирном доме.

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Интересное решение ! 

Моих знаний - "на повторить", может и хватит :)

А инерция есть и у самого датчика.

 

Webmon
Offline
Зарегистрирован: 27.10.2018

Разработал схему преобразования переменного сигнала в TTL с данного модуля. Т.е. Есть нагрузка на выходе +5В, нет - 0

Кому нужно пользуйтесь - собрано, проверенно. https://oshwlab.com/sulagaev/extension-for-binary-output

Webmon
Offline
Зарегистрирован: 27.10.2018

Так же пришлось перерисовать схему самого модуля, пока пытался понять как это чудо заставить работать нужным мне образом. Так же расшарил - https://oshwlab.com/sulagaev/current_sensor_zmct103c_lm358

Alex_Mn
Offline
Зарегистрирован: 07.05.2021

Webmon пишет:

Так же пришлось перерисовать схему самого модуля, пока пытался понять как это чудо заставить работать нужным мне образом. Так же расшарил - https://oshwlab.com/sulagaev/current_sensor_zmct103c_lm358

тоже искал схемку этого модуля, но и эта схема корявая даже видно сразу. зачем пускать постоянный ток через трансформатор тока. R3 - обмотка - R2.

правильно так: R2 R3 это делитель и задает  среднею точку как все обмотки, так и напряжение ОУ вывод 3.

R3 подключен: верхний вывод подается +5в.    нижний вывод на R2 и вывод 3 U1.1 постоянный ток не течет через обмотку и не должен.

 

Webmon
Offline
Зарегистрирован: 27.10.2018

Alex_Mn пишет:

зачем пускать постоянный ток через трансформатор тока. R3 - обмотка - R2.

правильно так: R2 R3 это делитель и задает  среднею точку как все обмотки, так и напряжение ОУ вывод 3.

R3 подключен: верхний вывод подается +5в.    нижний вывод на R2 и вывод 3 U1.1 постоянный ток не течет через обмотку и не должен.

R2-R3 создает смещение, R1 - гасящий резистор.

Alex_Mn
Offline
Зарегистрирован: 07.05.2021

Webmon пишет:

Alex_Mn пишет:

зачем пускать постоянный ток через трансформатор тока. R3 - обмотка - R2.

правильно так: R2 R3 это делитель и задает  среднею точку как все обмотки, так и напряжение ОУ вывод 3.

R3 подключен: верхний вывод подается +5в.    нижний вывод на R2 и вывод 3 U1.1 постоянный ток не течет через обмотку и не должен.

R2-R3 создает смещение, R1 - гасящий резистор.

ну так и исправь корявую схему.

Webmon
Offline
Зарегистрирован: 27.10.2018

Alex_Mn пишет:

ну так и исправь корявую схему.

Мне тебе в голову залезть?

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Всем привет! 
Отдельное спасибо всем тем, кто с пониманием и спокойствием отвечал и участвовал в обсуждении:
Dmitryms1, SLKH, ЕвгенийП, OK0, Webmon, adriano, asam
* простите если кого забыл упомянуть... Ребята вы молодцы, большое Вам спасибо !
Вы вдохновили меня открыть что то большее для себя и что-то очень интересное.
Я только в начале, но чувствую уже небольшой прогресс!
Итак. Прошел ГОД ! Я не оставлял эту затею и время от времени возвращался и пытался разобраться.
Купил осцилограф :) FNIRSI-5012H потрясающая игрушка и сразу стало понятно, что без него у меня бы не получилось продвинуться ни на шаг :)
* могу повторить мысли и объяснения ребят которые тут все уже рассказали, просто рассказываю о своих продвижениях.
Замеры OUT модуля дали понимание что выход дает волну относительно нуля, амплитуда управляется переменным резистором на плате и при этом в определенный момент волна сверху начинает срезаться чем больше повышаешь сопротивление тем больше срез (с этим еще предстоит разобраться).
Так же стало понятно что подключать модуль напрямую не получится, нужно подавать на аналоговый вход 0В - 5В, а модуль выдает синусоиду с отрицательными значениями (уже описывалось Dmitryms1и Webmon). 
Пощупал сам, понял, осознал... что и хотел. Далее решил пойти с другой стороны!
В итоге один модуль был разобран и вытащил чистую катушку, собрал схему
которую выложил ЕвгенийП. Единственное рассчитал Burden Resistor (R6) в схеме указан 33 Ом, калькулятор https://tyler.anairo.com/projects/open-energy-monitor-calculator дал 165 Ом (* для справки ZHT103 имеет 1000 витков т.е. Ratio 1000:1), поставил 150 Ом. Все работает.

Проверил на нагрузке 120-250-480mA - отображение корректное плюс минус 10mA. Заметил что без нагрузки, время от времени возникают всплески доходящие до 90mA, откуда они и как с этим бороться ... не знаю пока.

#define PIN_ZHT103 A7
uint32_t timer = millis();
uint16_t max = 0;
uint16_t min = 4096;
uint8_t zero = 20; // поправочный коффициент (сколько катушка выдает в пин без нагрузки)
float k = 1.29;    // коэффициэнт подобран под резистор 152 Ом

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  uint16_t valueA = analogRead(PIN_ZHT103);
  max = valueA > max ? valueA : max;
  min = valueA < min ? valueA : min;

  if (millis() - timer > 1000)
  {
    uint16_t vpp = (max - min) > zero ? (max - min) - zero : zero - (max - min);
    Serial.print(valueA, DEC);
    Serial.print(" (");
    Serial.print(max, DEC);
    Serial.print(", ");
    Serial.print(min, DEC);
    Serial.print(") ");
    Serial.print("CUR: ");
    Serial.print(vpp * 2 * k, 0);
    Serial.println("mA");
    max = 0;
    min = 4096;
    timer = millis();
  }
}

Друзья, если я где-то не верно , что-то для себя понял, сделал неверные выводы и т.д. пожалуйста исправляйте!

Интересная статья: https://lemzspb.ru/transformator-toka-dlya-arduino/

timheadman
timheadman аватар
Offline
Зарегистрирован: 11.10.2020

Совсем забыл. Выше просили показания модуля ZMTC103C.


Ток примерно 470мА (потенциометром подогнал VPP примерно под это значение, просто для информации...).
Верно ли я понял, то что на выходе полная волна относительно нуля ? Т.е. если максимально выкрутить потенциометр то (если не брать в расчет искажения волны) то напряжение скачет от 2.5В до -2.5В? 
Что не приемлемо для аналогового входа контроллера ?

Alex_Mn
Offline
Зарегистрирован: 07.05.2021

timheadman пишет:

Ток примерно 470мА (потенциометром подогнал VPP примерно под это значение, просто для информации...).

Верно ли я понял, то что на выходе полная волна относительно нуля ? Т.е. если максимально выкрутить потенциометр то (если не брать в расчет искажения волны) то напряжение скачет от 2.5В до -2.5В? 
Что не приемлемо для аналогового входа контроллера ?

 

выход через разделительный конденсатор отсюда "относительно" отсутствует. чтоб задать "относительно" чегото необходимо на входе аналогового входа контролера задать делитель в 2.5В. и волна станет от 0В до 5В. что приемлемо для контроллера.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

аналогично сделано для напряжения в ZMTP101B, регулировкой уровня добиваются чтобы при максимальном ожидаемом напряжении диапазон выходного напряжения не выходил за пределы 0 - 5 вольт

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Del