Микро-UPS на ионисторах

в 10:11, , рубрики: DIY, diy или сделай сам, ИБП, ионисторы, микроконтроллеры, Производство и разработка электроники, разработка, электроника, Энергия и элементы питания

Доброго времени суток всему уважаемому сообществу. Имею честь предложитьам, заинтересованным в радиоэлектронике, несколько рассуждений и конкретную реализацию блока резервного питания на ионисторах (они же суперконденсаторы с двойным электрическим слоем), предназначенного обеспечить корректное завершение работы процессорного модуля на ARM-микроконтроллере, работающего под стандартным Linux Debian.

Задачка возникла перед вашим покорным слугой в следующем обличье: требуется грамотно погасить ОС Linux (крутящуюся на Embedded-решении) при отключении внешнего питания. Питание это поступало от стандартного порта USB 2.0 на сделанный ранее коробочку-прибор через не менее стандартный USB-B разъём. Неискушённый пользователь этого девайса предпочитал банально выдёргивать USB кабель, следуя принципу «UnPlug-NoPlay-NoProblem». Понятно, что embedded-решение без жёстких дисков и с обнулённой при конфигурировании виртуальной памятью стойко к подобным форс-мажорам, однако пара тысяч пользователе-часов наработки показала, что не всегда получается «без проблем».

Пришлось наморщить мозг и отправиться в творческий транс. По выходу из транса материализовался первый возможный путь решения проблемы – психологический, поначалу показавшийся самым привлекательным. Ход размышлений был примерно таков – почему рядовой юзер недрогнувшей рукой дёргает торчащую в порту USB флешку? Наверное, потому что ни он сам, ни его ближайшие знакомые не теряли таким образом дипломной работы, диссертации или годового отчёта. Почему тот же юзер не дёргал во времена оны принтерный кабель из работающего принтера? Наверное, потому что или сам видел, или сам слышал из чьих-то уст, как приходилось покупать новую MB или Centronics на ISA (PCI). Мне не хочется (от слова вообще), чтобы мою коробочку выдергивали бесцеремонно. Что для этого надо сделать? Правильно, сформировать требуемое пользовательское поведение.

Пришлось тряхнуть навыками схемотехники и трассировки, и очередная версия коробочки обзавелась на передней панели RGB-светодиодом и кнопкой, а также пьезосигналом с противным тембром внутри. Несложная программка определяла, корректно ли прошло крайнее отключение. Если некорректно и проступок юзера был первым на её флеш-памяти, то следовало управляющее воздействие: вместо радующего жёлтого и зелёного цветов индикатора коробочка моргала режущим глаз красным и мерзко верещала пару минут, прежде чем успокаивалась и начинала грузиться. Рецидив карался пятью минутами, ещё более мерзким вереском и строкой в мануале, гласящей, что коробочка, заблокированная по причине неоднократного некорректного выключения, снимается с гарантии, вот.

Вы знаете, способ оказался на удивление действенным. Но тут Уважаемый Заказчик выдвинул пожелание, чтобы перед отключением коробочка бы ещё сообщала на сервер, что уходит на время со сцены. Теперь требовался какой-никакой, но источник энергии. Мозг из следующего творческого транса вернулся с мыслью: литий-полимерный аккумулятор – это наше всё! Здравое размышление добавило к этой мысли немало скепсиса: заряжать аккумулятор при каждом включении как-то не очень хотелось, потому как число зарядов-разрядов есть ресурс расходуемый, а также предмет циничного обмана производителями батарей невинных покупателей. Заряжать не при каждом включении, а по мере разряда? Так это надо целый огород городить, батарею калибровать, напряжение на ней с неплохой точностью мерить. В общем, то да сё, и тут на сцену вышел Samsung Galaxy со своими зажигательными аккумуляторами. Представив себе пожар в том месте, где должна была стоять коробочка, пришлось волюнтаристски махнуть шашкой и прекратить мучительные обдумывания второй идеи.

Сходивши в транс по третьему разу, творческий гений принёс на свет ионисторы. А что, вроде неплохо. Ёмкость – в фарадах, число циклов заряда-разряда как бы не ограничено, вольт правда маловато – 2.7 максимум на одну ячейку, а каскадируются они не очень просто. Обдумывать за отсутствием вариантов уже было нечего, и снова пришлось взяться за схемотехнику на пару с трассировкой.

Поиски по бескрайним просторам Инета принесли некоторый улов, и, по недолгим размышлениям, решено было остановиться на микросхеме компании Linear LTC3110. Забегая вперёд, скажу, что была опробована ещё пара вариантов, но не особенно удачно. Если Читателю интересны подробности выбора – милости прошу в личку. Из имеющихся в наличии вариантов LTC3110 содержит практически всё, необходимое для построения источника резервного питания на ионисторах:
— в ней есть понижающее-повышающий преобразователь, что делает конструктора не особо ограниченным в выборе напряжений питания;
— преобразователь этот использует для накопления энергии индуктивность, что заметно повышает КПД и даёт возможность отдавать в нагрузку пару ампер;
— есть возможность ограничить ток, потребляемый при зарядке в диапазоне 125мА — 2А, что особенно важно при питании от USB;
— имеется встроенная схема индивидуальной балансировки последовательно включённых ионисторов для повышения запасаемой мощности и надёжности;
— микросхема снабжена выводами, индицирующими степень заряда ионисторов;
— и, на сладкое, имеется дополнительный компаратор, пороги срабатывания которого задаёт пользователь.

За подробностями и примерами применений отсылаю любопытного Читателя к даташиту на микросхему, всемогущий Гугл с заклинанием «LTC3110 pdf» Вам в помощь.

В теории, для построения работоспособного Микро-ИБП к самой LTC3110 нужно добавить схему, осуществляющую питание коробочки в штатном режиме, при наличии подключения к работающему USB. На эту почётную роль была выбрана ИМС ST1S10PHR, чей неприхотливый нрав и невысокая цена известны и проверены уже давно. Также пришлось добавить ключ, разрывающий цепь питания основных потребителей в процессе начальной зарядки ионисторов. Этот ключик позволяет решить две задачи: во-первых, время начальной зарядки сокращается (поскольку практически всё потребляемое от USB идёт в ионисторы), а во-вторых, исключает неприятную возможность обесточивания при настолько недозаряженном ИБП, что запаса энергии всё же не хватит на корректное отключение. Более того, «высокий старт» с полностью заряженных ионисторов разрешает схеме иногда (но не очень часто) потреблять больше тока, чем может отдать порт USB – дефицит будет пополнен из ионисторов. Такая ситуация может возникнуть, например, при записи большого блока информации на ёмкую USB-флешку, питающуюся вместе с коробочкой.

Думаю, что на этом вводную часть можно завершить, и перейти к конкретной рабочей схеме.

image

Так выглядит схема микро-UPS на ионисторах.

Питание поступает от порта USB 2.0 (верхний левый угол схемы). На DA1 по рекомендуемой схеме из даташита собран понижающий преобразователь 5В -> 3.3В. Единственная его особенность – дополнительный фильтр от высокочастотного звона на L2 и C7. При желании, эти элементы можно исключить. Резисторы R3…R5 служат для экстренной разрядки ионисторов перед транспортировкой, например, или перед наладкой всей платы в целом, иначе на ней остаётся источник питания, причём достаточно мощный, чтобы чего-нибудь сжечь. Подключаются-отключаются разрядные резисторы перемычкой SA1. VT1,C16,R17 и R18 — ключ питания основных потребителей, о нём уже говорилось выше и придётся добавить пару слов ниже. Всё остальное – стандартная обвязка LTC3110 из даташита.

3V3SBY – дежурное питание схемы управления, в коробочке она реализована на CPLD EPM240T100 от Альтеры, но ничто не мешает исполнить её на микроконтроллере или дискретной логике. 3V3 – основное питание коробочки, резервированное UPSом. Информация о статусе микро-ИБП выводится на PWRFAIL, BATFULL и BATLOW с говорящими сами за себя названиями. PWRFAIL активируется при пропадании питания от USB, BATFULL индицирует достижение зарядом ионисторов уровня 95% (5.2В), BATLOW показывает снижение уровня заряда до 40% (2.1В). При желании, этот уровень можно откорректировать подбором R6 и R7, ориентируясь по даташиту. К сожалению, такой фокус не проходит с уровнем BATFULL – он гвоздями забит в ИМС.

Управляют микроИБП два сигнала: PWRON и BATOFF. PWRON включает основное питание, BATOFF отключает ИБП в целом.

