измерение переменного тока

Ответить
qbq
Рядовой
Сообщения: 10
Зарегистрирован: 24.08.2016{, 20:09}
Репутация: 0

измерение переменного тока

#1

Сообщение qbq » 16.09.2018{, 19:40}

есть ESP8266 esp12f к ней через делитель подключен датчик тока ACS712 на 20А

есть модуль
Датчик_тока_ACS712_(CODE).ubi
(24.07 КБ) 114 скачиваний
в модуле прописываю контакт 0 так как аналоговый вход всего один -А0
на выходе блока всегда 00.0 что бы я не делал

пробовал делать как в проекте КНС -
kns.jpg
с разными вариациями - результат - прыгают показания в очень широких пределах

читал в спецификации на модуль, что при работающем радиомодуле возможны проблемы с АЦП, пробовал отключать - результат тот же
надежды все же возлагаю на готовый блок пользователя Датчик_тока_ACS712_(CODE) - помогите его запустить на ESP8266 - что там не так?


самоделка очень простая реле, датчик тока, датчик температуры (то же блок на С - сразу нормально пошел!)

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

измерение переменного тока

#2

Сообщение kalobyte » 16.09.2018{, 22:41}

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

qbq
Рядовой
Сообщения: 10
Зарегистрирован: 24.08.2016{, 20:09}
Репутация: 0

измерение переменного тока

#3

Сообщение qbq » 16.09.2018{, 23:41}

форма напряжения на выходе датчика повторяет форму тока
дело в ПО

ацп не айс это точно опорник не очень и помехи от радиочасти

все же нужно попробовать = нужно разобратся что бы блок работал с esp8266

Аватара пользователя
Skull
Лейтенант
Сообщения: 424
Зарегистрирован: 08.09.2015{, 16:18}
Репутация: 4
Откуда: Мариуполь

измерение переменного тока

#4

Сообщение Skull » 17.09.2018{, 18:17}

Переменное напряжение меряется совершенно не так, как постоянка. Однозначно нужны или прерывания или большая выборка. Почитать принцип можно тут: https://habr.com/post/321008/

qbq
Рядовой
Сообщения: 10
Зарегистрирован: 24.08.2016{, 20:09}
Репутация: 0

измерение переменного тока

#5

Сообщение qbq » 17.09.2018{, 20:04}

как я понял в пользовательском блоке это реализовано

но не работает почему то

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

int sensorValue;
    int sensorMax = 0;
    uint32_t start_time = millis();
    while((millis()-start_time) < Interval)
    {
        sensorValue = analogRead( Input );
        if (sensorValue > sensorMax) 
        {
          sensorMax = sensorValue;
        }
    }
    return sensorMax;

это то что в этом блоке - номер пина Input время выборки Interval

расчет эффективного значения и от значения АЦП - 512 - постоянное напряжение на датчике отнимается

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

if ( EN ) {
int sensor_max;
    sensor_max = getMaxValue();
    amplitude =(float)(sensor_max-512)/1024* value *1000000;
    effective = amplitude /1.414;
value коэффициент для датчиков на 5 20 30а он разный





вот ссылка для информации - http://mysensors.ru/forum/viewtopic.php ... %D0%B0#p87
Последний раз редактировалось qbq 17.09.2018{, 20:42}, всего редактировалось 1 раз.

Аватара пользователя
Skull
Лейтенант
Сообщения: 424
Зарегистрирован: 08.09.2015{, 16:18}
Репутация: 4
Откуда: Мариуполь

измерение переменного тока

#6

Сообщение Skull » 17.09.2018{, 20:31}

Такой расчет (512- середина значений АЦП 10 бит)связан с тем, что аналоговые датчики дают половину напруги питания при нуле тока. Это позволяет отследить как положительную, так и отрицательную полуволну.
А методика расчета в кусочке программы больше похожа на поиск максимума амплитуды напряжения. Это очень неточный метод измерения тока. Потому как работает только на идеальной синусоиде. Чтобы правильно вычислить ток или напряжение нужно применять TrueRMS метод, это по сути вычисление площади, описаной кривой тока или напряжения.

qbq
Рядовой
Сообщения: 10
Зарегистрирован: 24.08.2016{, 20:09}
Репутация: 0

измерение переменного тока

#7

Сообщение qbq » 17.09.2018{, 20:46}

да я это понимаю - я реализовать не могу
поэтому прошу помощи


нужно вычислить амплитудное значение - пусть даже для синуса дальше уже проще

там что то в коде не то

Аватара пользователя
Skull
Лейтенант
Сообщения: 424
Зарегистрирован: 08.09.2015{, 16:18}
Репутация: 4
Откуда: Мариуполь

измерение переменного тока

#8

Сообщение Skull » 17.09.2018{, 21:58}

Это надо просить кого из местных, кто шарит в Си-подобном языке Ардуины. Я сиим шаманством не владею)) Поэтому, могу помочь только с теорией и схемотехникой )
Не понятно, что такое value и мульйон и откудова они берутся
Последний раз редактировалось Skull 17.09.2018{, 22:02}, всего редактировалось 1 раз.

