Он не хотел выключаться

В продолжение старой темы Выключить выключить Поделились тут со мной одним любопытным багом. В общем, некое батарейное устройство, имеет схему включения и выключения примерно следующего типа:

При нажатии кнопки питание от BATT_PWR идет на ON_PWR контроллер запитывается, очухивается и подает на POW_CTRL высокий уровень, который открывает Q1 + Q2, что вызывает шунтирование кнопки и схема встает на самопитание. Диод D1 отрезает питание от кнопки и вывод SW_OFF через резистор R4 прижимается к земле. А когда мы кнопку жмем снова, там появляется высокий уровень, который через SW_OFF интерпретируется как команда на выключение. Процессор опускает POW_CTRL и вся схема выключается.

Собрали, протестили, все работает зашибись. Сделали первую партию устройств, все зашибись, вторую, нормально… А потом устройства, через одно, перестали выключаться. Жмешь выключить, а оно перезагружается. Очевидно что-то идет не так, раз контроллер запускается снова.
Воткнулись осциллографом в линию питания и линию контроля транзистором и была там следующая картина:

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

Это у меня тут, в нарисованном от руки графике, видно, что там есть небольшое повышение напряжения. На деле же оно было ничтожным, на уровне шумов на экране осциллографа. Вот, если приблизить:

В общем, предположение было такое, что по мере просадки напряжения происходило обесточивание блоков устройства, что где-то вызывало колебательный процесс, а может гальванический эффект где сработал. В общем, какая то мелкая фигня, зависящая от случайных факторов в параметрах элементной базы, вызывала повышение напряжения на сотые доли вольта, но его хватило, чтобы система Brown-out detector’a сначала заглушила проц, а потом напряжение чуток поднялось и этого хватило для перезапуска системы Power On Reset’a, а дальше проц запустился и снова поднял питание.

Решилось все дополнительной проверкой, а не нажата ли кнопка питания при включении.

В общем, если будете делать такой метод включения, то слепо включаться, просто получив питание, так себе идея, можно получить внезапный глюк.

Спасибо!!! Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics!!! Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто!!! Сейчас идет заключение договора и подготовка к строительству!

А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок!!!

4 thoughts on “Он не хотел выключаться”

  1. «В общем, предположение было такое, что по мере просадки напряжения происходило обесточивание блоков устройства, что где-то вызывало колебательный процесс, а может гальванический эффект где сработал.»
    Дроссель существенной величины и чисто номинальный набор конденсаторов после него, так?
    У «Brown-out» есть гистерезис и его перебить можно только таким способом.

  2. Когда я придумал такой же принцип питания, я сразу же добавил проверку причин запуска. И если причин небыло, «самоподхват» не активировался. В моем случае было даже сложнее. Устройство должно было активироваться и при подаче питания через USB. Причем, в другом режиме работы.

    1. Забыл добавить. В моем случае на питающей линии был только полевик. Вся кухня с кнопкой, активацией со стороны МК или USB происходила в цепях базы транзистора Q2.

Добавить комментарий для u37 Отменить ответ

Ваш e-mail не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.