Общая логика работы микроИБП такова:

  1. в исходном состоянии С8 и С9 полностью разряжены, перемычка SA1 в левом положении, питание 5V USB не подано;
  2. устройство включается в порт USB-B 2.0;
  3. преобразователь на DA1 начинает выдавать ток на линию 3V3SBY, запитывая схему управления на CPLD, которая, в свою очередь, размыкает ключ VT1, снимая сигнал PWRON; кроме того, схема управления снимает сигнал BATOFF, включая DA2;
  4. DA2 начинает заряжать ионисторы; по мере их зарядки деактивируется сигнал BATLOW (при 2.1В), затем активируется BATFULL (при 5.2В на ионисторах);
  5. появление сигнала BATFULL схема управления расценивает как готовность микроИБП к работе, и включает VT1, подавая питание на основную схему; DA2 при этом продолжает мониторить ионисторы, и при снижении заряда менее 95% начинает подзарядку; подключение VT1 к выводу RSENS DA2 гарантирует, что для подзарядки будет взят такой ток, что не превысит лимит USB с учётом потребляемого основной схемой; если потребление основной схемы этот лимит превысит, начнётся разрядка ионисторов для компенсации излишних трат;
  6. при отключении 5V USB активируется линия PWRFAIL, давая знать устройству управления, что внешний источник пропал; схема управления формирует запрос на прерывание ARM-процессора для запуска скрипта корректного отключения; всё это время питание осуществляет DA2;
  7. по завершении процедуры отключения ARM выдаёт сигнал о том, что всё готово к погасанию, и схема управления выставляет BATOFF, отключая DA2; в таком состоянии коробочка находится до подачи питания на 5V USB (см. п.1 за исключением остаточного заряда на С8 и С9);
  8. если ARM сильно замешкался и не сумел всё позакрывать до сигнала BATLOW, схему придётся обесточить насильно.

При желании несложно организовать и любую другую логику управления микро-ИБП, например, повысив уровень включения BATLOW процентов до 60% (подобрав R6 и R7), использовать его как сигнал о необходимости остановки, отключаясь насильно по полному разряду С8 и С9.

Напоследок быстренько пробежимся по настраиваемым параметрам схемы. R1 и R2 определяют выходное напряжение DA1, другое напряжение может потребовать замены С1, С2, С4-С6 и L1. Номинал C8 и С9 определяет только времена зарядки и разрядки ИБП, лично пробовал от 4.7 до 100 Фарад, теоретически ограничений нет. R6 и R7 определяют уровень активизации BATLOW. От соотношения R8/R9 зависит напряжение максимальной зарядки ионисторов. R11 определяет ток, потребляемый от 5V USB, при указанном сопротивлении схема потребляет 0.5А. Соотношение R12/R14 устанавливает такой уровень падения 5V USB, который будет определяться как пропадание питания (PWRFAIL). R15/R16 определяет выходное напряжение DA2 в режиме разрядки.

Выходные сигналы LTC3110 выполнены по схеме «открытый сток» для того, чтобы не привязываться к конкретному напряжению питания. В моей схеме подтягивающие резисторы для них задействованы в CPLD, не проблема задействовать их в любом современном микроконтроллере. Ну уж если вы решите собирать схему управления на К155, то резисторами вам придётся озаботиться самостоятельно.

Пару слов про C16. Получение этого знания отняло у меня больше всего времени, проведённого над макетной платой ИБП. Ведь в чём проблема? В даташите черным по-английски написано, что если вы хотите, чтобы сумма потребляемого основной схемой тока и тока подзарядки ионисторов гарантированно не превысила лимита, установленного R11, будьте добры питать основную схему от вывода RSENS. ОК, договорились. А дальше – интереснее. Поскольку в вашей схеме может быть что угодно, вплоть до КоЗы (КЗ, оно же короткое замыкание, оно же коротыш), говорит даташит, LTC3110 снабжена специальной схемой защиты. ОК, очень мило. А теперь самое интересное. Читаем даташит дальше: а чтобы схема защиты не ошиблась, будьте добры, обеспечьте суммарную ёмкость по линии питания НЕ БОЛЬШЕ, Карл, 10 микроФарад. Опаньки… На всё про всё, и ни в чём себе не отказывайте. И правда, любую нагрузку больше 10uF при подключении клинит… Не обманули, басурмане. Пришлось внести небольшую задержку в ключ на VT1, которую и даёт С16. Понимаю, что на некоторое время VT1 при этом окажется не в ключёвом режиме, а между небом и землёй (в смысле, между VCC и GND), что есть совсем не здорово. Но так хоть работает. Такая вот «нову хаву». Для ревнителей чистоты ключевых режимов добавлю, что пробовал ставить не С16, а индуктивность 1.5 мкГн последовательно с VT1 – всё замечательно работает.

Ниже привожу изображение печатной платы с описываемой схемой, естественно, нумерация компонентов отличается от указанной на принципиальной схеме — она сквозная для всей коробочки.

image

Если есть вопросы — милости прошу.

Автор: VladSMR

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js