Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Ответить

Выполнить код после отключения питания

Пт ноя 02, 2018 21:01:38

Доброго времени суток!
Подскажите, пожалуйста, оптимальное решение следующей задачи. Планируется устройство на микроконтроллере. Необходимо выполнить определённый код после отключения питания данного устройства.

Исходные данные:
1. Напряжение питания устройства - 5 В, должно быть в пределах 4,5 - 5,5 В.
2. Потребление устройства около 40 мА/ч.
3. К устройству должна быть подключена нагрузка.
4. Напряжение питания нагрузки - 5В, где-то в тех же пределах что и для устройства.
5. Потребление нагрузки около 300 мА/ч.
6. Нагрузку можно (и нужно :) ) отключать сразу при отключении питания.
7. Сколько времени будет выполняться данный код на устройстве - сказать сложно, но одной секунды точно будет достаточно. Возможно будет достаточно и 100 мс, возможно и 20 мс. Но это не точно :) .
8. В качестве источника питания предлагаю рассмотреть 2 варианта. Первый: аккумулятор типа 18650 с напряжением 3,7 В. Второй: 9 В через преобразователь от сети.

Т.к. время работы после отключения питания не велико, то на ум приходит использовать ёмкий конденсатор, или, на худой конец, ионистор. А также, разумеется, отслеживать напряжение питания (через делитель напряжения в случае необходимости) с помощью АЦП МК. Т.к. ток нагрузки относительно небольшой, то, насколько я понимаю, управлять нагрузкой можно с помощью биполярного транзистора.

Для питания от 3,7 В получается вот такая схема:
Изображение
Делитель напряжения (резисторы R1 и R2) в принципе в данном случае можно и не использовать.
C1 – ёмкий конденсатор, или ионистор.

И тут, собственно, нюансы-вопросы:
1. Насколько я понимаю, нужен диод (D1). Т.к. на диоде будет падать напряжение, то, насколько я понимаю, желательно если это будет диод Шотки. Например, 1N5819? Хотя, с другой стороны, т.к. используется повышающий DC/DC преобразователь, то данное падение напряжение не существенно и можно обойтись обычным диодом, например, 1N4007?
2.1. Насколько я понимаю, ионистора 0,22 Ф должно быть достаточно с головой?
2.2. Напряжение ионистора (предельно допустимое) должно быть 5,5 В?
2.3. Будет ли достаточно конденсатора на 1000 мкФ, или, например, на 220 мкФ?
2.4. Правильно ли я понимаю, что конденсатор/ионистор C1 нужно подключать именно до повышающего DC/DC преобразователя?
3.1. Подойдёт ли для данных целей в качестве биполярного транзистора 2N2222? Или лучше использовать какой-то другой?
3.2. Какой номинал должен иметь резистор R3?
4. Как себя будет вести схема при включении, когда конденсатор/ионистор ещё не заряжен? Пока конденсатор не зарядится, дальнейшая часть схемы питание не получит? Или же сразу запустится МК, в то время как конденсатор/ионистор ещё только будет заряжаться?

Если я правильно понимаю пункт 2.4, то для питания от 9 В помимо перечисленных нюансов возникает ещё один. Заключается он в том, что придётся использовать помимо понижающего ещё и повышающий DC/DC преобразователь. Что как-то не очень круто выглядит, т.к. усложняет схему :) . Собственно схема для случая питания от 9 В:
Изображение

Re: Выполнить код после отключения питания

Сб ноя 03, 2018 23:48:04

d1 - больше похож на предохранитель, но если подключить ионистор, выдержит ли он КЗ во время заряда, все зависит от источника
C1 - если питание будет вирубаться мгновенно, тогда может и пригодиться(хотя с такими нагрузками нужно большой ионистор), иначе безполезен для данной задачи
R3 = U/(Iload/Q1_h21) - при условие что ножка контроллера может выдержать ету мощность

Действительно нужен DC/DC?
Может проще взять другой мк с напряжением 3.0, 2.4, 1.8V, ...
и розделить(например диодом до LDO) питание логики и нагрузки,
логику переводить в энергосберегающий режим ну а дальше считать что нужно

Это не вачдог случайно?

Re: Выполнить код после отключения питания

Ср ноя 07, 2018 22:37:01

d1 - больше похож на предохранитель, но если подключить ионистор, выдержит ли он КЗ во время заряда, все зависит от источника

Я подумал о том, что во время заряда конденсатора будет большой скачок тока, но что-то я наивно подумал, что ток будет ограничен тем, что может выдать источник питания. Я не подумал о том, что блок питания в таком случае может уйти в защиту (если она есть), или вообще сгореть :) . Да и в случае с понижающим DC/DC он тоже может не выдержать такой ток. А вод диод как раз, скорее всего, выдержит, т.к. у него (1N4007) пиковый ток – 30А.

C1 - если питание будет вирубаться мгновенно, тогда может и пригодиться

Хороший нюанс. Получается, что в случае с плавным снижением питающего напряжения будет разряжаться и ионистор? Тогда тут всё будет зависеть от того, какой нижний предел допустимого входного напряжения установлен для МК (отслеживание с помощью АЦП). А также от того, какой нижний предел рабочего напряжения повышающего DC/DC. Т.е., например, если в МК установлено 3,1 В, а нижний предел повышающего DC/DC = 2 В, то всё закончится штатно, если хватит энергии ионистора, который будет уже не полностью заряжен.
Получается, что этот нюанс актуален для варианта с аккумулятором. И, возможно, для варианта, когда в БП тоже стоит ёмкий конденсатор. Хотя ёмкость конденсатора в БП будет намного меньше ёмкости ионистора.

(хотя с такими нагрузками нужно большой ионистор), иначе безполезен для данной задачи

Так ведь не стоит задача питать устройство на протяжении часов, или минут :) . Речь о работе не более одной секунды.
Здесь стоит разобраться со связью между ёмкостью и энергопотреблением.
1 Ф = 1 Кл/1 В.
1 Кл = 1 А*с.
Отсюда следует что:
Фарад= (Ампер * час)/(3600 * Вольт)=(мА * час)/(3,6 * Вольт)
Отсюда время работы в секундах:
t = (Фарад * Вольт) / Ампер
Для 1 Ф, 5 В и 40 мА получается 125 с.
Т.е. если реальность будет более-менее соответствовать расчётам, то возможно будет достаточно даже конденсатора на 1000 мкФ.

R3 = U/(Iload/Q1_h21) - при условие что ножка контроллера может выдержать ету мощность

h21это то же самое что hFE, т.е. коэффициент усиления по току? Если так, то из даташита на 2N2222:
Не менее 75 при IC = 10 mA; VCE = 10 V
От 100 до 300 при IC = 150 mA; VCE = 10 V
Не менее 50 при IC = 150 mA; VCE = 1 V;
Не пойму что означает напряжение коллектор-эмитер (VCE). Это просто напряжение на коллекторе? Или падение напряжения на переходе коллектор-эмитер?
Если взять hFE = 50, то получается что R3 = 833 Ом. При таком сопротивлении ток базы будет 6 мА, что абсолютно нормально для ножки МК :) .
Кстати возник ещё такой вопрос: не будет ли проблемой то, что напряжение на базе и коллекторе одинаково?

Действительно нужен DC/DC?

Ну, в вместо понижающего DC/DC можно и линейный стабилизатор использовать :) .
А какая альтернатива для повышающего DC/DC?

Может проще взять другой мк с напряжением 3.0, 2.4, 1.8V, ...

Оно-то наверняка лучше, но имеем, что имеем :) . Кстати давно хочу освоить STM :) , но всё ни как времени на это нет.

и розделить(например диодом до LDO) питание логики и нагрузки,

Что-то я об этом не подумал :) . Похоже, что это самый простой вариант, если не нужно в процессе работы управлять питанием нагрузки.

Это не вачдог случайно?

Нет :) .

Re: Выполнить код после отключения питания

Чт ноя 08, 2018 00:59:21

act давно придума в авторегистрпаторах мелкий литий в помощь
насчет ионистора не знаю врядли его хватит актифному процику толка RTC подпитать

