Умные способы обнаружения кнопки (меньше энергопотребления)


28

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

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

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

У меня следующий вопрос: каковы умные способы обнаружения нажатой кнопки, которая не потребляет энергии (обычно для приложений с высоким энергопотреблением)? Существуют ли какие-либо методы, которые потребляют мало энергии при нажатии кнопки?


5
Свертывание 10 КБ практически не потребляет энергии. 3,3 В дает 330 мкА. И на большинстве современных микроконтроллеров у вас есть возможность установить один из них, который будет иметь еще более высокое сопротивление. При этом вы можете активировать питание кнопки от вывода MCU через BJT или MOSFET. Активируйте его только во время чтения, и читайте с опросом.
Лундин

27
@Lundin В «современных» терминах, 330 A может быть сильным током ...μ
awjlogan

6
Действительно, многие микроконтроллеры могут получать токи сна до 2-10 мкА. Потеря 30 раз, что на одном понижении довольно печально, особенно в случае с питанием от батареи.
whatsisname

1
Насколько большой резистор вы можете использовать при опускании, зависит от импеданса штыря и от того, какое напряжение они переключают. Допустим, у вас есть контакт 3.3 В в состоянии высокого импеданса, который переключается на 2.4 В, все, что вам действительно нужно, это немного более низкий импеданс, чем вход. Я бы порекомендовал вам подключить потенциометр и измерить, какое высокое значение резистора вы можете использовать, чтобы штырь продолжал работать надежно, а затем уменьшиться на 20%, чтобы сохранить запас.
Пьяный Код Обезьяны

Ответы:


29

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

Один вход / выход был настроен как выход (SWO). Второй был настроен как вход (SWI) с включенным программируемым внутренним подтягиванием.

Состояние переключателя определялось нечасто (каждые 10 мс) с помощью программы программных прерываний. Последовательность считывания была: низкий уровень SWO привода, считывание SWI, высокий уровень SWO привода.

Это означало, что нажатый переключатель пропускал только ток спада SWI через себя и SWO менее 1 мкс во время сканирования, в то время как не нажатый переключатель не потреблял ток. Это потребление тока в течение <1 мкс каждые 10 мс привело к небольшому среднему среднему потреблению тока.


Сомнительно, почему вы нуждаетесь в подтягивании, используя эту технику. Последовательность SWO Low, Read SWI, SWO High, SWI Read может быть достаточной, чтобы определить, соединены ли контакты. Вы также можете поделиться SWO между многочисленными коммутаторами.
Trevor_G

8
@Trevor Оставлять вход плавающим, когда переключатель разомкнут, не очень хорошая идея. В зависимости от технологии это может привести к тому, что входной буфер будет потреблять энергию, если его вход находится в промежуточном состоянии.
RoyC

1
@Trevor Эффективное умножение подтягивающего резистора на рабочий цикл sw1 sw2. Тем не менее подтягивание вернуло нас к схеме ОП 1. Она может работать в среде с низким уровнем шума.
RoyC

2
Разве тот факт, что MCU должен бодрствовать, чтобы выполнять опрос вместо того, чтобы полагаться на прерывание, полностью сводит на нет любое сохранение от более коротких рабочих циклов переключения?
AndreKR

5
Привет @AndreKR, у нас было приложение микроконтроллера с батарейным питанием, и ему нужно было подключить несколько коммутаторов, поэтому мы использовали эту технику, поскольку она была довольно легкой. Мы не вставили MCU только для обнаружения переключателя. MCU потреблял что-то вроде 900 нА в спящем режиме между своими 10 мс прерываниями, так что экономия подтягивания стоила того.
TonyM

23

Двухпозиционный ( S Ingle P оле D ouble Т адача бросать) кнопка будет вашим ультра эффективной кнопки.

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

Источник: http://www.ni.com/white-paper/3960/en/

В вашем случае 1P перейдет к MCU, 1T к VCC, 2T к GND.


+1 ... меня всегда беспокоило, что сверхминиатюрные SPDT либо очень трудно найти, либо стоят слишком дорого ...
Trevor_G

1
@Trevor Да ... некоторые вещи, к сожалению, очень завышены. В то время как другие предметы недооценены (MCU для примера). Вы не можете иметь все это.
Гарри Свенссон

Это отличная идея. К сожалению, мне не удалось найти кнопку SPDT CMS, которая бы соответствовала моим потребностям. Я буду помнить эту схему
vionyst

10

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

Любая из двух схем, которые вы показываете, в порядке, это не имеет значения.

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

Вместо использования внешнего резистора вы также можете использовать встроенный встроенный подтягивающий резистор во многих входах MCU. Этот резистор может иметь относительно низкое значение (возможно, 50 кОм), поэтому при нажатии кнопки будет течь небольшой ток.

Вы можете безопасно использовать даже резистор 1 МОм для подъема / опускания. Только в очень «грязных» (электрически) средах вам может потребоваться меньшее значение. Вы также можете разместить конденсатор емкостью 100 нФ параллельно с переключателем, чтобы подавить помехи от других цепей поблизости.

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

