измерение переменного тока
измерение переменного тока
есть ESP8266 esp12f к ней через делитель подключен датчик тока ACS712 на 20А
есть модуль в модуле прописываю контакт 0 так как аналоговый вход всего один -А0
на выходе блока всегда 00.0 что бы я не делал
пробовал делать как в проекте КНС - с разными вариациями - результат - прыгают показания в очень широких пределах
читал в спецификации на модуль, что при работающем радиомодуле возможны проблемы с АЦП, пробовал отключать - результат тот же
надежды все же возлагаю на готовый блок пользователя Датчик_тока_ACS712_(CODE) - помогите его запустить на ESP8266 - что там не так?
самоделка очень простая реле, датчик тока, датчик температуры (то же блок на С - сразу нормально пошел!)
есть модуль в модуле прописываю контакт 0 так как аналоговый вход всего один -А0
на выходе блока всегда 00.0 что бы я не делал
пробовал делать как в проекте КНС - с разными вариациями - результат - прыгают показания в очень широких пределах
читал в спецификации на модуль, что при работающем радиомодуле возможны проблемы с АЦП, пробовал отключать - результат тот же
надежды все же возлагаю на готовый блок пользователя Датчик_тока_ACS712_(CODE) - помогите его запустить на ESP8266 - что там не так?
самоделка очень простая реле, датчик тока, датчик температуры (то же блок на С - сразу нормально пошел!)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
измерение переменного тока
так это же датчик холла, он не может измерять переменный ток, его от магнитного поля калбасит
ну и в есп ацп какой-то кривой что ли, неправильно напряжение измеряет после запятой, вроде погрешность 200мв была, точно не помню уже
ну и в есп ацп какой-то кривой что ли, неправильно напряжение измеряет после запятой, вроде погрешность 200мв была, точно не помню уже
измерение переменного тока
форма напряжения на выходе датчика повторяет форму тока
дело в ПО
ацп не айс это точно опорник не очень и помехи от радиочасти
все же нужно попробовать = нужно разобратся что бы блок работал с esp8266
дело в ПО
ацп не айс это точно опорник не очень и помехи от радиочасти
все же нужно попробовать = нужно разобратся что бы блок работал с esp8266
измерение переменного тока
Переменное напряжение меряется совершенно не так, как постоянка. Однозначно нужны или прерывания или большая выборка. Почитать принцип можно тут: https://habr.com/post/321008/
измерение переменного тока
как я понял в пользовательском блоке это реализовано
но не работает почему то
это то что в этом блоке - номер пина Input время выборки Interval
расчет эффективного значения и от значения АЦП - 512 - постоянное напряжение на датчике отнимается
value коэффициент для датчиков на 5 20 30а он разный
вот ссылка для информации - http://mysensors.ru/forum/viewtopic.php ... %D0%B0#p87
но не работает почему то
Код: Выделить всё
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;
вот ссылка для информации - http://mysensors.ru/forum/viewtopic.php ... %D0%B0#p87
Последний раз редактировалось qbq 17 сен 2018, 20:42, всего редактировалось 1 раз.
измерение переменного тока
Такой расчет (512- середина значений АЦП 10 бит)связан с тем, что аналоговые датчики дают половину напруги питания при нуле тока. Это позволяет отследить как положительную, так и отрицательную полуволну.
А методика расчета в кусочке программы больше похожа на поиск максимума амплитуды напряжения. Это очень неточный метод измерения тока. Потому как работает только на идеальной синусоиде. Чтобы правильно вычислить ток или напряжение нужно применять TrueRMS метод, это по сути вычисление площади, описаной кривой тока или напряжения.
А методика расчета в кусочке программы больше похожа на поиск максимума амплитуды напряжения. Это очень неточный метод измерения тока. Потому как работает только на идеальной синусоиде. Чтобы правильно вычислить ток или напряжение нужно применять TrueRMS метод, это по сути вычисление площади, описаной кривой тока или напряжения.
измерение переменного тока
да я это понимаю - я реализовать не могу
поэтому прошу помощи
нужно вычислить амплитудное значение - пусть даже для синуса дальше уже проще
там что то в коде не то
поэтому прошу помощи
нужно вычислить амплитудное значение - пусть даже для синуса дальше уже проще
там что то в коде не то
измерение переменного тока
Это надо просить кого из местных, кто шарит в Си-подобном языке Ардуины. Я сиим шаманством не владею)) Поэтому, могу помочь только с теорией и схемотехникой )
Не понятно, что такое value и мульйон и откудова они берутся
Не понятно, что такое value и мульйон и откудова они берутся
Последний раз редактировалось Skull 17 сен 2018, 22:02, всего редактировалось 1 раз.
измерение переменного тока
вот скетч из примера работает
помогите его в блок пользовательский упаковать
помогите его в блок пользовательский упаковать
Код: Выделить всё
/****************************************************************************/
// 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;
}
измерение переменного тока
Таким способом мерить переменку все равно не получится )
Это неправильное вычисление ))
Вернее, правильное, но в идеальнейшем случае )
Предполагают, что при использовании 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 чипа и будет зависеть от колебаний температуры. А вообще, для таких измерений нужен внешний источник опорного напряжения)
И вот когда это получится, кто-нибудь из местных переведет или объяснит как перевести программу в пользовательский блок.
То, что в программе сейчас- это не измеритель, а показометр. С не сильно отличающейся точностью, от результата, который Вас не удовлетворил.
Это неправильное вычисление ))
Вернее, правильное, но в идеальнейшем случае )
Предполагают, что при использовании 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 чипа и будет зависеть от колебаний температуры. А вообще, для таких измерений нужен внешний источник опорного напряжения)
И вот когда это получится, кто-нибудь из местных переведет или объяснит как перевести программу в пользовательский блок.
То, что в программе сейчас- это не измеритель, а показометр. С не сильно отличающейся точностью, от результата, который Вас не удовлетворил.
измерение переменного тока
понятно что не идеал - даже коряво можно сказать но как то работает
Отправлено спустя 25 минут 1 секунду: исправил вроде
Отправлено спустя 18 минут 17 секунд: без привязки к датчику - просто выход амплитудного значения и эффективного с выбранного AI
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
измерение переменного тока
[spoiler]
Не совсем согласен, а именно:
При питании датчика(пост 1) от того-же источника напряжения, 5 вольт, он (датчик) при нуле на входе выдаёт половину напряжения питания, какое-бы оно не было, 4-5в, середина диапазона, 512, также соответствуют Vcc/2. При понижении питания изменяется и размерность выходного напряжения мВ/А, также, как и у входного АЦП ардуинки. Как итог - почти неизменные показания при изменении питания в разумных пределах. Опорное = Vcc.
Поправьте, если не прав.
[/spoiler]Skull писал(а): 17 сен 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, если что. запомните на всякий. многие знают номер тлф.
измерение переменного тока
Поправлю)
Предложенный Вами вариант будет работать, если питание с датчика завести на ножку Aref контроллера и включить внешнюю опору. У Ардуины на нем просто висит конденсатор. Это если не учитывать разное, типа запаздывания реакции датчика на ток и ацп на дрейф напруги, кои постоянно есть в датчике из-за переменки и внутри проца при изменении тока потребления ядра )
Можете для эксперимента подключить к аналоговому входу батарейку и померить ее несколько раз при Vref=Vcc))
В лучшем случае получите неравномерность в 4 отсчета АЦП, что будет соответствовать дрейфу напряжения в 0.0195 В. Пересчитайте это в А через крутизну передачи для нужной модели ACS712.
ЗЫ. Почитайте, что у людей на постоянке от солнечной батареи происходит:
viewtopic.php?f=44&t=2723
Предложенный Вами вариант будет работать, если питание с датчика завести на ножку Aref контроллера и включить внешнюю опору. У Ардуины на нем просто висит конденсатор. Это если не учитывать разное, типа запаздывания реакции датчика на ток и ацп на дрейф напруги, кои постоянно есть в датчике из-за переменки и внутри проца при изменении тока потребления ядра )
Можете для эксперимента подключить к аналоговому входу батарейку и померить ее несколько раз при Vref=Vcc))
В лучшем случае получите неравномерность в 4 отсчета АЦП, что будет соответствовать дрейфу напряжения в 0.0195 В. Пересчитайте это в А через крутизну передачи для нужной модели ACS712.
ЗЫ. Почитайте, что у людей на постоянке от солнечной батареи происходит:
viewtopic.php?f=44&t=2723
измерение переменного тока
есть проблема
при обработке блока чтения с аналогового входа - виснет wifi!!!!!!!!!!!!!!!
пришлось мудрить с интервалами опроса - и то каждый 5-10 пинг пропадает!!!
при обработке блока чтения с аналогового входа - виснет wifi!!!!!!!!!!!!!!!
пришлось мудрить с интервалами опроса - и то каждый 5-10 пинг пропадает!!!
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя