Вы никогда не задумывались, почему в схемах иногда кнопки подтягивают к "+" питания, а иногда к общему проводу? Если прямо сейчас набрать в поиске: "тактовая кнопка ардуино" - то на большинстве картинок мы увидим именно прямое подключение, когда резистор подключен на землю. Но, если посмотреть схемы без участия ардуино, то ситуация меняется в корне, чаще можно будет встретить инвертированное включение. Так как же будет подключать кнопку правильнее? Давайте вместе попробуем разобраться в этом вопросе!
Тактовая кнопка является одним из наиболее часто встречающихся устройств дискретного ввода во встраиваемых системах. И даже появление сенсорных экранов все равно их не вытеснило.
Название данного типа кнопок произошло от английского "tactile button". Слово "tactile" иногда сокращают до "tact", видимо из-за этого в русском языке появилось устоявшееся название "тактовая кнопка". Сама кнопка является нефиксирующейся, т.к. после нажатия кнопка возвращается в исходное состояние. А тактильность подразумевает усиленный эффект щелчка при срабатывании.
Тактовая нефиксирующаяся тактильная кнопка имеет нормально разомкнутый контакт. Т.е. цепь, в которой задействована кнопка, будет разорвана, пока не произошло нажатие. Для опроса состояния кнопки, как правило, используются входы цифровых микросхем, находящиеся в состоянии высокого импеданса (Z-состояние). Электрическое состояние таких входов определяется параметрами внешней схемы.
Чаще всего кнопки устанавливают между выводом микросхемы и общим проводом схемы. Соответственно, при нажатии кнопка может подключать вывод микросхемы на землю, формируя электрический уровень логического нуля.
Чтобы гарантировать устойчивый уровень логической единицы на входе микросхемы, пока кнопка не нажата, необходимо использовать подтягивающий резистор к плюсу питания. Таким образом, если кнопка не нажата, вход микросхемы примет состояние логической единицы. А при нажатии - примет логический ноль.
Обычно сопротивление резистора выбирают 100кОм. Входы CMOS микросхем фактически представляют собой затвор полевого транзистора, сопротивление которого носит емкостной характер, и имеет величину в единицы пикофарад. Если сопротивление подтяжки будет очень большим, то ток, который заряжает входную емкость, может оказаться недостаточным для обеспечения необходимой скорости установки высокого уровня напряжения и его стабильного удержания. Если же сопротивление подтяжки будет очень низким, то это будет дополнительно увеличивать нагрузку на цепи питания при нажатии на кнопку.
Подтягивающий резистор также необходим для предотвращения короткого замыкания между цепями питания при замкнутых контактах кнопки.
Несмотря на то, что при нажатии кнопки на выводе микросхемы считывается логический ноль, а когда кнопка не нажата – единица, такой способ подключения я лично считаю предпочтительнее. Хотя логичнее кажется другое подключение, когда единица считывается при нажатии кнопки.
И все-таки инвертированное включение кнопки применяется чаще. Рассмотрим причины такого выбора. Предположим, что кнопки выведены на лицевую панель прибора и подключены к печатной плате по средством жгута проводов или гибким шлейфом. Как правило, все элементы конструкции подключают к нулевому потенциалу схемы управления (на землю).
Обратите внимание на состав шлейфов. При прямом включении кнопок шлейф содержит проводники обоих потенциалов питания: плюсового и общего. При инвертированном включении кнопок шлейф содержит только общий провод питания.
При замыкании проводников в шлейфе в результате механического повреждения для прямого включения кнопок произойдет короткое замыкание между шинами питания. Для инвертированного включения кнопки в аналогичном случае замыкание цепей питания не произойдет. И схема управления получит меньше электрических повреждений.
Пожалуй, именно по этой причине я предпочитаю инвертированное включение кнопки, и готов из-за этого терпеть некоторые неудобства при программировании.
Еще одна особенность обработки тактовых кнопок связана с несовершенством их механической конструкции. Сухие контакты реальных кнопок ни когда не замыкаются и не размыкаются мгновенно. При замыкании или размыкании возникает дребезг контактов. Т.к. современные цифровые микросхемы имеют достаточно высокие рабочие частоты, дребезг контактов может быть обработан как многократное повторное срабатывание кнопки.
Самый простой способ борьбы с дребезгом контактов, это подключение параллельно кнопки керамического конденсатора примерно 0,1мкФ. При нажатии конденсатор мгновенно разряжается через замкнутый контакт кнопки на землю, и не мешает ее срабатыванию.
А когда контакты кнопки размыкаются, заряд конденсатора происходит значительно дольше через высокое сопротивление подтягивающего резистора, сглаживая эффект дребезга.
Так как современные микроконтроллеры обладают достаточно высокой производительностью, защиту от дребезга преимущественно выполняют программным способом. К тому же, конденсатор – это дополнительный и весьма дорогостоящий компонент, удаление которого из схемы снижает ее себестоимость и повышает технологичность.
Самым простым программным способом борьбы с дребезгом контактов является увеличение времени между опросами состояния кнопки. Дополнительная пауза между опросам должна превышать длительность переходных процессов. Тогда программа “не заметит” дребезг и проигнорирует любые кратковременные замыкания кнопки.
Также стоит отметить, что большинство современных микроконтроллеров имеют встроенные программно управляемые подтягивающие резисторы. Это решение дополнительно позволяет упростить схему устройства.
Комментарии (53)
Indemsys
06.10.2022 14:12+4Все способы в статье имеют общий недостаток.
Кнопки не стоит подключать напрямую к пинам микроконтроллеров, особенно современных, работающих на частотах от 100 Мгц.
Статика от пальцев легко пробивает пины микроконтроллеров. На тактовых кнопках это ещё не сразу будет наблюдаться, а если клавиатура плёночная, то в помещениях с пластиковыми полами и зимой пробой последует прямо сразу.Также на шлейфах легко наводятся наносекундные помехи. Они тоже могут привести к защёлкиванию пинов.
Словом клавиатура должна иметь больше защит.Кстати, кнопки могут ещё и быть в цепи безопасности. Тогда регламенты прямо требуют чтобы она коммутировала плюс, а не землю. Потому что закоротка плюса на массу там рассматривается как менее опасная ситуация по сравнению с ситуацией закоротки кнопки на землю, ибо создаст ложное состояние замкнутой кнопки.
lisovsky1
06.10.2022 15:10Так разве стягивание на "0" не служит защитой от наводок? О же нельзя навести
BigBeaver
06.10.2022 15:27+2Реальный ноль может не быть нолем на всем своем протяжении в каждый момент времени — земляные токи точно так же могут создавать ложные срабатывания, как и наводки на плюсе.
engine9
07.10.2022 00:04Можно сделать как встарину изолировали приборы, используя длинные изолирующие стержни-толкатели а кнопки расположить вглубине устройства.
alexhott
06.10.2022 15:17+4Не помню в ардуино проектах прямого включения(ну или мне не попадались), в основном всегда кнопку сажают на пин и на землю. Резисторы к плюсу ставят часто. хотя о всех контроллерах при иницииации пина можно подключить внутренний подтягивающий резистор и он обычно к плюсу питания.
Сам лично всегда использую подключение кнопки к земле и внутренний подтягивающий резистор, а дребезг контролирую программно, но не паузами а суммой (примерно так: если PIN==0 то кнопка++, если кнопка==200 - то кнопка нажата и делаем действие. Ну и обнуляем счетчик если PIN==1).goginho05
06.10.2022 17:23было время, применял на макете цифровой фильтр под тактовую кнопку, как раз по причине дребезга контактов. отлично отрабатывал свою задачу. единственное, за неимением опыта по оптимизации кода и ресурсов, наваял громоздку прошивку, подминающую львиную долю программной памяти, но благо, не был ограничен в ресурсах. в идеале, конечно, и обвязку делать, и программно отфильтровывать) но это в идеале)
order227
06.10.2022 16:28+6К тому же, конденсатор – это дополнительный и весьма дорогостоящий компонент, удаление которого из схемы снижает ее себестоимость и повышает технологичность
Конденсатор на 0.1 мкФ 6.3В, который стоит менее 1 цента в серии это конечно очень большая экономия.
С такими выводами не удивлен, что 99% электроники нынче откровенное дерьмо, где железо проектируют люди, которые тут же пишут под него софт и еще ТУ и корпус даже нарисуют.
1) Если задача решается аппаратно по цене пыли, то ее надо решать аппаратно. Это и более надежное решение будет и софт, работающий внутри МК, будет заниматься логикой, а не обработкой костыли, который вы навернули. Исключение — МК типа TMS320, где аппаратная защита от дребезга реализована внутри самого МК и тащит на собой лишь конфигурацию IO, но не наворачивание софтварного фильтра.
2) Оба варианта подключения кнопки ужасны. Ну вот поставили вы конденсатор, в момент нажатия кнопки он будет разряжаться через нее огромным током, т.к. ESR/ESL керамики мизерны, в итоге ресурс кнопки будет стремительно падать.
3) Оперирования к «бест практик» в ардуино проектах это конечно сильно, там обычно люди просто копипастят решения и даже не пытаются понять почему именно так сделано. Если уж приводите в пример что-то, то лучше все таки серийные железки производителей, которые занимаются пром. автоматикой, например.
4) Подтяжка резистором к лог. 1 имеет принципиальное преимущество лишь по одной причине — в момент включения io контроллера будет подтянута к лог.1 и вычитывание статуса io и получение этой самой лог.1 в регистре даст информацию о том, что io физически целый и его можно вычитать. Если же подтянуть io к лог.0, а кнопка уже будет замыкать в лог.1, то в случае проблемы будет не совсем понятно это проблема с кнопкой или нога у МК, например, умерла, т.к. в обоих случаях на ноге будет сигнал лог.0 и проблему будет сложнее идентифицировать или реализовать диагностику системы.SuperTEHb
06.10.2022 17:38+4Ну вы уж тоже не не перегибайте палку.
Конденсатор на 0.1 мкФ 6.3В
...
в момент нажатия кнопки он будет разряжаться через нее огромным током
Сколько там будет того тока-то? В конденсаторе на 0,1 мкФ при напряжении 5В будет запасена энергия 1,25 мкДж, а при 3,3 вольта 0,54 мкДж. Предположим, что контакты медные и имеют массу 10 миллиграмм, предположим, что вся энергия выделится на них. Они даже на градус не нагреются. Но вообще согласен, я бы тоже ом на 100 ещё резистор поставил. Если уж ТАК стоит вопрос, то лишним не будет.
железо проектируют люди, которые тут же пишут под него софт
Думаете железо, где программист вообще не одупляет как работает реальная аппаратура, а схемотехник абсолютно не соображает в работе программ будет гораздо лучше? Ну уж нет, тёплое с мягким не путайте. Не каждый схемотехник фиговый программист и наоборот.
Оперирования к «бест практик» в ардуино проектах это конечно сильно, там обычно люди просто копипастят решения и даже не пытаются понять почему именно так сделано
Согласен. Именно это и есть причина почему я считаю, что в данном случае программисту полезно быть немного железячником, как и схемотехнику кодером.
в момент включения io контроллера будет подтянута к лог.1 и вычитывание статуса io и получение этой самой лог.1 в регистре даст информацию о том, что io физически целый и его можно вычитать.
Не факт. Порт может как "выгореть в ноль", так и постоянно читаться в единицу.
order227
06.10.2022 19:09+3Предположим, что контакты медные и имеют массу 10 миллиграмм
Хотел потыкать в физику, но не буду… Процесс протекает быстро, в момент разряда даже 0.1 мкФ 5В будет очень большое значение di/dt, да и теплопроводность контакта крайне ограничена, то есть бесполезно учитывать всю его массу. Гореть будет одна точка, медленно, но верно. Посмотрите как изнашиваются контакты, они не сгорают в одночасье.Не каждый схемотехник фиговый программист и наоборот
Каждый. Если схемотехник пускай 3 часа в день программирует, то он никогда даже близко не приблизится к программисту, который пишет фултайм код. А так же он никогда не приблизится по уровню к схемотехнику, который фултайм пилит железо. Да и самое переключение контекста с софта на железо это всегда замедление процесса.
Можно быть хорошим схемотехником и иметь базовые знания про софтописание. Можно быть хорошим фирмварщиком и понимать базовые вещи про схемотехнику и топологию. А вот сразу и там и там быть одинаково сильным как узкопрофильные спецы уже нельзя, просто в силу того, что вы разное количество времени тратите на свое занятие и им не приходится скакать по задачам.
Кстати, если вы посмотрите любой проект написанный эмбедером-роялем, то это всегда будет лютый говнокод. При этом его железки так же будут крайне далеки от совершенства. Я видел много проектов и собеседовал десятки-сотни людей, так что некое представление и выборку имею.Согласен. Именно это и есть причина почему я считаю, что в данном случае программисту полезно быть немного железячником, как и схемотехнику кодером.
Все так, ключевое слово «немного». Очень хорошо понимать на базовом уровне смежные области, даже механику и дизайн полезно понимать, если ты фирмварщик или схемотехник, но точно не надо этим заниматься профессионально :))Не факт. Порт может как «выгореть в ноль», так и постоянно читаться в единицу
Если порт выгорит в ноль, то цепь оборвется и там будет как раз лог. 0 в регистре. Если же он выгорит так, что там будет КЗ, то тогда микросхема будет греться, 3.3В условные просядут и это будет очевидной проблемой. В момент прогорания КЗ на ноге будет 0В или около того, так что тоже запишется лог. 0 в регистр и никакой 1 кОм резистор не сможет пересилить ток КЗ.SuperTEHb
07.10.2022 11:34+2Хотел потыкать в физику, но не буду… Процесс протекает быстро, в момент разряда даже 0.1 мкФ 5В будет очень большое значение di/dt
Отчего же? Давайте обсудим физику. Рискну предположить, что тут опечатка и должна быть всё-таки производная напряжения по времени, поскольку именно она показывает ток конденсатора и он же ток через контакты. Поправьте, если придумываю лишнего. Теперь вспомним про паразитные индуктивности и сопротивления дорожек и тем более проводов. Получается что и ток уже не такой уж и большой, и по времени не так сконцентрирован, как казалось вначале. Но, повторюсь, в реальности я бы тоже резистор накинул, не призываю полагаться на паразитные параметры.
Каждый. Если схемотехник пускай 3 часа в день программирует, то он никогда даже близко не приблизится к программисту, который пишет фултайм код.
Один пишет код 8 часов в день... Даже давайте 12 часов каждый день в течении уже как 6 месяцев. Другой же человек вот уже 20 лет как ежедневно по 3 часа паяет и по 3 часа кодит. У кого из них будет больше опыта в программировании? Имеются в виду не большие машины с их новыми языками и технологиями, а по нашей теме - микроконтроллеры и Си.
Кстати, если вы посмотрите любой проект написанный эмбедером-роялем, то это всегда будет лютый говнокод.
Тут крыть нечем, даже если бы и захотел. Не лютый говнокод в принципе увидеть это уже удача. Ну и для встраиваемых систем, увы, тоже есть такая тенденция: если для твоей программы не хватает ресурсов, то просто возьми микроконтроллер пожирнее!
Если порт выгорит в ноль, то цепь оборвется и там будет как раз лог. 0 в регистре. Если же он выгорит так, что там будет КЗ, то тогда микросхема будет греться, 3.3В условные просядут и это будет очевидной проблемой.
У нас явно возникло недопонимание. Позвольте попробую переформулировать мысль. Если посмотреть на структуру порта микроконтроллера от STM32 (документ AN4899), то увидим вот такую картину
Кроме защиты от статики остальные узлы симметричны относительно шин питания. Потому нет принципиальной разницы выгорит (пробъётся и закоротит) верхний или нижний каскад, будь то входной или выходной.
Я видел много проектов и собеседовал десятки-сотни людей, так что некое представление и выборку имею.
Ну так-то и я себя не на помойке нашёл. Разрабатываю как раз таки программно-аппаратные узлы или устройства в том числе силовой электроники. Настаиваю именно на связке "программно-аппаратный", поскольку
Да и самое переключение контекста с софта на железо
не рассматриваю это как две отдельные задачи. Настраиваю периферию, а в голове держу как при этом будут переключаться полевики, какие задержки в драйверах, какие режимы мне помогут легче решить задачу сейчас и получить более гибкую систему для настройки. Делая схему, принимаю в расчёт тот факт, что я могу сгенерировать 4 сигнала вместо двух, на тот случай, если будет сподручнее перейти с ШИМ управления мостом на управление сдвигом фаз. И я знаю, что именно на этих вот ногах микроконтроллера это можно будет сделать легко и непринуждённо, даже прямо на ходу, во время работы преобразователя. Если бы я был двумя разными людьми, то взаимодействие между нами было бы отдельной задачей, которая как раз и затрудняла бы разработку всего устройства.
ТУ на корпуса не пишу. Чего нет, того нет.
order227
07.10.2022 12:08-2должна быть всё-таки производная напряжения по времени
Нет, как раз напряжение нас тут особо не интересует, интересует пиковый ток в момент замыкания кнопки, а это легко единицы ампер. Паразитная индуктивность цепей внесет минимальный вклад, единицы нГн, если конечно тополог не поставил конденсатор в километре от кнопки. ESL самого кондера керамического единицы нГн, а ESR десятки мОм в худшем случае. И что тут ограничит ток?Другой же человек вот уже 20 лет как ежедневно по 3 часа паяет и по 3 часа кодит
А если первый 20 лет только и делает что код пишет? К тому же из моего опыта собесов — 20 лет опыта это всегда хуже, чем 2-3 года опыта современного и релевантного. В целом если уж сравнивать, то при прочих равных условиях, а то так можно долго манипулировать.Настраиваю периферию, а в голове держу
Все, что описано дальше не требует быть программистом, достаточно написать парочку пет-проектов и уметь работать с документацией и рефами. В той же силовой электронике все уже придумано и оформлено в типовые решения, достаточно уметь в них посмотреть + обсудить с фирмварщиком «как ему удобно».
У нас на проектах железки с тысячами компонентов и софтовой частью на человеко-годы, было очень странно, если бы один человек-рояль делал и то, и то. Возможно гос компании и готовы ждать пока человек сначала железку сделает месяца за 4, а потом еще за 4 напишет софт, но в приличном мире есть требования к срокам. И вот привлечение 2-х человек со своей узкой и предельно компетентной специализацией всегда дает выигрыш во времени и снижает количество ошибок в проекте.Если бы я был двумя разными людьми, то взаимодействие между нами было бы отдельной задачей, которая как раз и затрудняла бы разработку всего устройства
Это даже близко не так. У BelFuse их dc/dc в формате brick разрабатывает команда из 2-3 схемотехников, 4-5 фирмваре, 1 механика, 1 термоинженера. Может ли один человек сделать тоже самое? Если сильно захотеть — может, вот только качество будет хуже, ошибок допущено больше, цена проекта вырастит, время выхода на рынок устремится к бесконечности.
Я сам много лет работал человеком-роялем, благо вырвался из этого треша. Такой подход это путь в никуда. Исключение очень мелкие проекты, где суммарные затраты на все до 500 человеко-часов.SuperTEHb
07.10.2022 17:04+1В целом если уж сравнивать, то при прочих равных условиях, а то так можно долго манипулировать.
Согласен. Давайте прекратим "если бы да кабы".
Все, что описано дальше не требует быть программистом, достаточно написать парочку пет-проектов и уметь работать с документацией и рефами.
Но и не мешает. Вопрос-то, на самом деле и не об этом вовсе.
В той же силовой электронике все уже придумано и оформлено в типовые решения
Это, мягко говоря, не так. Посмотрите, например, какие фортели в силовых каскадах выдаёт Синкор или Трако. Уже известных и отработанных решений вполне достаточно для любительской практики, но повторяя за другими никогда не получится быть на острие современных технологий.
Может ли один человек сделать тоже самое?
Не могу сказать. Их модули не тестировал, в их компании не работал. Может быть там один копает, остальные руководят, а может быть это и в самом деле совершенно необходимо. Не знаю.
интересует пиковый ток в момент замыкания кнопки, а это легко единицы ампер
Процесс протекает быстро, в момент разряда даже 0.1 мкФ 5В будет очень большое значение di/dt
Так всё же, ток или его производная? Так или иначе, только что собрал макетик на скорую руку и намерил аж 40 А в прыжке! Примерно 50 нс длительностью. Хорошая кнопочка мне попалась, не дребезжит. Но всё ещё не могу понять что можно разрушить столь малой энергией? Ну да, ток большой, но механизм разрушения мне всё ещё непонятен. Впрочем, повторюсь ещё раз, лично я бы резистор поставил хотя бы с точки зрения уменьшения помех.
BigBeaver
07.10.2022 17:19+2лично я бы резистор поставил хотя бы с точки зрения уменьшения помех.
Вообще странно, что люди находят бюджет на конденсатор а на резистор жмотятся, хотя казалось бы это классика построения ФНЧ.
order227
07.10.2022 23:24Впрочем, повторюсь ещё раз, лично я бы резистор поставил хотя бы с точки зрения уменьшения помех
Так я про то и писал в начале :) Это и от помех избавит и ресурс кнопки повысит.Но всё ещё не могу понять что можно разрушить столь малой энергией?
Там в момент нажатия площадь контакта мизерная, так что начинает подгорать как и любой механический «замыкатель». Контакт внутри кнопки не прилегает мгновенно, он не прилегает сразу всей площадью, отсюда и проблема.Может быть там один копает, остальные руководят
Это именно разработчики, менеджер на проекте один. Данная концентрация узких спецов позволяет им выкатить ОЕМ-решение под заказчика за 1-1.5 месяца, тогда как отечественные компании сроков меньше 1 года не называли, а все потому что там 1 человек-завод и сидит колупает, работодатель типа сэкономил.но повторяя за другими никогда не получится быть на острие современных технологий
Я извиняюсь, а кто у нас в стране на острие прогресса из компаний?)) Ни GaN массово ни у кого не видел, ни SiC. Что-то там про технологии в силовухе Аедон может показать (и их дочки), у этих хотя бы есть живые продукты, но даже они не на острие, а в позиции догоняющих.какие фортели в силовых каскадах выдаёт Синкор или Трако
Это детский сад на фоне того, что сейчас уже в проде применяется в datacom или telecom. АВВ, BelFuse, Intel, etc — вот куда надо смотреть. Traco это скорее про индастриал и надежность, но технологии там 5-ти летней давности.
Посмотрел Synqor, самое продвинутое что у них есть это telecom решения с очень низкой плотностью, пара сотен ватт в 1/4 brick это смех же, а не острие прогресса. Тот же Bel уже давно упихивает 1500 Вт 48-12В в том же формате 1/4 brick. Справедливости ради даже Аедон тут интереснее, у них 1000 Вт в тот же габарит.
KbRadar
08.10.2022 15:41+3Сталкивался лично с быстрым износом распространённых кнопок со стоящим параллельно конденсатором 0.1 мкФ. Напряжение 5 В, подтяжка 10 кОм. Проблема решилась когда последовательно кнопке поставили резистор на 220 Ом.
VT100
06.10.2022 19:38+3- Помимо прочего, у механических контактов есть минимальный коммутируемый ток. Так-что 100 кОм — многовато, хотя может и работать. Исходя из этого, параллельный кондесатор на входе, отделённый от кнопки небольшим резистором, — выглядит хорошей альтернативой уменьшению подтягивающего резистора.
- "Кнопка безопасности" — лучше нормально замкнутая, для контроля исправности цепи.
Debianer70
07.10.2022 10:27+2Системы безопасности - например, кнопки аварийного останова, контакты пожарной сигнализации и т.д. - всегда делают на НЗ контактах. Это практически аксиома.
beeptec
07.10.2022 12:24На таких системах, как впрочем и во многих менее серьезных, контакты с их дребезгом мало чем отличаются от кнопок, не говоря об их жизненном цикле и уже давно не в почете. Как правило это NPN или PNP мосфет переключатели.
kh0
07.10.2022 02:03+2На ардуинах коммутируют плюс, потому что нубасам не надо будет дополнительно неинтуитивно морщить мозг: "на входе ноль - значит кнопка нажата."
Все эти хардварные задержки дребезга пришли к нам от дедов эпохи дискретной логики: когда девайс был по факту захардкоженный конечный автомат или когда было жалко тратить ресурсы МПС на такую рутиную изолированную задачу.
Программная обработка дребезга - не зашквар, и даже более того: если у вас отпаяется контакт конденсатора или он сам треснет или бракованный, у вас в софт полезет дребезговое счастье, причем в проде. А еще конденсаторы иногда превращаются в кз, потому что Сатурн встал напротив Водолея угрожая Персею.
Нам Сенсей так и вещал: "все что можете сделать программно - делайте программно" хотя эпоха была еще тру-ассемблерная.
sav13
07.10.2022 06:21+2Ну автор еще только в начале пути )))
Делал контроллер управления вентилятора в ванной.
https://habr.com/ru/post/389751/
На корпусе была кнопка ручного включения. Так как вентиляция для ванной и туалета одна, жена попросила кнопку включения в туалет вынести. Долго ли пробросить 5м провода? Оказалось не все так просто - любая реактивная нагрузка - например, стиралка и ирригатор давали помехи и кнопка периодически самопроизвольно срабатывала. Иногда ночью (стиралка ведь ночью экономичнее!)
Просто добавление конденсатора сильно не изменила ситуацию.Немного лучше стало с уменьшением подтягивающего резистора до 1К
Почти исправили ситуацию два диода в обратной полярности на землю и плюс
Но когда от проекта остался "лишний" контроллер на ESP32 для умной теплицы "психанул" со своей "идеальной кнопкой":
На входе МK оптрон.
Питание кнопки 12В (идеально 24В как в промышленных контроллерах)
Ну и супрессор, отбивающий как статику, так и импульсы обратной полярности
С дребезгом контактов я разобрался давно написав свою библиотеку http://samopal.pro/arduino-button-2/
В принципе Debounce хватает, но я себе расширил функционал для отработки длинного нажатия, атонажатия при удержании, а также счетчика нажатий (двойной клик, тройной и так далее)
ITMatika
07.10.2022 07:12+3Тактовая кнопка, как написать правильно???
ТАКТИЛЬНАЯ!OldFashionedEngineer Автор
07.10.2022 10:04+2В большинстве источников сейчас употребляется понятие "тактовая", для новичков в данном вопросе так проще
BigBeaver
07.10.2022 13:03+4Аудиторию надо воспитывать.
OldFashionedEngineer Автор
07.10.2022 13:46Надо сперва чип и дип воспитать, мне кажется, что это они с алиэкспресса перевели некорректно, а теперь у них все кнопки висят как тактовые.
beeptec
07.10.2022 11:09На ответственных решениях дублируем флип-флоп триггерной копеешной микросборкой c состоянием NPN или PNP с оптопарой, в остальном тема не стоит выеденного яйца.
AlexanderS
07.10.2022 16:19Пожалуй, именно по этой причине я предпочитаю инвертированное включение кнопки, и готов из-за этого терпеть некоторые неудобства при программировании.
Да какие неудобства-то? Программных инверторов по входам понавтыкал — и работаешь дальше как привычно: 1 — нажата, 0 — отжата.
belav
08.10.2022 18:48+1Также стоит отметить, что большинство современных микроконтроллеров имеют встроенные программно управляемые подтягивающие резисторы. Это решение дополнительно позволяет упростить схему устройства.
А вот внутренние подтягивающие резисторы не стоит использовать для кнопок.
OldFashionedEngineer Автор
09.10.2022 02:18Есть какие-то аргументы по этому поводу?
belav
09.10.2022 02:22Нарисуйте схему прохождения импульсной помехи с внешним резистором и внутренним.
atereffigies
09.10.2022 02:16+1То, что кнопки коммутируют к нулю растет из схем с ТТЛ-логикой, которая не чувствительна к высокому уровню. Отсюда же и сигнал сброса нужно тянуть к нулю. К чему эти суеверия и домыслы? В эпоху массового засилия КМОП -- вообще фиолетово.
OldFashionedEngineer Автор
09.10.2022 02:17Можно по подробнее про нечувствительность к высокому уровню?
atereffigies
09.10.2022 05:06+2Если посмотреть на входной каскад вентиля ТТЛ, то там все станет понятно -- ему безразлично, висит вход в воздухе или подан высокий уровень напряжения -- это воспринимается как единица на входе, т.к. ток через входной транзистор течь не будет. При подаче нуля, транзистор входного каскада откроется, т. к. эмиттер подтянется к нулю. По этой же причине все ТТЛ микросхемы хорошо тянут вниз, а вверх они тянуть умеют только чтобы надёжно дозакрыть входной транзистор, только и всего.
OldFashionedEngineer Автор
09.10.2022 10:16+1Хорошее замечание. Я как-то даже не подумал об этом, эта особенность ТТЛ и ТТЛШ мне известна, хотя на практике я использовал только 74hc и cd4000, а они всетаки реагируют на палец. На самом деле в инженерных направлениях много чего делается по привычке. Не исключаю, что у avr, Pic и более менее современных msc51 контроллеров подтяжка портов к + сделана "по привычке", хотя более реалистичной причиной мне кажется совместимость с ОК. Мои предпочтения по подтяжке связаны именно с наличием внутреннего резистора в avr. В моем посте нет мистификаций. Просто многи ардуинщики не в курсе, что у avr есть внутренняя подтяжка к + для входов. Я прочитал много полезных комментариев, и соглашусь, что тему раскрыл поверхностно, изложив только наиболее очевидные факторы.
atereffigies
09.10.2022 10:37Открытый коллектор тоже ведь имеет сильную связь с ТТЛ-логикой. Обычно такие микросхемы использовались для согласования уровней или коммутации нагрузок с большим вольтажом. Хотя, сам я слишком молод, чтобы говорить наверняка, где в массе они применялись))
Кстати, даже если сравнить д-триггеры, казалось бы даже одинаковые по названию (ТМ2) у старых серий ТТЛ и КМОП, то у ТТЛ сброс и установка нулем, а у КМОП -- единицей)
Из моих наблюдений над ардуинщиками -- они все почти плавают в базовых знаниях электроники и схемотехники.
За это их не стоит гнобить, лучше просвещать)
OldFashionedEngineer Автор
09.10.2022 10:53ОК также позволяет обеспечить "монтажное" или при объединении нескольких выходов. А логические микросхемы с ОК и повышенным напряжением в основном делали для управления люминисцентными индикаторами.
С триггерами вообще отдельная тема. На практике у 74hc74 в схемах часто выбивает тактовый вход, если не защитить его резистором.
Если смотреть на цепи сброса микроконтроллеров, есть нюанс. К примеру у avr (at90) сброс инверсный, а у предшественника msc51 (at89) сброс прямой, хотя первые модели at90 были совместимы по выводам.
Цель поста именно в том, чтобы помочь "ардуинщикам" (начинающим электронщикам) разобраться в базовых вопросах.
redsh0927
100к — слишком много, помехоустойчивость будет страдать. 4к7-10к в самый раз.
прижимать к земле куча причин, самое простое например — земля обычно по всей плате доступна в виде заливки, а плюс надо тянуть.
BigBeaver
А еще плюсов может быть несоклько разных (1.7, 3.3, 5, 12, стабилизированный и не стабилизированный и тд и тп) в даже очень простых устройствах (при том даже две разных земли — редкость).
sondern
Линии питания защищают конденсаторами, ставят фильтры чтобы микросхеме не прилетело от других микросхем. А тут просто взять и вывести питание наружу. И получить все наводки какие только можно в свой цифровой вход.
И предложенные схемы не полные при внешних кнопках. Тут ещё нужно ставить супрессоры по входу ещё лучше и хотя бы 10ом последовательно резистор включать. Иначе входы входы микросхем могу гореть от статики. Конденсатор на входе чуть чуть спасет, но только немного.
BigBeaver
Мне кажется, при коммутации на землю поблема статики и длинных линий ни куда не девается. Ну то есть, порт точно так же выбить может.
А вот зашумлять лишний раз питание действительно так себе план. И, раз уж пошло, при выгорании порта замыкание его на питание будет греть микросхему.
OldFashionedEngineer Автор
Сопротвление подтяжки также зависит от длины провода, который кнопку подключает. Но в пределах печатной платы 100к обычно нормально справляется.