Pull to refresh

Тактовая кнопка, как подключить правильно к "+" или "-"

Reading time 5 min
Views 20K

Вы никогда не задумывались, почему в схемах на Arduino иногда кнопки подтягивают к "+" питания, а иногда к общему проводу? Если прямо сейчас набрать в поиске: "тактовая кнопка ардуино" - то на большинстве картинок мы увидим именно прямое подключение, когда резистор подключен на землю. Но, если посмотреть схемы без участия ардуино, то ситуация меняется в корне, чаще можно будет встретить инвертированное включение. Так как же будет подключать кнопку правильнее? Давайте вместе попробуем разобраться в этом вопросе!

Тактовая кнопка является одним из наиболее часто встречающихся устройств дискретного ввода во встраиваемых системах. И даже появление сенсорных экранов все равно их не вытеснило.

Название данного типа кнопок произошло от английского "tactile button". Слово "tactile" иногда сокращают до "tact", видимо из-за этого в русском языке появилось устоявшееся название "тактовая кнопка". Сама кнопка является нефиксирующейся, т.к. после нажатия кнопка возвращается в исходное состояние. А тактильность подразумевает наличие тактильной обратной связи в виде ощущения порога срабатывания кнопки, т.е. в момент срабатывания контактов происходит усиление механического сопротивления относительно усилия при свободном ходе. Это дает пользователю информацию о там, что нажатие зарегистрировано. Также момент срабатывания кнопки может сопровождаться характерным звуковым щелчком. В общем, это заморочки свойственны в основном компьютерным гикам, вот тут можно почитать подробнее.

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

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

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

Инвертированное включение кажется нелогичным, т.к. логическая единица удерживается на входе микроконтроллера, пока кнопка не нажата.
Инвертированное включение кажется нелогичным, т.к. логическая единица удерживается на входе микроконтроллера, пока кнопка не нажата.

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

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

Прямое включение кнопки. При нажатии микроконтроллер будет считывать логическую единицу. Если кнопка не нажата - то ноль.
Прямое включение кнопки. При нажатии микроконтроллер будет считывать логическую единицу. Если кнопка не нажата - то ноль.

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

Обратите внимание на состав шлейфов. При прямом включении кнопок шлейф содержит проводники обоих потенциалов питания: плюсового и общего. При инвертированном включении кнопок шлейф содержит только общий провод питания.

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

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

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

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

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

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

Самым простым программным способом борьбы с дребезгом контактов является увеличение времени между опросами состояния кнопки. Дополнительная пауза между опросам должна превышать длительность переходных процессов. Тогда программа “не заметит” дребезг и проигнорирует любые кратковременные замыкания кнопки.

Также стоит отметить, что большинство современных микроконтроллеров имеют встроенные программно управляемые подтягивающие резисторы. AVR микроконтроллеры, на основе которых выполнены платы Arduino Uno и Mega, имеют встроенную подтяжку к плюсу питания. Подтяжка может быть активирована программно, если в функцию pinMode передать параметр INPUT_PULLUP. Это решение дополнительно позволяет упростить схему устройства исключив из нее внешние резисторы.

Вывод:

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

❯ P.S.

Вы можете прочитать другие мои статьи по теме программирования Arduino:

  1. Экономим выводы для Arduino. Управление сдвиговым регистром 74HC595 по одному проводу

  2. Блокирующая обработка тактовой кнопки для Arduino. Настолько полный гайд, что ты устанешь его читать

  3. Неблокирующая обработка тактовой кнопки для Arduino. Как использовать прерывание таймера «в два клика» в стиле ардуино

Tags:
Hubs:
+25
Comments 74
Comments Comments 74

Articles