Re: Выполнить код после отключения питания

Чт ноя 08, 2018 07:09:20

Пистец китайская грамота. Мелкий литий, если что, в автомобильных видеорегистраторах живёт года три-четыре, потом дохнет. Правда, там климатика нещадная. Я в своём аккумулятор уже менял. Новый купил в авиамодельном магазине. Скоро, похоже, надо будет уже и его менять.

Re: Выполнить код после отключения питания

Чт ноя 08, 2018 12:27:02

act давно придума в авторегистрпаторах

Можно поподробнее, что за act? Для поиска в гугле слишком мало букв :) .

мелкий литий в помощь

Это который типа CR2032? Или речь о мелких Li-Po аккумуляторах?

насчет ионистора не знаю врядли его хватит актифному процику толка RTC подпитать

Не хватит ёмкости, или токоотдачи?

Re: Выполнить код после отключения питания

Чт ноя 08, 2018 12:34:27

да речь о литике акуме мелкм 30-300ма -ч в схему встрен чип егоавтоподзаряда насчет 2-3лет в авто -всотике и ноутах нынешний литий не дивет долше часто даже менше... времена вечных батарек канули в летах
про ионисторы да малои емкостии главное огромная абсорбцияи внурений импеданс не дадут шансоф
кстати на край годится и одноразовый таблеточнвй лити навроде 3050 или парочки 2032 впаралель брать лучше с лепестками приварными естествено он не должен юзатся штатно толко при аварийном пропадани сети

Re: Выполнить код после отключения питания

Чт ноя 08, 2018 12:54:36

Можно поподробнее, что за act? Для поиска в гугле слишком мало букв :) .
Как мусор напьётся пыва, так его комп начинает самопроизвольно переключаться на латиницу; вместо "act" предполагалось "фсе", что означает "все" или "всё". Привыкайте, у мусора до сих пор нет толмача. :))

Re: Выполнить код после отключения питания

Чт ноя 08, 2018 13:00:06

Спойлер:facepalm:
Мало того что на английской раскладке, так ещё и по-русски исковеркано. :evil:

Re: Выполнить код после отключения питания

Чт ноя 08, 2018 14:19:40

Доброго времени суток!
Подскажите, пожалуйста, оптимальное решение следующей задачи. Планируется устройство на микроконтроллере. Необходимо выполнить определённый код после отключения питания данного устройства.
Самым оптимальным, ИМХО, брать напряжение питания до стабилизатора и заводить его через делитель на встроенный в МК аналоговый компаратор. Ну а дальше в программе настроить компаратор, подать на него опорное напряжение и разрешить от него прерывания. В обработчике прерываний первым делом гасить всё, что потребляет от того же стабилизатора, от которого питается МК, выполнить нужный вам код, сохранения в EEPROM и т.д., ну и ожидать полного пропадания питания в пустом цикле. Для этого необходимо, чтобы МК питался от отдельного стабилизатора 5В и все нагрузки на этот стабилизатор были подконтрольны МК. Ну и ёмкости в 470мкФ по выходу стабилизатора будет вполне достаточно для гарантированного выполнения нескольких десятков строк кода с задержками на раздупление EEPROM.

И постарайтесь забыть о биполярных транзисторах в энергоэффективных устройствах. Есть замечательные P-канальные MOSFET, которые даже в SOT23 исполнении умудряются держать токи в несколько ампер, ничего при этом не потребляя на управление. И всё же мощную нагрузку я бы рекомендовал питать не от того же стабилизатора, от которого будет питаться МК.

Re: Выполнить код после отключения питания

Чт ноя 08, 2018 21:02:13

Nicochip
Спасибо за очень полезную информацию :) .
ёмкости в 470мкФ по выходу стабилизатора

