Экономный делитель напряжения
Vložit
- čas přidán 19. 08. 2024
- Простой способ экономии энергии батареи при использовании резистивных делителей напряжения за счет коммутации земли на втором плече делителя.
Код из видео: github.com/Moo...
Обзор мультиметра Venlab VM-600M: • Обзор мультиметра Venl... - Věda a technologie
Конечно нужно продолжение. Очень интересно. Знания лишними не бывают.
Поддерживаю. Я тоже ЗА.
Однозначно интересно!
Интересная тема, хотелось бы продолжение🙏💪
Да!
Еще бы это сформировать в блок для FLprog! Было бы замечательно!
Спасибо за видео! Очень интересно посмотреть более сложный вариант!
Тема энергосбережения очень интересна, спасибо. Очень жду продолжения
👍3:51 Чтоб не искать резисторы можно:
1) припаять последовательно еще один, который компенсирует различия;
2) надфилем подточить пленку, которая нанесена между медными электродами на керамическую трубку;
3) покупать сопротивление с малым разбросом.
6:20 Можно поставить полевой транзистор на плюс питания, который будет включать питание делителя.
10:42 Никогда не делайте 1 замер (на любом ADC). Всегда нужно делать несколько и среднее значение использовать.
можно добавить стабилитрон или диод, он, конечно, повлияет на точность, но можно увеличить измеряемое напряжение.
Надфилем подточить имхо лучший вариант, надо только 0805е использовать💪
Для транзистора надо ещё одну ногу? Их мало
Вот интереснен вариант подавать на ацп через резистор + стабилитрон/диод. При очень малых токах напряжение зависеть будет думаю в основном от внешней температуры🤔 Но это смотря какая точность нужна и в каких условиях + возможно надо калибровать. Но для чего вот нужны измерения батарейки? Если просто отключить прибор или подать сигнал, то вполне сойдёт нелинейная зависимость, но тоже надо менять на входе такого делителя напряжение и подбирать пороги. На авр по крайней мере можно считывать и обрабатывать просто в целых числах, потом сравнивать, > 160 норм < 120 выключаем🤔🤔🤔🤔🤔🤔🤔
@@v61kz Для транзистора надо ещё одну ногу, которую автор использует на схеме (6:20 Можно поставить полевой...). Через транзистор можно будет пропускать любое напряжение, а не только толерантное для микроконтроллера. И на делителе делать 5-10 замеров, высчитывая среднее.
Стабилитрон/диод для защиты от высокого напряжения и обратной полярности можно поставить(между ADC и минусом питания), но они будут жрать батарейку из-за токов утечки. Пропадет смысл всей экономии. Например у 1N4728A REVERSE LEAKAGE CURRENT составляет 100μA, что на порядок больше, чем расчеты автора 4:56
@@Drmidon обратной полярностью диод - это АЦП не сможет замерять высокое напряжение всё равно?
Всё-таки с транзистором мне кажется прям лучший вариант👍 Занята нога, но зато нулевое потребление🤔 Только надо подобрать низковольтный🤔🤔
@@v61kz 1) Возможно только 3,3v измерять максимум. Делитель из резисторов нужен, чтоб можно было замерять высокое напряжение. Там можно хоть 220v постоянки замерять, достаточно поставить 100:1 делитель из резисторов. Например 10мегаОм:100килоОм позволит измерять до 330v постоянки.
2) Диод/стабилитрон нужен только для защиты ноги контроллера ADC, иначе при скачке напруги более чем задумано или обратной полярности(подать минус вместо плюса), нога или весь МК выгорает без диода.
3) Ногу уже автор занял 5:23 , так что осталось припаять транзистор с логическим управлением(logic level mosfet) перед ногой ADC и после резистора R1. Правда там будут вопросы:"можно ли его будет открыть". Обычно исток мосфета должен без сопротивлений быть соединен к минусу(N-канальный) или плюсу(P-канальный). Но затвор должен быть подключен наоборот, чтоб открыть транзистор. По этому лучше поставить немного резисторов и 2 транзистора. Чтоб один P-канальный разрывал плюс питания, а второй(логический N-канальный) его открывал(вторым управлять ножкой МК). Иначе при закрытии P-канального мосфета затвор должен находиться на плюсе питания и МК выгорит, если подать на его ножку большое положительное напряжение.
Продолжение интересно. Расскажите, пожалуйста.
Нужно продолжение. Спасибо
Спасибо. Продолжение нужно, очень интересно.
все, что касается экономии при батарейном питании - очень интересно.
Спасибо за видео. Обязательно нужно продолдение.
Отличное решение! Спасибо большое.
Спасибо! Пожалуй, использую идею при модернизации своей поделки, питающейся от солнечной батареи
очень интересно хочу продолжения
Жду продолжения.
Тема мониторинга батарейки актуальная всегда и как никогда кстати. Я бы очень хотел увидеть разные варианты и подходы в одном большом ролике чтобы на месте принять решение о том какое собсно решение может подойти для проекта. Я вот сейчас думаю одну тему для себя, где CR2032 вероятно будет, вот так смотрю просто пару резисторов воткнуть непозволительная роскошь для такой батарейки. Поэтому прошу раскройте тему.
Мне было бы интересно послушать про дополнительное энергосбережение. Интересно, почему решение не универсальное?
Потому что только при использовании ULP pull-up и pull-down можно коммутировать не будя основное ядро.
Конечно интересно 👍
При измерении АЦП вроде заряжает свою небольшую внутреннюю ёмкость, возможно за отведённое на измерение время она не успевает полностью зарядится через высокоомные резисторы, отсюда и заниженные показания. Попробуйте поставить паралельно резистору R2 конденсатор небольшой ёмкости.
Буду рад, если появтся продолжение этой темы. Спасибо.
Несколько измерений подряд должны (ИМХО) нивелировать эту проблему.
По крайней мере мое устройство для водосчетчиков сбрасывает ежедневно одно и то же значение, редко (раз-два в неделю) -0.01 В, но чаще один в один, что немного обнадеживает. :)
Нет, внутри микроконтроллеров дельта-сигма ацп.
Значит врет дока от производителя, утверждая про АЦП последовательного приближения в ESP32. :)
И конденсатора для удержания заряда во время измерения там нет? Странно, но мой ролик про тач-интерфейс на ESP32-C3 как раз на этом конденсаторе и основан... :)
@@alexmorozov73 да, маху дал, но упомянутый выше АЦП "на конденсаторе" это интегрирующий, а не последовательного приближения.
Удержание заряда обычно реализуется не просто конденсатором, а более сложной схемой с ОУ в составе. Но RC на входе, адекватный полезной скорости изменения сигнала лишним не будет.
Это прекрасно, и ведь просто, логично. Но это же догадаться нужно. Хотя та же динамическая индикация с коммутацией земли дело имеет...
Спасибо за ваш труд. По мимо прочего, будет интересна реализация подсчёта импульсов и на других распространённых МК. Было бы здорово сравнить хотябы с ардуино на SAMD21, и с использованием отдельного счётчика с последующим его чтением.
Пытался сделать делитель на внутреннем pull-up резисторе, но у меня вылезли проблемы с повторяемостью. С удовольствием послушал бы как ету проблему решил профессионал
Может быть все-таки на "pull-down" резисторе?
Если изделие штучное, много одинаковых клепать не надо, можно не подбирать одинаковые резисторы, а поставить многооборотистый подстроечник, и вручную выставить его как угодно, хоть и пополам. После корпусирования он будет недоступен для регулировки, и сбит не будет.
Интересно конечно!
1.битрейт это частота, а речь шла о разрядности.
2.описанное усреднение называется медианным.
3. Арифметическое среднее в таких задачах общепринято и используется даже внутри ацп, аппаратно.
4. Насколько мне известно, у всех гпио защитные диоды есть повсеместно, и коммутация земли на делителе вопрос энергосбережения решит не полностью, так как вход будет сливаться на Vcc.
Резисторы в резисторной сборке имеют очень близкое сопротивление из них можно получить хороший делитель.
на входе АЦП нужен конденсатор, скажем в сотку нанофарад, лучше пленочный не керамику, или если есть возможность управлением временем семплирования АЦП поставить пго из расчёта времени заряда мемплирующего конденсатора АЦП.
Литиевые аккумы имеют довольно стабильное напряжение и к сожалению степень разряда от напряжения можно определить очень и очень примерно.
Мне важно напряжение на батарее не для высчитывания сферических в вакууме процентов заряда, а чтобы если я вижу 2.7 В, то завтра показаний может не быть.
Очень надо!
Есть программы, измеряющие напряжение питания на основе измерения внутреннего опорного напряжения контроллера относительно напряжения питания. Использую такую для ATMEGA328.
Не программы, а методы настройки ADC. И что делитель применим и к AVR и другим МК я вроде бы и так сказал.
Относительная погрешность коэффициента деления у делителя зависит только от относительной погрешности сопротивлений резисторов. Т.е. погрешность делителя из 1 процентных резисторов по 100кОм и 100МОм будет одинаковой. Просто через делитель из мегаомных резисторов будет течь настолько малый ток, что станет значимым влияние наведенных помех.
Погрешность - это не повторяемость, а отклонение результата измерения от истиного значения. Например вы можете повторяемо получать 5 вольт вместо 3-х. Случайная погрешность минимальна, зато большая систематмческая.
И напряжение на батарее может проседать в зависимости от тока, например, при работе WiFi.
Неплохо бы теорию по измерениям подтянуть )))
Вы итоге как мерить тогда? (у меня история не про Wi-Fi, но тоже актуальный вопрос)
Думаю, что универсального рецепта нет. Определиться с целью и требующейся точностью и допустимым потреблением, определить источники погрешности, подобрать и проверить вариант реализации.
Конечно интересно. Я пробовал пользоваться по вашим роликам сном на esp8266, правда не без проблем. Выход из сна + подключение к сети + отправка значения более 10 секунд.🤔 Тоесть в частых измерениях это не работает. И еще я отчаялся искать схему при которой будет переключаться с одного источника на другой, вроде их много но в эмуляторе все не работает. Была идея взять разных транзисторов и попробовать на деле(хотя есть трудности для их включения при маленьком вольтаже), поэтому с али на пробу едет микросхемка TPS2113, которая сама "теоретически" будет все делать.
Мегаомы не по этому не ставят, а потому что ток зарядки встроенного кондера ацп будет слишком мал со следующими всеми вытекающими.
ESP.getVCC() нет разве у 32ых? Использую в метеостанции (8266) на батарейках и не только.
функция system_get_vdd33() имеется, но доступна при использовании библиотек другой версии ESP-IDF, не входящей в версию для Platformio. Жаль, что автор ее не использует: при питании от источника менее 3.6 В не нужно было бы морочиться с резистивным делителем
А чем плохо поставить транзистор перед R1 и подавать питание на делитель только в момент замера напряжения?
Прикольно, если снизить битность до 10 как у АВР то будет гораздо точнее показывать!
У Вас в примере функция vbatGet(VBAT_CHANNEL); использует только 3 замера.
(constexpr uint8_t MEDIAN = 3;).
Далее она перестраивает измеренные значения в порядке возрастания.
И после возвращает центральное значение из массива, отбросив начальное и конечное.
А если MEDIAN сделать равным 7ми и, выстроив измерения в порядке возрастания, отбросить первых два и два последних - правильней ли будет в оставшемся массиве из 3х измерений взять медиану?
Или количество замеров более 3х "утяжелит" для процессора работу с этой функцией?
Почитайте, что такое "медианное значение".
Количество замеров влияет на время их выполнения, и я сомневаюсь, что больше 5-7 замеров есть смысл делать, главное не 1.
Как то встречал подобную схему включаемого делителя напряжения на двух биполярных транзисторах с такой же логикой, пока не требуется измерения напряжения, цепь делителя, а именно резистор верхнего плеча, через pnp транзистор отключается от питания, тем самым сажая весь делитель на землю. Как мне показалось эта схема эффективна в том случае если требуется большой коэффициент делителя на Ком-ных резисторах.
А на avr c питанием от батареек (напряжение меньше 5,5 вольт), нет смысла использовать делитель так как авр сам может помереть напряжение питания.
Точно, AVR же может мерить полное напряжение питания! Упс, сколько не подай - все равно около 2^10 - 1, т.е. 1023 выдает. Странно! :)
Ну почему же? Он меряет напряжение относительно питания. Поэтому для измерения именно VCC нужно использовать внутреннее опорное напряжение, а оно 1.1 В (бывает и другим у разных МК), а тут уже без делителя не обойтись.
@@alexmorozov73 , да есть такое
Ну как 5 вольт через 100кОм резистор могут убить ЕСП32? Какой-там ток должен быть, чтобы входной буффер сгорел? Всяко больше десятки микроампер.
А если под большее напряжение после сопротивлений поставить светодиоды, правда нужны какие-то на 1 вольт, лишний вольтаж на себя заберёт светодиод. Ток я не знаю светодиод на 1 вольт
Отличная идея! Даже из самого ролика видно, насколько много потребляет светодиод, мы как раз перейдем от экономии микроампер к растрате миллиампер. :)
Тоже хочу проект водосчетчика.
Понятно, что АЦП не лучшая сторона ESP32. Сделайте лучше видео по калибровке АЦП с учётом последних вариаций на эту тему, и как я понял, из под ULP получить калиброванные значения уже не выйдет, только после пробуждения осн проца?
Можете загрузить калибровку, подобрать хотя бы перебором значение, которое будет соответствовать порогу, сохранить его в RTC памяти, а в самой ULP программе сравнивать получаемые с ADC значения с этим порогом и принимать решение о пробуждении. Сами "сырые" значения с ADC можно тоже сохранять в RTC памяти, а после пробуждения "обработать" их калибровочными данными.
@@alexmorozov73 Спасибо за ответ, так и приходится делать, по крайней мере для обычного ESP32, но это хорошо для одного устройства, а вот для серийных уже сильно усложняет процесс если заморачиваться с более сложной калибровкой, поэтому и приходится в ULP работать с RAW данными, сравнивая их с порогами, а при пробуждении осн проца уже калибровать данные при необходимости (опять же не очень это всё точно). Думал в новых RISCV с ULP что то улучшили, но похоже проблемы остались, да и в последнем ESP32C6 вообще АЦП нет для работы с ULP, если я правильно понимаю, и это портит всю картину....
Исходники ESP-IDF есть, можно найти как именно они используют калибровку и этот код перенести на ULP RISC-V ядро. Само собой, если там деление или умножение, то перенос на FSM-ULP будет тем еще квестом, или даже вовсе невозможной задачей.
Может кто знает, приехала на тест lolin d1 mini, и только я привых к платформио, но там никак не хочет шиться. Выбираю как есть "wemos r2 d1 mini", и никак😕 а на ардуино иде 2.0 с библиотекой esp8266 выбираю wemos(lolin) d1 и все сразу работает. Что я делаю не так?
Никаких проблем с D1 mini не имею в PIO. Единственное что приходит на ум, если в COM порт(ы) подключены еще какие-нибудь устройства, то PIO может самостоятельно выбирать неверный порт для заливки. Лечится указанием нужного порта в platformio.ini, параметры которого описаны на сайте документации по PIO.
@@alexmorozov73 Спасибо, попробую,
Автору спасибо. А вот с напряжением 400в как быть? Имеется дозиметр с накачкой по высокому напряжению для трубки Гейгера. Нужно установить напряжение 400в (+-10в) и удерживать в этих пределах. Экономичность прибора конечно тоже очень важна. Тут использовать резистивный делитель уже не вариант так как напряжения высокие и потери будут высокими.
Ну через 10.056 МОм ток будет не таким уж и большим. А значит 10 МОм и 56 кОм дадут приемлемый делитель 0.0055688, и ток через сами резисторы не будет способен их сжечь (имею ввиду меньший).
@@alexmorozov73 я не уверен что при таком соотношении делителя будет обеспечена точность так как входное сопротивление МК в режиме входа, будет давать ощутимую нагрузку. Ну и простейший расчет показывает что при 10МОм и напряжении 400в мы будем переводить в тепло 0.016вт. согласитесь, это очень расточительно. Если питать прибор от элемента АА , у которого примерно 1.5втч, то только на этот делитель мы сможем отработать всего 97 часов. Экономичные экземпляры приборов могут работать непрерывно от 1 АА батарейки более года!!!
А если заюзать операционный усилитель в связке с очень мегаомными резисторами? И нагрузку не создадите для преобразователя напряжения (не просядет заметно) и по токам можно выиграть как мне кажется. Только хороший low power consumption операционник наверное недешево будет.
@@_suso_ поставь 20МОм и кондёрчик из средней точки делителя на землю. или вообще не меряй, та же Белла просто генерит высокое и не меряет его
Мне казалось, что на входе должны стоять слабые, но защитные диоды... С падением в 0.5в
Цепь до ADC всегда другая, даже на AVR. Минуя буферы и защиту.
Падение напряжения на AGND-GND вносит нелинейность и изменения делителя?
Я не знаю, как именно реализована коммутация пина с землей внутри МК, но даже если и появляется в результате некое дополнительное сопротивление, то его можно компенсировать при расчете за счет вычисления коэффициента по эталонному напряжению. И на одном и том же пине откуда нелинейность появится?
@@alexmorozov73 я имел в виду про нелинейность от контролёра к контроллеру, т.е. поправка в прошивке для одного не подойдёт к другому из-за немного разного падения напряжения. Для несерийного варианта проблем нет совсем, вы правы.
Не смотря на заводскую калибровку, все МК выдают на одном и том же источнике напряжения немного разные значения, безотносительно делителя.
Скорее всего калибруется вся партия по одному экземпляру из нее для скорости.
Решение в целом не айс. По 100к делитель аховский. И дело не а том какой там разброс а дело в ткс они от температуры начнут сильно уплывать.
Что бы он измерял довольно точно точка подключения верхнего и нижнего плеча должна быть максимально близко к батареи.
Отключать можно n канальным ключом если хочется энергосбережения.
А для более точных измерений и энергосбережения лучше применять ОУ. Я так полагаю что автор видимо так оценивает разреженность или наоборот заряд батареи что крайне не верно так как характеристика у него не линейная.
А N-канальным мосфетом вы предлагаете землю на втором плече коммутировать? И чем это поможет? Через первое плечо на ADC все равно ток проходит, если напряжение выше 3.6 В, то все равно перебор.
@@alexmorozov73 Алексей если открыть даташит на допустим какой нибудь stm32f030 то там четко указан leakage current. И он там составляет в самом плохом случае 10 uA что в несколько раз меньше того что может потечь через 100к при вашем напряжении. Если уж так вы переживаете можете ещё одним резистором ограничить ток.
ардуинщег сделал антену на двух резисторах и ловит всполохи
... откровения "ардуинщика" (((
это отвратительно../ делается на мосфете и только так......
В микроконтроллере, как ты сам рассказал раньше, есть функция, которая следит за питанием. Вот эту функцию я и использовал, опять у тебя подсмотрел, попытался с неё напряжение снять, но что-то пошло не так. Мне надоело экспериментировать: на одном напряжении включается так, на другом - иначе. Идея была зная порог срабатывания отследить напряжение, меняя порог. Не нужны дополнительные выводы.
static void low_voltage(void* arg) {
if(!GoSleep)store_time_before_sleep();
GoSleep=true;
CLEAR_PERI_REG_MASK(RTC_CNTL_BROWN_OUT_REG, RTC_CNTL_BROWN_OUT_ENA);
REG_WRITE(RTC_CNTL_BROWN_OUT_REG, RTC_CNTL_BROWN_OUT_ENA | RTC_CNTL_BROWN_OUT_PD_RF_ENA | (20
Нужно продолжение. Спасибо