Чтобы определить состояние коммутатора, используйте опрос (как в ответе TonyM) или используйте прерывание . Это зависит от приложения, какое из них лучше для энергопотребления (MCU).


На самом деле кнопка будет кратковременной, но время ее нажатия может быть достаточно продолжительным (минуты)
vionyst

Если устройство работает круглосуточно и без выходных, пара минут все равно может не стоить много. Что важно, так это рабочий цикл, 5 минут каждый час 5 x 60/3600 = 8,3%. Таким образом, даже при токе 100 мкА коммутатор потребляет в среднем 8,3 мкА в моем сценарии. Мое сообщение таково: не сосредотачивайтесь слишком сильно на токе, который коммутатор использует при нажатии, не сравнивая его с текущим потреблением всей системы. Только когда вклады одинаковы, имеет смысл улучшить потребление тока коммутатором. Бесполезно делать переключатель 0,1 мкА, когда MCU непрерывно использует 1 мкА.
Bimpelrekkie

«Бесполезно делать переключатель 0,1 мкА, когда MCU непрерывно использует 1 мкА». это звучит выключено. Я думаю, что вы имеете в виду пик 1uA. 10% только для переключения было бы чрезмерным;)
Trevor_G

@Trevor Не пик, я имею в виду средний ток 1 мкА для MCU, но 0,1 мкА, когда переключатель нажат. В сочетании с переключателем 0,1 A, который будет нажиматься только в течение (относительно) коротких периодов, этот переключатель практически не вносит вклад в общее среднее энергопотребление, поскольку средний ток будет: 100% x 1 мкА + 8,3% * 0,1 мкА = 1,0083 мкА. (8,3% повторно использованы из комментария выше).
Bimpelrekkie

2
Да, это просто читать, как вы имели в виду 0,1 мкА в среднем на коммутаторе Который не был бы неразумным, как DIP-переключатель.
Trevor_G

10

Один метод, который я использовал, использует в своих интересах емкостную природу входов CMOS.

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

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

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

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

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

Питание кратковременно используется во время импульса обновления, как для зарядки конденсаторов, так и через резистор и переключатель, если он замкнут. Однако длина импульса обновления мала, и частота опроса приводит к тому, что ток обновления является относительно незначительным.

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

Для считывания большего количества статических переключателей, таких как настраиваемые DIP-переключатели, можно использовать специальную процедуру, а не непрерывный цикл обновления. После считывания выводы GPIO должны быть «припаркованы» в активном состоянии низкого выхода (нулевой ток), чтобы избежать проблемы плавающих входов.

ПРИМЕЧАНИЕ. Этот метод немного страдает от чувствительности к шуму, если длины трассы велики и проходят через шумную зону. Таким образом, R1 должен быть близко к входному контакту. Тем не менее, я бы не рекомендовал его для подключения переключателя на некотором расстоянии от передней панели где-либо, если вы не добавите дополнительную емкость близко к контакту.


1
Это выглядит очень уязвимым для EMI. Если какая-то форма энергии радио проникает в эту цепь, и я думаю, что все ставки сняты. Хорошая вещь, беспроводные вещи не так уж часто встречаются в наше время :)
Lundin

@ Лундин, это не так плохо, как вы думаете. 30 пФ и мег делают довольно хороший фильтр.
Trevor_G

8

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

Например: R2 / C1 собирают энергию, произведенную нажатием пьезо. D1 предотвращает слишком высокое напряжение С1. R1 истощает C1, когда кнопка отпущена. MCU GPIO должен быть на входе, без режима вытягивания. Вуаля, кнопка обнаружения с нулевым потреблением тока от источника питания.

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab


3
Хм, можете ли вы сделать / спроектировать работающий прототип этого и показать преимущества решений с обычным переключателем, который мы использовали в течение последних 30 лет?
Bimpelrekkie

Конечно. Я добавил пример схемы. Просто создайте это. Преимущество состоит в том, что нулевой ток потребляется от источника питания либо в закрытом, либо в открытом состоянии. Недостатки включают плохое управление усилием, требуемым для активации переключателя (активная цепь была бы лучше, но это мешает очень незначительному преимуществу схемы), и это новая конструкция по сравнению с 30 (300?) Летней конструкцией обычного переключателя.
Хит

Тем не менее, мой калькулятор имеет множество кнопок и работает не менее 5 лет на монетоприемнике. До сих пор не понимаю, как ваше решение принесет какую-либо пользу. Я все еще думаю, что это «решение» несуществующей проблемы. И более дорогой.
Bimpelrekkie

1
О, я согласен! Он соответствует первоначальным критериям «потреблять как можно меньше энергии», но почему экономия менее миллиджоуля на самом деле полезна, трудно себе представить.
Хит

Разве входной импеданс MCU не делает неприятных вещей из-за высокого выходного импеданса пьезо?
Скотт Сейдман

5

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

Есть два хороших подхода к подключению таких переключателей:

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

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


2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.