POWER MONITOR на Arduino

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: POWER MONITOR на Arduino

Сообщение Alex » Ср фев 10, 2016 11:28 pm

Я настроил Power Monitor и он корректно работал в диапазоне 40 Вт — 25кВт. Но когда я сделал сетевой осциллограф в АМС, то увидел такую картину.

Я так понял, что алгоритм просто убрал смещение и более-менее коректно работал на суженном динамическом диапазоне (синие стрелки).
Вложения
pm.jpg
ПМ
pm.jpg (19.01 КБ) 10577 просмотров
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: POWER MONITOR на Arduino

Сообщение serghei » Ср фев 10, 2016 11:49 pm

Вообще-эти строчки-цифровой фильтр высоких частот.На сайте ОЕМ расписана вся математика.
Разработчику это надо выучить наизусть.
http://openenergymonitor.org/emon/build ... et-removal
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: POWER MONITOR на Arduino

Сообщение serghei » Чт фев 11, 2016 12:09 am

При использовании 100 амперного ТТ и 10-и битного АЦП 100/512=0.19 ампера*220=42,96 ватта.
Это младшая единица измерения.Дальше 84....
С дуей полегче. допустим 20 ампер/2048=0.0097*220=2.1 ватта. Это уже веселее.
Вот поэтому даже в дешёвых китайских счетчиках применяют 16-и разрядные АЦП и максимум 16 ампер.....
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: POWER MONITOR на Arduino

Сообщение Alex » Чт фев 11, 2016 8:49 am

Ну хорошо, давайте разберёмся. Строчки

Код: Выделить всё

prevFilteredUI[U] = filteredUI[U];
filteredUI[U] = 0.996 * (prevFilteredUI[U] + sampleUI[U] — prevSampleUI[U]);  
достались нам в наследство от BATONS и они достаточно корректно работают. На сайте я вижу другой код.

Код: Выделить всё

long shiftedFCL = shifted_filter + (long)((sample-last_sample)<<8);
shifted_filter = shiftedFCL — (shiftedFCL>>8);
long filtered_value = (shifted_filter+128)>>8;
Значит ли это, что код BATONS недостаточно корректен и его нужно заменить на новый?

И второй вопрос. Вы пишите, что очень важно точно выставить 2.5 вольта, а у меня (см. рисунок выше) не то что 2.5 вольта не выставлено (512), а весь синус колеблется между 650 и 850. Учитывая, что даже при таком безобразии всё меряется более-менее корректно (в диапазоне 40 Вт — 25 кВт) не совсем понятно вот это
а програмно мы убрали 2.5.....дальше математика скетча честно отработает
программно мы убрали не 2.5 , а любое смещение. Если бы код убирал 2.5, то у меня корректно не то что в диапазоне 40 Вт — 25 кВт не мерилось, а вообще бы ничего не работало с таким смещением. И вот код, который работает в АМС

Код: Выделить всё

prevFilteredUI[U] = filteredUI[U];
filteredUI[U] = 0.996 * (prevFilteredUI[U] + sampleUI[U] — prevSampleUI[U]); 
где же здесь убирание 2.5 вольта?
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: POWER MONITOR на Arduino

Сообщение serghei » Чт фев 11, 2016 10:47 am

Вообще-то с PowMon-ом все намного запущенее)). Уважаемый BATONS написал правильный код,но решает задачу в "лоб".
Ребята с сайта описали алгоритм специально для ардуины ,но всё это запаковали в библиотеку.И теперь скетч просто выводит
значения токов и напряжения так-же как с библиотекой DHT и датчиками.
Я не уверен нужно-ли это описывать здесь на форуме или лучше в личку.
Кусок приведенного кода это маленькая часть большого цифрового фильтра (которые я учил лет 30 назад) назначение
которого из лавины синусоидальных значений получить прямую линию,померить её и сказать-у нас 221 вольт(или столько-то
ампер).А чтобы она была более-менее прямой "колбасить" надо(синусоиду) 8196 раз!(тогда проще с математикой).
Вот тут объясняется что произойдет ,если мы сместим 0 хотя-бы на 1 единицу.
http://openenergymonitor.org/emon/build ... ent-values
А если на 10? В двух словах-если верхняя часть синусоиды будет 400,а нижняя 600-получится большая погрешность.
Тут человек построил РМ на 12 линий,но мощи Меги не хватило))
http://boredomprojects.net/index.php/pr ... gy-monitor
P.S. Для себя я пришел к выводам:

1. Скетч BATONS отличный!
2.Весь РМ надо вынести на отдельную машину (пусть АМС занимается сетевыми функциями и получает
данные от РМ по сетке-АМС-у намного полегчает). Как зто реализовать я пока не знаю-но научусь!
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: POWER MONITOR на Arduino

Сообщение Alex » Чт фев 11, 2016 12:44 pm

А что насчёт моего вопроса из предыдущего поста? Фильтр

Код: Выделить всё

prevFilteredUI[U] = filteredUI[U];
filteredUI[U] = 0.996 * (prevFilteredUI[U] + sampleUI[U] — prevSampleUI[U]);  
убирает 2.5В или любое смещение?
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: POWER MONITOR на Arduino

Сообщение serghei » Чт фев 11, 2016 1:15 pm

The Atmega ADC (Arduino) has an input voltage range of 0 to Vcc and so when sampling an AC waveform the waveform needs to be biased at Vcc / 2. This translates to a digital offset value of approximately 512. The waveform sample digital value will be between 0 and 1023, centered around 512.

To do the maths for real power, rms voltage and current calculations, we need remove this offset. This can be done with a digital filter. There are two approaches: the high pass filter, which allows the high frequency component through removing the bias, or the low pass filter, which first finds the bias, then subtracts the bias from the signal. Let's start with the high pass filter.

Digital high pass filter
The floating point implementation looks like this:

filtered_value = 0.996 × (last_filtered_value + sample - last_sample)

Why 0.996? It is not a magic number, all that is required is a number reasonably close to unity in order to provide an adequately long time constant so there is some phase and amplitude distortion at the 50 Hz fundamental frequency being measured. 0.996 yields a filter time constant of 250 sample periods.


Это выдержка с сайта ОЕМ . Пока не научился правильно вставлять сообщения))) что в автоматическом переводе-


Почему 0,996? Это не магическое число, все, что требуется, это число достаточно близко к единице, чтобы обеспечить достаточно долгого времени постоянную поэтому есть некоторые фазы и амплитуды искажений на 50 Гц основной частоты измеряется. 0,996 дает постоянную времени фильтра 250 периодов выборки.


И дальше расписывается весь алгоритм. Вообще надо спросить у BATONS как он написал код.Я встречал-но не найду где.


http://openenergymonitor.org/emon/build ... et-removal
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: POWER MONITOR на Arduino

Сообщение Alex » Чт фев 11, 2016 3:35 pm

Вообще надо спросить у BATONS
В данном случае нет необходимости беспокоить BATONS, и без него очевидно, что убирается любое смещение.

Почему я об этом так настойчиво спрашивал? Потому, что если убирается любое смещение, то прецизионно выставлять 2.5 вольта не обязательно — фильтр всё равно приведёт к средней точке. Другое дело, что сузится динамический диапазон и ухудшится точность, это да.
pastry777
Сообщения: 81
Зарегистрирован: Пт окт 02, 2015 7:47 pm
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: POWER MONITOR на Arduino

Сообщение pastry777 » Чт фев 11, 2016 8:31 pm

кстати да,я положил функции расчета напряжения и тока на ардуино про мини и передаю уже по i2c на мегу...ибо опрос двух аналоговых портов с такой частотой добавил к моему скетчу почти +3сек на круг...это очень много...так я его и разгрузил...
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: POWER MONITOR на Arduino

Сообщение Alex » Чт фев 11, 2016 9:48 pm

кстати да,я положил функции расчета напряжения и тока на ардуино про мини и передаю уже по i2c на мегу...ибо опрос двух аналоговых портов с такой частотой добавил к моему скетчу почти +3сек на круг...это очень много...так я его и разгрузил...
Можно и отдельный контроллер для ПМ. В АМС количество циклов уменьшено до 400 — задержка на 14 каналов — 0.8 секунды, кажется. Не очень правильно, конечно, но для бытовых нужд нормально.
Ответить