Измерение напряжения
- Войдите на сайт для отправки комментариев
Приобрёл на алиэкспрессе "voltage sensor Vcc<25" Описание http://henrysbench.capnfatz.com/henrys-bench/arduino-voltage-measurements/arduino-25v-voltage-sensor-module-user-manual/
Сделал всё по описанию по толковой ссылке выше, после увидел такую картинку.
Напряжение у меня действительно меняется в течение суток от 12,1V до 11,3V (это АКБ с солнечной панелью). Две недели мне потребовалось на то, чтобы выяснить, что дрезебг порождает не контроллер солнечной батареи, а погрешность измерения - осциллограф никакого разброса в 0,1V не показывает, а ардуина его выдаёт при каждом обращении к `analogRead(A0);`
Простейшее усреднение не получается - сохранить все несколько десятков тысяч измерений внутри одной секунды я не могу, а если делать пропуски, то шумовые колебания сохраняются. Кто-то сталкивался с такой проблемой и поборол её?
Простейшее усреднение не получается - сохранить все несколько десятков тысяч измерений внутри одной секунды я не могу, а если делать пропуски, то шумовые колебания сохраняются.
А зачем мерить напряжение "несколько десятков тысяч раз в течение одной секунды"?
АЦП шумит. Ардуины разведены как учебные пособия, а не как измерительные инструменты. Можно еще какой-нить MAX7219 подключить напрямую и такой шабаш получить...
А зачем мерить напряжение "несколько десятков тысяч раз в течение одной секунды"?
Подскажите способ усреднения.
АЦП шумит. Ардуины разведены как учебные пособия, а не как измерительные инструменты. Можно еще какой-нить MAX7219 подключить напрямую и такой шабаш получить...
Ясно, то есть аппаратно это не решается, спасибо.
А зачем мерить напряжение "несколько десятков тысяч раз в течение одной секунды"?
Подскажите способ усреднения.
Я про то, что, а нельзя, например, 5 раз в секунду мерить? Нада обязательно несколько десятков тысяч раз?
Аппаратно как раз и решается - правильным разведением питания, применением отдельных АЦП (PCF8591), в том числе и специализированных (INA219).
А в текущем случае можно только снизить девиацию - делать перерасчёт не к 5в, а к текущему питанию (см. "секретный вольтметр на Arduino"), применением внешнего рефренсного источника напряжения (analogRefrence()) огрублением показаний и т.п.
Гуглите скользящее среднее там нужно помнить совсем немного последних значений.
Подскажите способ усреднения.
школьную математику помните? - берете 10 значений, складываете, делите на 10
Почему обязательно надо "десятки тысяч" усреднять? и с усреднением по 10 значениям получите результат сушественно лучше, чем сейчас
Я про то, что, а нельзя, например, 5 раз в секунду мерить? Нада обязательно несколько десятков тысяч раз?
На самом деле на скрине в первом фото и есть результат такого подхода - каждые 100 мс измеряется значение, потом раз в секунду все складываются и делятся на 10. Как результат - уменьшение амплитуды, но в то же время появление артефактов с провалом левее надписи "3:00 РМ" - то есть стало только хуже. @b707 - тут школьной математики недостаточно, тут вузовская специализированная дисциплина "статистика" нужна, я так тоже пробовал, есть какая-то гармоника с периодом длиннее времени съёма 10 значений и внешне результат примерно такой же. Причина - нерепрезентативная выборка, то есть школьное усреднение работает только когда _все_ значения участвуют.
@sadman41, @nik182- спасибо!
В генераторе для катушки Мишина испробовал всё, вплоть до цифровых фильтров, остановился на INA219
В генераторе для катушки Мишина испробовал всё, вплоть до цифровых фильтров, остановился на INA219
Хм, выглядит заманчиво - за ту же цену примерно в $1 я получу вместо аналогового датчика напряжения цифровой датчик и тока и напряжения и без проблем с шумом?
В генераторе для катушки Мишина испробовал всё, вплоть до цифровых фильтров, остановился на INA219
Хм, выглядит заманчиво - за ту же цену примерно в $1 я получу вместо аналогового датчика напряжения цифровой датчик и тока и напряжения и без проблем с шумом?
на токе 1 ампер пульсации в районе 4миллиампер, но это смотря какой выбрать метод усреднения (средствами INA219), по напряжению особо не заморачивался, не было надобности, одна десятая меня вполне устроила, насколько точно измеряет в цепях с постоянной нагрузкой не испытывал (шумы)
1.Возьмите голый микроконтроллер и разведите АЦП как написано в даташите (в ардуине сильно упрощено).
2. Возьмите хороший фильтр (например Чебышева 4-го порядка) с частотой среза скажем в 40 герц, чтобы отрезать помехи от сети питания и примените. Будет гладенькая кривая. Фильтр можно сделать аппаратный или программный (ссылка на программный была здесь на форуме).
1.Возьмите голый микроконтроллер и разведите АЦП как написано в даташите (в ардуине сильно упрощено).
2. Возьмите хороший фильтр (например Чебышева 4-го порядка) с частотой среза скажем в 40 герц, чтобы отрезать помехи от сети питания и примените. Будет гладенькая кривая. Фильтр можно сделать аппаратный или программный (ссылка на программный была здесь на форуме).
"Напряжение у меня действительно меняется в течение суток от 12,1V до 11,3V (это АКБ с солнечной панелью)." - ну и будет меняться. Любые наши фильтры напряжение аккумулятора не изменят. Если мы не собираемся как-то использовать результаты измерений - просто игнорировать разброс показаний, пока он в приемлемых пределах.
Был бы стрелочный вольтметр - никаких проблем не было бы...
https://ae01.alicdn.com/kf/HTB1dKV1XfjsK1Rjy1Xaq6zispXar.jpg
Аппаратно как раз и решается - правильным разведением питания, применением отдельных АЦП (PCF8591), в том числе и специализированных (INA219).
А в текущем случае можно только снизить девиацию - делать перерасчёт не к 5в, а к текущему питанию (см. "секретный вольтметр на Arduino"), применением внешнего рефренсного источника напряжения (analogRefrence()) огрублением показаний и т.п.
Приобрёл на алиэкспрессе "voltage sensor Vcc<25" Описание http://henrysbench.capnfatz.com/henrys-bench/arduino-voltage-measurements/arduino-25v-voltage-sensor-module-user-manual/
Сделал всё по описанию по толковой ссылке выше, после увидел такую картинку.
Напряжение у меня действительно меняется в течение суток от 12,1V до 11,3V (это АКБ с солнечной панелью). Две недели мне потребовалось на то, чтобы выяснить, что дрезебг порождает не контроллер солнечной батареи, а погрешность измерения - осциллограф никакого разброса в 0,1V не показывает, а ардуина его выдаёт при каждом обращении к `analogRead(A0);`
Простейшее усреднение не получается - сохранить все несколько десятков тысяч измерений внутри одной секунды я не могу, а если делать пропуски, то шумовые колебания сохраняются. Кто-то сталкивался с такой проблемой и поборол её?
"Простейшее усредненее" - двоешик! А 10% погрешности? Или Вы не на али покупали?
На самом деле на скрине в первом фото и есть результат такого подхода - каждые 100 мс измеряется значение, потом раз в секунду все складываются и делятся на 10. Как результат - уменьшение амплитуды, но в то же время появление артефактов с провалом левее надписи "3:00 РМ" - то есть стало только хуже.
Складывать можно сразу, не надо их запоминать. "Стало хуже" может у вас ошибки переполнения полезли? Давайте ваш код в студию.
На самом деле на скрине в первом фото и есть результат такого подхода - каждые 100 мс измеряется значение, потом раз в секунду все складываются и делятся на 10. Как результат - уменьшение амплитуды, но в то же время появление артефактов с провалом левее надписи "3:00 РМ"
с чего вы взяли. что провал левее надписи 3РМ - это артефакт округления? судя по масшатбу графика, длительность этого "артефакта" - минуты. если не десятки минут. совершенно очевидно, что секундное округление такого эффекта не даст. Ищите другое обьяснение этим скачкам - скорее всего физическое, если это солнечная батарея - может в это время тучка набежала или кто-то тряпку на панель повесил
Боролся c шумом так. Делаю 8 измерений, каждому измерению присваиваю номер диапазона. Каждое очередное значение измерения сравнивается с предыдущими, и если оно отличается от какого то менее чем на заданную величину, то ему присваивается тот же номер диапазона. Потом значения самого "многочисленного" диапазона усредняются.
Ну и само собой R-C фильтр никто не отменял. Но в моём случае он не спасает, сходит сума датчик тока на эффекте холла, и внешние помехи приводят к шумам сопоставимым с самим измеряемым значением.
Ну и само собой R-C фильтр никто не отменял. Но в моём случае он не спасает, сходит сума датчик тока на эффекте холла, и внешние помехи приводят к шумам сопоставимым с самим измеряемым значением.
Как-то все очень сложно. Да АЦП у ардуины не верх совершентсва, но у вас скорее проблемы в железе. При нормальных условиях и не слишком быстро меняющейся величине обычного усреднения вполне достаточно.
Во-первых ваш делитель рассчитан на 25 вольт а вы меряете в районе 12. Подберите делитель на 15 вольт. И сделайте сопротивления с минимально допустимой величиной. Высокое сопротивление на входе приводит к повышенной ловли шумов.
Во-вторых, а как именно все подключено? Длинные ли провода? Экранирование есть?
В-третьих причем здесь датчик тока? И даже если он есть, как наличие, скажем, небольшого керамического кондесатора паралельно входу АЦП может сводить сума датчик тока подключенный к другому каналу?
А у него датчик на ACS712. Он сам по себе вещь специфическая.
А у него датчик на ACS712. Он сам по себе вещь специфическая.
Вроде речь шла об измерении напряжения на аккумуляторе? Да и даже если еще меряется и ток по другому каналу, то как RC фильтр на канале напряжения повлияет на ACS712 который в другое место подключен?
1.Возьмите голый микроконтроллер и разведите АЦП как написано в даташите (в ардуине сильно упрощено).
Дайте пожалуйста ссылку на нужный даташит/схему? Я просто не могу оценить адекватность результатов поиска (я программист и совсем начинающий радиолюбитель).
"Вызывает антирес" : а на фига всё это? Только для красивой картинки?
Данные используются для построения логики т.н. "умного дома", где триггеры запускают цепочки событий. А если даже на таком низовом уровне обстакановка состоит из, как говорится в одной поговорке: "мусор на входе -> мусор на выходе", то доверять свой быт и комфорт такому интернету вещей опасно.
Складывать можно сразу, не надо их запоминать. "Стало хуже" может у вас ошибки переполнения полезли? Давайте ваш код в студию.
Спасибо за готовность читать код, общая схема подключения и простой скетч тут https://github.com/ArtHome12/ha_arduino_sh Именно на этой прошивке получен скриншот с первого поста. Как видно, там ещё есть аналогичный датчик тока с теми же болезнями. В правом нижнем углу Raspberry Pi с системой Home Assistant на борту обеспечивает доступ к данным через интернет и обновление на лету прошивки ардуины ну и другое.
с чего вы взяли. что провал левее надписи 3РМ - это артефакт округления? судя по масшатбу графика, длительность этого "артефакта" - минуты. если не десятки минут. совершенно очевидно, что секундное округление такого эффекта не даст. Ищите другое обьяснение этим скачкам - скорее всего физическое, если это солнечная батарея - может в это время тучка набежала или кто-то тряпку на панель повесил
Сорри что я сразу не пояснил - часовой пояс на скрине сильно сдвинут и провал происходил спустя несколько часов после наступления полной темноты. Я и сам удивлён, возможно это действительно обусловлено каким-то физическим процессом, но просто доверия к показаниям сейчас нет и раньше подобного не видел...
vlad072 - спасибо за алгоритм, как я понял из обсуждения, сначала сделаю упор в аппаратную часть, а потом недостигнутое буду допиливать алгоритмически.
Дайте пожалуйста ссылку на нужный даташит/схему? Я просто не могу оценить адекватность результатов поиска (я программист и совсем начинающий радиолюбитель).
Самое лучшее решение -даже не вытравить свою плату с грамотными разведёнными аналоговыми цепями. Лучшее решение существенно проще -купите нормальный модуль. Монитор тока и напряжения INA226 идеален для вашей задачи. Имеет свой внутренний референс, 16 бит дельта-сигма АЦП, входное напряжение до 36 вольт без всяких делителей. Ток измеряет как в минусовой цепи так и в плюсовой. И всего 100 рублей.
Самое лучшее решение -даже не вытравить свою плату с грамотными разведёнными аналоговыми цепями. Лучшее решение существенно проще -купите нормальный модуль. Монитор тока и напряжения INA226 идеален для вашей задачи. И всего 100 рублей.
это да, по видимому еще и мощность считает )))
dimax, ua6em Спасибо, заказал
общая схема подключения тут https://github.com/ArtHome12/ha_arduino_sh
общая схема подключения тут https://github.com/ArtHome12/ha_arduino_sh
Громоздко нарисовано или неграмотно скоммутировано?
http://we.easyelectronics.ru/Theory/chestno-prostoy-cifrovoy-filtr.html
Нормально все усредняется. На моем стабилизаторе сетевого напряжения скачет не более 1 МЗР (около 0.5В при диапазоне до 400В).
Частота выборок около 1 ksps, постоянная фильтра около 0,5сек.
общая схема подключения тут https://github.com/ArtHome12/ha_arduino_sh
Громоздко нарисовано или неграмотно скоммутировано?
RC-фильтры не должны влиять на показания на чужих пинах.
/2 в файле ha_arduino_sh.ino
перед считыванием напряжения и тока (строки 102 и 103) поставь аналогреад с соответствующих пинов без использования считанных значений.
И константа 25.0 в стр. 137 весьма сомнительна.
Да и даже если еще меряется и ток по другому каналу, то как RC фильтр на канале напряжения повлияет на ACS712 который в другое место подключен?
Я же не пишу, что на него именно RC влияет. Просто этот ACS712 реагирует на всё подряд.