Почему именно по выходу, а не по входу?
Объясню свою задумку размещения конденсатора по входу стабилизатора.
Напряжение на конденсаторе (после отключения питания) будет представлять собой нечто вроде этого:
Изображение
Если ставить конденсатор по выходу стабилизатора, то МК сможет работать до 4,5 В (по крайней мере это минимально допустимое напряжение по даташиту). Таким образом, энергия конденсатора, которую мы сможем использовать, будет следующая:
Изображение
Если же конденсатор ставить по входу, то мы сможем выжать из конденсатора гораздо большую энергию, которая будет ограничиваться минимальным рабочим напряжением стабилизатора. Для минимального напряжения 2 В имеем:
Изображение
Если проинтегрировать эти фигуры, то получается что для второго случая полезная энергия будет в 6 раз больше!

Правда есть недостаток. Если ставить конденсатор до повышающего стабилизатора, то конденсатор будет заряжен не до 5 В, а до того сколько там было до стабилизатора. Но даже в этом случае прирост по полезной энергии всё равно будет. Например если конденсатор заряжен до 3,5 В, то энергии мы сможем выжать не в 6, а в 3 раза больше.

Ну а в случае с понижающим стабилизатором то от размещения конденсатора по входу получаются только преимущества. Кстати, тот повышающий DC/DC на моей второй схеме из первого сообщения и не нужен будет, если использовать конденсатор, а не ионистор :) .

musor, mickbell
Всё-таки я склоняюсь к варианту с конденсатором, т.к. использовать для данной задачи аккумулятор это как с пушки по воробьям :) .

Спойлер
Можно поподробнее, что за act? Для поиска в гугле слишком мало букв :) .
Как мусор напьётся пыва, так его комп начинает самопроизвольно переключаться на латиницу; вместо "act" предполагалось "фсе", что означает "все" или "всё". Привыкайте, у мусора до сих пор нет толмача. :))

:)))
Так выпьем же за понимание :beer: .
Хотя кое-кто, похоже, уже достаточно выпил :))) .

Спойлерhttps://www.youtube.com/watch?v=PButK4f3QZY

Re: Выполнить код после отключения питания

Сб ноя 24, 2018 19:58:26

Почему именно по выходу, а не по входу?
В случае линейного стаба и понижения напряжения так можно энергию отдать МК, не тратя ее на нагрев стаба. При прочих равных (габариты конденсатора) это может выйти интереснее. А может и не выйти. Можно и по входу. Часть энергии потеряется на стабилизаторе, но работать будет. Зависит от стаба, его аппетитов, что в этой части цепи случается при отключении питания и проч.

Кстати с конденсатором по выходу - стоит уточнить что делает стабилизатор когда напряжение на входе проваливается ниже выходного. Там возможны варианты, и не все они хороши для сохранности заряда конденсатора. У некоторых паразитный диод есть - если вход разрядился в 0, выход сольется на вход. Некоторые целенаправленно разряжают выход при отключении питания. И конечно же ни то ни другое вам бы не хотелось. Диодом это лечится, но напряжение будет ниже стабилизации, и вообще, немного менее стабильное т.к. напряжение на диоде зависит от тока потребляемого схемой.

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

Всё-таки я склоняюсь к варианту с конденсатором, т.к. использовать для данной задачи аккумулятор это как с пушки по воробьям :) .

Как-то так все и делают. Дернуть что-то типа прерывания супервизором питания, компаратором, или что там кому удобно, лишь бы быстро было - и закругляться по быстрому. Просадку напряжения за время закругления лучше все же посчитать и проверить что запас есть. В т.ч. на потерю емкости электролитом со временем и все такое.

А что до ионисторов - мелкие ионисторы как правило высокоомные. У них ESR приличный, до десятков Ом. Если ставить их - это стоит учесть, проверив что просадок на ESR ниже критичных не происходит.
Последний раз редактировалось linuxdude Вс ноя 25, 2018 03:35:21, всего редактировалось 1 раз.

Re: Выполнить код после отключения питания

Сб ноя 24, 2018 20:51:16

TerraKOT, по входу стабилизатора конденсатор может оказаться бесполезным как, например, в этом случае: https://radiokot.ru/lab/hardwork/114/
Я не знаю вашей схемы и что от чего вы в своём проекте собираетесь питать. Почитайте статью по приведённой ссылке. Там как раз решалась подобная проблема.
Ответить