Как переключить питание микроконтроллера кнопкой?

У меня есть микроконтроллерное устройство с питанием от батареи. В настоящее время я переключаю питание простым выключателем. Я хочу переключать питание одной кнопкой с минимальной модификацией схемы (и, возможно, программы микроконтроллера) и без потребления, когда устройство выключено. Как я могу это сделать?

ДОБАВЛЕНО . Я знаю следующий трюк:

введите описание изображения здесь

Здесь при запуске микроконтроллер устанавливает PB3 в высокий уровень и, таким образом, удерживает питание устройства. Но это не решение моей проблемы, потому что мне нужно еще и выключить устройство, нажав S1.

ДОБАВЛЕНО . Можно ли исключить VT2 из схемы (т.е. микроконтроллер напрямую управляет базой VT1)?

Будут ли кнопки с фиксацией приемлемым решением?
@AndrejaKo: Нет.
Удачи! Один из способов, который я вижу, - это зарядить конденсатор, пока нажата кнопка, а затем попытаться активировать что-то с его помощью, например, полевой МОП-транзистор, но это будет зависеть от времени нажатия кнопки.
@tcrosley Это не дубликат, вопрос, на который вы ссылаетесь, не требует переключения питания при нажатии кнопки, он просто требует, чтобы он включался, позволяя микроконтроллеру выключаться.
@BrunoFerreira хорошо, согласен - я удалил свой предыдущий комментарий. Я добавил линию к микро в этом ответе , но я не включил стабилитрон, как вы сделали в своем ответе, что является хорошим дополнением.

Ответы (4)

Основываясь на предоставленной вами схеме, вы можете просто добавить диод последовательно сразу после переключателя (S1) (катод подключен к переключателю), и вы можете использовать вход, чтобы определить, был ли переключатель снова нажат, если да, выключите ПБ3.
Требуется модификация

Стабилитрон защищает вход PIC от напряжения, поступающего от источника питания.

Какова роль диода?
@ m.Alin Диод здесь позволяет микроконтроллеру определять, когда переключатель отпущен. Если бы у нас не было диода, то при включении VT1 ​​мы бы всегда имели высокий уровень на входе микроконтроллера.

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

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

Согласен, многие мои дизайны в настоящее время даже не имеют кнопки включения/выключения, они просто просыпаются при нажатии кнопки.
Устройство Me содержит также ЖК-дисплей и другие периферийные устройства. Таким образом, я должен выключить его тоже.
@user: Это не значит, что вам нужно выключить микро, только другую логику. Когда микропроцессор думает о включении/выключении, микроконтроллер может управлять питанием других устройств, чтобы они были выключены, когда микроконтроллер спит. Это означает, что у вас есть преднамеренный цифровой выход, который может иметь любую полярность, удобную для включения и выключения, и вам не нужно реализовывать переключение в аналоговом оборудовании.
Несмотря на то, что многие микроконтроллеры имеют очень низкие токи сна, качественные регуляторы стоят дороже, чем дрянные. Регулятор, использующий дополнительные 250 мкА (или даже 2,5 мА), может подойти, если он должен быть активен только тогда, когда устройство используется, но совершенно неприемлем, если он должен быть активен, даже когда устройство «выключено». . Один продукт, который я разработал несколько лет назад, даже не использовал регулятор — вместо этого он использовал три транзистора и около семи резисторов, чтобы обеспечить номинальное 5-вольтовое питание с отключением, управляемым процессором. По меркам «регулятора» его точность по напряжению была действительно отвратительной…
... варьируется примерно на +/- 5% по температуре и напряжению батареи, а его ток покоя не был велик по современным стандартам (вероятно, около 1 мА, если я правильно помню), но он мог производить более 4,75 вольт на выходе с 5,4 вольт на входе , но он был дешев, и его ток «отключения» почти ни к чему не привел. С тех пор, как я это разработал, приличные стабилизаторы стали намного дешевле, но регуляторы с действительно хорошими характеристиками тока покоя по-прежнему имеют надбавку к цене.
@supercat: MCP1700 имеет ток покоя 4 мкА в худшем случае и стоит 0,28 доллара за 100 с.
@OlinLathrop: два 2N3094 и 2N3906 стоят менее 0,07 доллара. Даже если подсчитать, что сборка десяти компонентов стоит один пенни каждый, это все равно экономит десять центов на единицу — если будет произведено 100 000 единиц, это составит 10 000 долларов. Если у продукта не будет такого объема, возможно, не стоит пытаться выжать эти 0,10 доллара; если бы сегодняшние регуляторы были доступны, когда я проектировал эту вещь, и если бы я не знал заранее, насколько хорошо она будет продаваться, я, вероятно, просто использовал бы регулятор с резервным управлением, но моя схема работает и дешевле, чем что-либо еще; нет причин не продолжать использовать его.

