Во время встречи для конкретного проекта меня попросили подумать о том, как обнаружить нажатие кнопки с MCU. Обнаружение должно потреблять как можно меньше энергии. На первый взгляд я подумал, что типичная схема с подтягиванием или опусканием:
смоделировать эту схему - схема, созданная с использованием CircuitLab
Я не учитываю некоторые функции противодействия отскоку, поскольку это выходит за рамки этого вопроса. В любом случае, когда кнопка нажата, общее значение тока, которое течет, зависит от значения резистора. Чтобы минимизировать его (ток), я мог бы увеличить значение резистора, но не так сильно, поскольку, если я прав, это также зависит от величины утечки входного контакта. Кроме того, большой резистор будет восстанавливаться медленно.
У меня следующий вопрос: каковы умные способы обнаружения нажатой кнопки, которая не потребляет энергии (обычно для приложений с высоким энергопотреблением)? Существуют ли какие-либо методы, которые потребляют мало энергии при нажатии кнопки?
источник
Ответы:
Слаботочный метод, который я использовал однажды, заключался в подключении переключателя между двумя выводами ввода / вывода микроконтроллера.
Один вход / выход был настроен как выход (SWO). Второй был настроен как вход (SWI) с включенным программируемым внутренним подтягиванием.
Состояние переключателя определялось нечасто (каждые 10 мс) с помощью программы программных прерываний. Последовательность считывания была: низкий уровень SWO привода, считывание SWI, высокий уровень SWO привода.
Это означало, что нажатый переключатель пропускал только ток спада SWI через себя и SWO менее 1 мкс во время сканирования, в то время как не нажатый переключатель не потреблял ток. Это потребление тока в течение <1 мкс каждые 10 мс привело к небольшому среднему среднему потреблению тока.
источник
Двухпозиционный ( S Ingle P оле D ouble Т адача бросать) кнопка будет вашим ультра эффективной кнопки.
Источник: http://www.ni.com/white-paper/3960/en/
В вашем случае 1P перейдет к MCU, 1T к VCC, 2T к GND.
источник
Как долго кнопка будет нажата? Если это не тумблер (который сохраняет свое состояние), а мгновенный переключатель, то ток, протекающий при нажатии кнопки, в значительной степени не имеет значения из-за короткого времени, в течение которого кнопка фактически закрыта.
Любая из двух схем, которые вы показываете, в порядке, это не имеет значения.
Можно предположить, что утечка и / или ток на входе MCU незначительны . Все микроконтроллеры в настоящее время используют технологию CMOS и имеют практически нулевой входной ток. Так что перестаньте думать об этом, его там нет.
Вместо использования внешнего резистора вы также можете использовать встроенный встроенный подтягивающий резистор во многих входах MCU. Этот резистор может иметь относительно низкое значение (возможно, 50 кОм), поэтому при нажатии кнопки будет течь небольшой ток.
Вы можете безопасно использовать даже резистор 1 МОм для подъема / опускания. Только в очень «грязных» (электрически) средах вам может потребоваться меньшее значение. Вы также можете разместить конденсатор емкостью 100 нФ параллельно с переключателем, чтобы подавить помехи от других цепей поблизости.
Совет от профессионала: зарезервируйте место для такого конденсатора на печатной плате, но не устанавливайте крышку. еще. В случае возникновения проблем: разместите его и посмотрите, поможет ли это.
Чтобы определить состояние коммутатора, используйте опрос (как в ответе TonyM) или используйте прерывание . Это зависит от приложения, какое из них лучше для энергопотребления (MCU).
источник
Один метод, который я использовал, использует в своих интересах емкостную природу входов CMOS.
смоделировать эту схему - схема, созданная с использованием CircuitLab
В цепи над переключателем, когда он замкнут, позволяет понижающему резистору заряжать / разряжать входные емкости GPIO до уровня земли.
Уловка с этой схемой состоит в том, чтобы использовать двунаправленную природу GPIO, чтобы держать вход заряженным до логического высокого уровня, когда переключатель разомкнут.
Процедура управления периодически выводит вывод на высокий уровень или кратковременно включает подтягивание, достаточно продолжительное для поддержания заряда колпачков. В этом случае входной контакт действует как бит динамической памяти и в большинстве устройств удерживает этот заряд в течение значительного и полезного промежутка времени.
При правильной настройке при нажатии кнопки заряд на выводе будет разряжаться быстрее, чем частота обновления. Это условие затем может быть обнаружено как часть алгоритма обновления как чтение перед операцией обновления или использовано для управления прерыванием.
Питание кратковременно используется во время импульса обновления, как для зарядки конденсаторов, так и через резистор и переключатель, если он замкнут. Однако длина импульса обновления мала, и частота опроса приводит к тому, что ток обновления является относительно незначительным.
Очевидно, что этот метод является активным. Если микрофон перевести в спящий режим, состояние переключателя будет неопределенным при пробуждении. Первый цикл обновления после пробуждения должен игнорировать считывание вывода. Кроме того, этот метод не должен использоваться, чтобы разбудить микро. Перед сном также целесообразно включить вывод в качестве низкого выхода, чтобы оставить его в состоянии с нулевым током.
Для считывания большего количества статических переключателей, таких как настраиваемые DIP-переключатели, можно использовать специальную процедуру, а не непрерывный цикл обновления. После считывания выводы GPIO должны быть «припаркованы» в активном состоянии низкого выхода (нулевой ток), чтобы избежать проблемы плавающих входов.
ПРИМЕЧАНИЕ. Этот метод немного страдает от чувствительности к шуму, если длины трассы велики и проходят через шумную зону. Таким образом, R1 должен быть близко к входному контакту. Тем не менее, я бы не рекомендовал его для подключения переключателя на некотором расстоянии от передней панели где-либо, если вы не добавите дополнительную емкость близко к контакту.
источник
Если ваша кнопка представляет собой пьезо-переключатель, то единственная необходимая мощность - это мощность, генерируемая нажатием кнопки.
Например: R2 / C1 собирают энергию, произведенную нажатием пьезо. D1 предотвращает слишком высокое напряжение С1. R1 истощает C1, когда кнопка отпущена. MCU GPIO должен быть на входе, без режима вытягивания. Вуаля, кнопка обнаружения с нулевым потреблением тока от источника питания.
смоделировать эту схему - схема, созданная с использованием CircuitLab
источник
Если устройство должно быть в состоянии оставаться в любом состоянии неопределенно долго, использование SPDT-переключателя будет подходом с наименьшим энергопотреблением, поскольку можно создать статическую цепь, которая не будет потреблять ток, превышающий его собственную внутреннюю утечку и ток утечки из коммутатора. Дополнительное преимущество SPDT-переключателей состоит в том, что они могут быть почти полностью отключены, независимо от того, насколько быстро они работают или насколько грубыми могут быть контакты, при условии, что только один контакт перестает отскакивать, прежде чем другой сначала будет считываться замкнутым.
Есть два хороших подхода к подключению таких переключателей:
смоделировать эту схему - схема, созданная с использованием CircuitLab
Первый подход требует на один резистор меньше, чем второй, но второй будет более терпимым к наложению между двумя полюсами (он будет потреблять ток выше обычного, но не будет закорачивать через источник питания). Обратите внимание, что если коммутатор может войти в состояние, которое является умеренно резистивным в течение длительного периода времени, это может сжечь значительно больший ток, чем обычно, но при нормальном использовании ни один из резисторов не будет передавать какой-либо значительный ток, кроме как в течение короткого момента между время, когда переключатель меняет состояние и выход реагирует.
источник
Используйте внутреннюю подтяжку микроконтроллера, и при обнаружении нажатия отключите подтягивание. Затем иногда включите его на короткое время, чтобы проверить состояние кнопки.
источник