qbq
Рядовой
Сообщения: 10
Зарегистрирован: 24.08.2016{, 20:09}
Репутация: 0

измерение переменного тока

#9

Сообщение qbq » 17.09.2018{, 22:00}

вот скетч из примера работает

помогите его в блок пользовательский упаковать

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

/****************************************************************************/
 // Function: Measure the amplitude current of the alternating current and
 // the effective current of the sinusoidal alternating current.
 // Hardware: Grove - Electricity Sensor
 // Date: Jan 19,2013
 // by www.seeedstudio.com
 #define ELECTRICITY_SENSOR A0 // Analog input pin that sensor is attached to
 float amplitude_current; //amplitude current
 float effective_value; //effective current
 void setup()
 {
 Serial.begin(9600);
 pins_init();
 }
 void loop()
 {
 int sensor_max;
 sensor_max = getMaxValue();
 Serial.print("sensor_max = ");
 Serial.println(sensor_max);
 //the VCC on the Grove interface of the sensor is 5v
 amplitude_current=(float)sensor_max/1024*5/800*2000000;
 effective_value=amplitude_current/1.414;//minimum_current=1/1024*5/800*2000000/1.414=8.6(mA)
 //Only for sinusoidal alternating current
 Serial.println("The amplitude of the current is(in mA)");
 Serial.println(amplitude_current,1);//Only one number after the decimal point
 Serial.println("The effective value of the current is(in mA)");
 Serial.println(effective_value,1);
 }
 void pins_init()
 {
 pinMode(ELECTRICITY_SENSOR, INPUT);
 }
 /*Function: Sample for 1000ms and get the maximum value from the SIG pin*/
 int getMaxValue()
 {
 int sensorValue; //value read from the sensor
 int sensorMax = 0;
 uint32_t start_time = millis();
 while((millis()-start_time) < 1000)//sample for 1000ms
 {
 sensorValue = analogRead(ELECTRICITY_SENSOR);
 if (sensorValue > sensorMax)
 {
 /*record the maximum sensor value*/
 sensorMax = sensorValue;
 }
 }
 return sensorMax;
 }

Аватара пользователя
Skull
Лейтенант
Сообщения: 424
Зарегистрирован: 08.09.2015{, 16:18}
Репутация: 4
Откуда: Мариуполь

измерение переменного тока

#10

Сообщение Skull » 17.09.2018{, 22:27}

Таким способом мерить переменку все равно не получится )
Это неправильное вычисление ))
Вернее, правильное, но в идеальнейшем случае )
Предполагают, что при использовании analogRead () аналоговое опорное напряжение равно 5.0В, но в действительности оно может быть другим.
на разных ПК при питании от USB напряжение пина 5V на Arduino составляет около 4.5В; при питании от аккумулятора типа «Крона» (8.4В) — 4.97В. А измерения в представленном коде пляшут от питания, как опорного напряжения.
Можно использовать встроенный опорный генератор. , предварительно его откалибровав.
Делается это так:
Сначала устанавливаем опорное (reference) напряжение в значение Vcc
Измеряем внутреннее опорное напряжение
Рассчитываем величину Vcc
Наше измеренное напряжение:
Vcc * (АЦП-измерение) / 1023
которое, как мы знаем равно 1.1В. Согласно даташиту на ATMEGA 328 оно может быть равно:
минимально 1.0В,
обычно 1.1В,
максимально 1.2В.
Далее рассчитываем Vcc и получаем:
Vcc = 1.1 * 1023 / АЦП-измерение
Другими словами, вся фишка в том, чтобы выяснить реальное напряжение питания Vcc, читая internal 1.1V reference и используя Vcc в качестве эталона. Затем с помощью простой математики высчитываем реальное Vcc.Это эталонное значение будет индивидуальным для конкретного AVR чипа и будет зависеть от колебаний температуры. А вообще, для таких измерений нужен внешний источник опорного напряжения)

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

qbq
Рядовой
Сообщения: 10
Зарегистрирован: 24.08.2016{, 20:09}
Репутация: 0

измерение переменного тока

#11

Сообщение qbq » 17.09.2018{, 23:50}

датчик_тока_(CODE).ubi
(22.1 КБ) 96 скачиваний
вот что слепил

понятно что не идеал - даже коряво можно сказать но как то работает

Отправлено спустя 25 минут 1 секунду:
Датчик_тока_ACS712work_(CODE).ubi
(25 КБ) 122 скачивания
исправил вроде

Отправлено спустя 18 минут 17 секунд:
максимальное_с_AI_(CODE).ubi
(24.01 КБ) 113 скачиваний
без привязки к датчику - просто выход амплитудного значения и эффективного с выбранного AI

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

измерение переменного тока

#12

Сообщение Sancho » 18.09.2018{, 08:00}

СпойлерПоказать
Skull писал(а):
17.09.2018{, 22:27}
Предполагают, что при использовании analogRead () аналоговое опорное напряжение равно 5.0В, но в действительности оно может быть другим.
на разных ПК при питании от USB напряжение пина 5V на Arduino составляет около 4.5В; при питании от аккумулятора типа «Крона» (8.4В) — 4.97В. А измерения в представленном коде пляшут от питания, как опорного напряжения.
Можно использовать встроенный опорный генератор. , предварительно его откалибровав.
Делается это так:
Сначала устанавливаем опорное (reference) напряжение в значение Vcc
Измеряем внутреннее опорное напряжение
Рассчитываем величину Vcc
Наше измеренное напряжение:
Vcc * (АЦП-измерение) / 1023
которое, как мы знаем равно 1.1В. Согласно даташиту на ATMEGA 328 оно может быть равно:
минимально 1.0В,
обычно 1.1В,
максимально 1.2В.
Далее рассчитываем Vcc и получаем:
Vcc = 1.1 * 1023 / АЦП-измерение
Другими словами, вся фишка в том, чтобы выяснить реальное напряжение питания Vcc, читая internal 1.1V reference и используя Vcc в качестве эталона. Затем с помощью простой математики высчитываем реальное Vcc.Это эталонное значение будет индивидуальным для конкретного AVR чипа и будет зависеть от колебаний температуры. А вообще, для таких измерений нужен внешний источник опорного напряжения)

И вот когда это получится, кто-нибудь из местных переведет или объяснит как перевести программу в пользовательский блок.
То, что в программе сейчас- это не измеритель, а показометр. С не сильно отличающейся точностью, от результата, который Вас не удовлетворил.
Не совсем согласен, а именно:
При питании датчика(пост 1) от того-же источника напряжения, 5 вольт, он (датчик) при нуле на входе выдаёт половину напряжения питания, какое-бы оно не было, 4-5в, середина диапазона, 512, также соответствуют Vcc/2. При понижении питания изменяется и размерность выходного напряжения мВ/А, также, как и у входного АЦП ардуинки. Как итог - почти неизменные показания при изменении питания в разумных пределах. Опорное = Vcc.
Поправьте, если не прав.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Skull
Лейтенант
Сообщения: 424
Зарегистрирован: 08.09.2015{, 16:18}
Репутация: 4
Откуда: Мариуполь

измерение переменного тока

#13

Сообщение Skull » 18.09.2018{, 08:49}

Поправлю)
Предложенный Вами вариант будет работать, если питание с датчика завести на ножку Aref контроллера и включить внешнюю опору. У Ардуины на нем просто висит конденсатор. Это если не учитывать разное, типа запаздывания реакции датчика на ток и ацп на дрейф напруги, кои постоянно есть в датчике из-за переменки и внутри проца при изменении тока потребления ядра )
Можете для эксперимента подключить к аналоговому входу батарейку и померить ее несколько раз при Vref=Vcc))
В лучшем случае получите неравномерность в 4 отсчета АЦП, что будет соответствовать дрейфу напряжения в 0.0195 В. Пересчитайте это в А через крутизну передачи для нужной модели ACS712.
ЗЫ. Почитайте, что у людей на постоянке от солнечной батареи происходит:
viewtopic.php?f=44&t=2723

qbq
Рядовой
Сообщения: 10
Зарегистрирован: 24.08.2016{, 20:09}
Репутация: 0

измерение переменного тока

#14

Сообщение qbq » 21.09.2018{, 07:08}

есть проблема

при обработке блока чтения с аналогового входа - виснет wifi!!!!!!!!!!!!!!!

пришлось мудрить с интервалами опроса - и то каждый 5-10 пинг пропадает!!!

aidar_i
Полковник
Сообщения: 3126
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

измерение переменного тока

#15

Сообщение aidar_i » 21.09.2018{, 08:50}

Почитайте
здесь
Последний раз редактировалось aidar_i 21.09.2018{, 10:11}, всего редактировалось 1 раз.

Ответить

Вернуться в «Помогите, а то я "нимагу"»