РЕДАКТИРОВАТЬ - если подумать, схема ниже (которую я оставлю для справки), вероятно, лучше всего подходит для использования в схемах без микро. Как упоминалось в других ответах, если вы действительно не можете позволить себе несколько мкА, на самом деле не имеет смысла не использовать микро для управления переключателем питания, поскольку он использует меньше компонентов и может точно контролироваться.
Самая простая версия может быть чем-то вроде входа IOC (прерывание при изменении) с подтягиванием, с кнопкой на землю. На микросхему все время подается питание, и она управляет P-канальным полевым МОП-транзистором (с подтяжкой от затвора к истоку) для остальной части схемы. Когда он спит, он позволяет воротам плавать, чтобы отключить цепь.

Эталонная схема:

Переключить переключатель

Сначала P-MOSFET выключен, поэтому на транзисторе Q2 отсутствует базовый ток, который также выключен. Q1 выключен, поэтому Q1c находится на уровне 5 В. Цепь статическая.

Когда S1 (игнорируйте узлы + и -, они предназначены для запуска SPICE) нажимается, 5V на Q1c подключается к базе Q2, включая его. Это притягивает затвор P-MOSFET к земле, а также включает его.
R4 теперь видит 5 В, и когда S1 отпущен, он обеспечивает базу Q2s током, необходимым для того, чтобы держать его открытым (и, следовательно, MOSFET тоже). Q1 также включается, когда ток через R2 заряжает C1 до ~ 600 мВ, в этот момент Q1c <200 мВ (т. е. Q1 включен)
Теперь цепь снова статична.

Когда S1 нажимается снова, Q1 потребляет ток от R4 (который держит Q2 включенным), отключая Q2. R1 поднимает базу MOSFET до 5 В и снова отключает его.

Вот симуляция (высокий уровень V(push) означает, что кнопка нажата):

ToggleSwitchSim

Также мы можем видеть, что после отключения питания ток устремляется к нулю (поскольку C1 разряжается и Q1 выключается), поэтому схема не потребляет энергии в выключенном состоянии (курсор для I(V1) находится на 19,86 с и измеряет 329 нА):

ПереключательПитание

Первоначальная идея схемы принадлежит не мне, а Дейву Джонсу из EEVblog .

Как предположил Бруно Феррейра, самый простой способ заставить кнопку действовать как «выключатель» — это изменить схему, позволив процессору узнать, когда кнопка нажата. Я думаю, что можно достаточно хорошо использовать резисторы для защиты входа процессора от напряжений, превышающих VDD, без необходимости для этого стабилитрона.

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

Ключевой аспект схемы, который может вызвать проблемы, если его игнорировать, заключается в том, что она спроектирована так, что процессор не может включить схему, если его VDD не составляет не менее ~ 3,6 вольт; Я также настроил симулятор так, чтобы процессор всегда пытался включить свой выход, когда его VDD ниже 3,5 вольт. Я видел много проектов, в которых предполагается, что процессоры не будут пытаться выводить высокий логический уровень, когда их мощность уходит. Это предположение может сработать для некоторых партий чипов, используемых в тестировании, но не сработает для других партий чипов, используемых в полномасштабном производстве. Поведение большинства процессоров в условиях пониженного напряжения не указано; хорошая конструкция должна быть разработана таким образом, чтобы поведение процессора в таких условиях не имело значения (небольшое замечание: вероятно, можно с уверенностью предположить, что процессор, специально предназначенные для генерации напряжений, превышающих любое приложенное напряжение, не начнут это делать волшебным образом; Я не думаю, что для этого есть явная спецификация, но я думаю, что в большинстве случаев это можно сделать с уверенностью).