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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии (53)


  1. redsh0927
    06.10.2022 14:01
    +16

    100к — слишком много, помехоустойчивость будет страдать. 4к7-10к в самый раз.
    прижимать к земле куча причин, самое простое например — земля обычно по всей плате доступна в виде заливки, а плюс надо тянуть.


    1. BigBeaver
      06.10.2022 14:06
      +2

      А еще плюсов может быть несоклько разных (1.7, 3.3, 5, 12, стабилизированный и не стабилизированный и тд и тп) в даже очень простых устройствах (при том даже две разных земли — редкость).


      1. sondern
        06.10.2022 23:47

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

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


        1. BigBeaver
          07.10.2022 12:11

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

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


    1. OldFashionedEngineer Автор
      06.10.2022 14:14
      -1

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


  1. Indemsys
    06.10.2022 14:12
    +4

    Все способы в статье имеют общий недостаток.
    Кнопки не стоит подключать напрямую к пинам микроконтроллеров, особенно современных, работающих на частотах от 100 Мгц.
    Статика от пальцев легко пробивает пины микроконтроллеров. На тактовых кнопках это ещё не сразу будет наблюдаться, а если клавиатура плёночная, то в помещениях с пластиковыми полами и зимой пробой последует прямо сразу.

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

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


    1. OldFashionedEngineer Автор
      06.10.2022 14:31

      Про цепи безопасности добавлю, хорошее замечание.


    1. lisovsky1
      06.10.2022 15:10

      Так разве стягивание на "0" не служит защитой от наводок? О же нельзя навести


      1. SuperTEHb
        06.10.2022 15:27

        Можно.


      1. BigBeaver
        06.10.2022 15:27
        +2

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


    1. riodesandro
      06.10.2022 17:24
      +2

      В цепях безопасности исползуются контакты на размыкание.


    1. engine9
      07.10.2022 00:04

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


  1. alexhott
    06.10.2022 15:17
    +4

    Не помню в ардуино проектах прямого включения(ну или мне не попадались), в основном всегда кнопку сажают на пин и на землю. Резисторы к плюсу ставят часто. хотя о всех контроллерах при иницииации пина можно подключить внутренний подтягивающий резистор и он обычно к плюсу питания.
    Сам лично всегда использую подключение кнопки к земле и внутренний подтягивающий резистор, а дребезг контролирую программно, но не паузами а суммой (примерно так: если PIN==0 то кнопка++, если кнопка==200 - то кнопка нажата и делаем действие. Ну и обнуляем счетчик если PIN==1).


    1. goginho05
      06.10.2022 17:23

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


  1. ernestocruz
    06.10.2022 16:04
    -1

    думается, мне, этот человек дискредитирует хабр своими постами =)


    1. OldFashionedEngineer Автор
      06.10.2022 17:26
      +7

      Можно более детально?


  1. 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 и проблему будет сложнее идентифицировать или реализовать диагностику системы.


    1. 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 физически целый и его можно вычитать.

      Не факт. Порт может как "выгореть в ноль", так и постоянно читаться в единицу.


      1. order227
        06.10.2022 19:09
        +3

        Предположим, что контакты медные и имеют массу 10 миллиграмм
        Хотел потыкать в физику, но не буду… Процесс протекает быстро, в момент разряда даже 0.1 мкФ 5В будет очень большое значение di/dt, да и теплопроводность контакта крайне ограничена, то есть бесполезно учитывать всю его массу. Гореть будет одна точка, медленно, но верно. Посмотрите как изнашиваются контакты, они не сгорают в одночасье.

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

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

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

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

        Не факт. Порт может как «выгореть в ноль», так и постоянно читаться в единицу
        Если порт выгорит в ноль, то цепь оборвется и там будет как раз лог. 0 в регистре. Если же он выгорит так, что там будет КЗ, то тогда микросхема будет греться, 3.3В условные просядут и это будет очевидной проблемой. В момент прогорания КЗ на ноге будет 0В или около того, так что тоже запишется лог. 0 в регистр и никакой 1 кОм резистор не сможет пересилить ток КЗ.


        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 сигнала вместо двух, на тот случай, если будет сподручнее перейти с ШИМ управления мостом на управление сдвигом фаз. И я знаю, что именно на этих вот ногах микроконтроллера это можно будет сделать легко и непринуждённо, даже прямо на ходу, во время работы преобразователя. Если бы я был двумя разными людьми, то взаимодействие между нами было бы отдельной задачей, которая как раз и затрудняла бы разработку всего устройства.

          ТУ на корпуса не пишу. Чего нет, того нет.


          1. 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 человеко-часов.


            1. SuperTEHb
              07.10.2022 17:04
              +1

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

              Согласен. Давайте прекратим "если бы да кабы".

              Все, что описано дальше не требует быть программистом, достаточно написать парочку пет-проектов и уметь работать с документацией и рефами.

              Но и не мешает. Вопрос-то, на самом деле и не об этом вовсе.

              В той же силовой электронике все уже придумано и оформлено в типовые решения

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

              Может ли один человек сделать тоже самое?

              Не могу сказать. Их модули не тестировал, в их компании не работал. Может быть там один копает, остальные руководят, а может быть это и в самом деле совершенно необходимо. Не знаю.

              интересует пиковый ток в момент замыкания кнопки, а это легко единицы ампер

              Процесс протекает быстро, в момент разряда даже 0.1 мкФ 5В будет очень большое значение di/dt

              Так всё же, ток или его производная? Так или иначе, только что собрал макетик на скорую руку и намерил аж 40 А в прыжке! Примерно 50 нс длительностью. Хорошая кнопочка мне попалась, не дребезжит. Но всё ещё не могу понять что можно разрушить столь малой энергией? Ну да, ток большой, но механизм разрушения мне всё ещё непонятен. Впрочем, повторюсь ещё раз, лично я бы резистор поставил хотя бы с точки зрения уменьшения помех.


              1. BigBeaver
                07.10.2022 17:19
                +2

                лично я бы резистор поставил хотя бы с точки зрения уменьшения помех.
                Вообще странно, что люди находят бюджет на конденсатор а на резистор жмотятся, хотя казалось бы это классика построения ФНЧ.


              1. 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 Вт в тот же габарит.


      1. VT100
        06.10.2022 19:32
        +1

        По ошибке заминусовал с дебильника, извините. Должен был быть плюс.


        1. OldFashionedEngineer Автор
          07.10.2022 00:35
          +1

          Я немного реабилитировал ситуацию.


      1. KbRadar
        08.10.2022 15:41
        +3

        Сталкивался лично с быстрым износом распространённых кнопок со стоящим параллельно конденсатором 0.1 мкФ. Напряжение 5 В, подтяжка 10 кОм. Проблема решилась когда последовательно кнопке поставили резистор на 220 Ом.


  1. order227
    06.10.2022 19:09

    del


  1. VT100
    06.10.2022 19:38
    +3

    • Помимо прочего, у механических контактов есть минимальный коммутируемый ток. Так-что 100 кОм — многовато, хотя может и работать. Исходя из этого, параллельный кондесатор на входе, отделённый от кнопки небольшим резистором, — выглядит хорошей альтернативой уменьшению подтягивающего резистора.
    • "Кнопка безопасности" — лучше нормально замкнутая, для контроля исправности цепи.


    1. Debianer70
      07.10.2022 10:27
      +2

      Системы безопасности - например, кнопки аварийного останова, контакты пожарной сигнализации и т.д. - всегда делают на НЗ контактах. Это практически аксиома.


      1. beeptec
        07.10.2022 12:24

        На таких системах, как впрочем и во многих менее серьезных, контакты с их дребезгом мало чем отличаются от кнопок, не говоря об их жизненном цикле и уже давно не в почете. Как правило это NPN или PNP мосфет переключатели.


  1. kh0
    07.10.2022 02:03
    +2

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


  1. 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 хватает, но я себе расширил функционал для отработки длинного нажатия, атонажатия при удержании, а также счетчика нажатий (двойной клик, тройной и так далее)


    1. evtomax
      07.10.2022 11:00
      +1

      А трансформатор для гашения синфазных помех не пробовали?


  1. ITMatika
    07.10.2022 07:12
    +3

    Тактовая кнопка, как написать правильно???
    ТАКТИЛЬНАЯ!


    1. OldFashionedEngineer Автор
      07.10.2022 10:04
      +2

      В большинстве источников сейчас употребляется понятие "тактовая", для новичков в данном вопросе так проще


      1. BigBeaver
        07.10.2022 13:03
        +4

        Аудиторию надо воспитывать.


        1. OldFashionedEngineer Автор
          07.10.2022 13:46

          Надо сперва чип и дип воспитать, мне кажется, что это они с алиэкспресса перевели некорректно, а теперь у них все кнопки висят как тактовые.


          1. BigBeaver
            07.10.2022 14:17
            +1

            Было бы хорошо.


    1. SuperTEHb
      07.10.2022 13:15

      Не могу найти откуда такое название. Не подскажете?


      1. BigBeaver
        07.10.2022 13:29
        +2

        Tactile button потомучто. Из-за щелчка при срабатывании.


  1. beeptec
    07.10.2022 11:09

    На ответственных решениях дублируем флип-флоп триггерной копеешной микросборкой c состоянием NPN или PNP с оптопарой, в остальном тема не стоит выеденного яйца.


  1. AlexanderS
    07.10.2022 16:19

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

    Да какие неудобства-то? Программных инверторов по входам понавтыкал — и работаешь дальше как привычно: 1 — нажата, 0 — отжата.


    1. BigBeaver
      07.10.2022 17:21

      И вообще это прячется где-то в недрах HAL.


  1. belav
    08.10.2022 18:48
    +1

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

    А вот внутренние подтягивающие резисторы не стоит использовать для кнопок.


    1. OldFashionedEngineer Автор
      09.10.2022 02:18

      Есть какие-то аргументы по этому поводу?


      1. belav
        09.10.2022 02:22

        Нарисуйте схему прохождения импульсной помехи с внешним резистором и внутренним.


  1. atereffigies
    09.10.2022 02:16
    +1

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


    1. OldFashionedEngineer Автор
      09.10.2022 02:17

      Можно по подробнее про нечувствительность к высокому уровню?


      1. atereffigies
        09.10.2022 05:06
        +2

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


        1. OldFashionedEngineer Автор
          09.10.2022 10:16
          +1

          Хорошее замечание. Я как-то даже не подумал об этом, эта особенность ТТЛ и ТТЛШ мне известна, хотя на практике я использовал только 74hc и cd4000, а они всетаки реагируют на палец. На самом деле в инженерных направлениях много чего делается по привычке. Не исключаю, что у avr, Pic и более менее современных msc51 контроллеров подтяжка портов к + сделана "по привычке", хотя более реалистичной причиной мне кажется совместимость с ОК. Мои предпочтения по подтяжке связаны именно с наличием внутреннего резистора в avr. В моем посте нет мистификаций. Просто многи ардуинщики не в курсе, что у avr есть внутренняя подтяжка к + для входов. Я прочитал много полезных комментариев, и соглашусь, что тему раскрыл поверхностно, изложив только наиболее очевидные факторы.


          1. atereffigies
            09.10.2022 10:37

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

            Кстати, даже если сравнить д-триггеры, казалось бы даже одинаковые по названию (ТМ2) у старых серий ТТЛ и КМОП, то у ТТЛ сброс и установка нулем, а у КМОП -- единицей)

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

            За это их не стоит гнобить, лучше просвещать)


            1. OldFashionedEngineer Автор
              09.10.2022 10:53

              ОК также позволяет обеспечить "монтажное" или при объединении нескольких выходов. А логические микросхемы с ОК и повышенным напряжением в основном делали для управления люминисцентными индикаторами.

              С триггерами вообще отдельная тема. На практике у 74hc74 в схемах часто выбивает тактовый вход, если не защитить его резистором.

              Если смотреть на цепи сброса микроконтроллеров, есть нюанс. К примеру у avr (at90) сброс инверсный, а у предшественника msc51 (at89) сброс прямой, хотя первые модели at90 были совместимы по выводам.

              Цель поста именно в том, чтобы помочь "ардуинщикам" (начинающим электронщикам) разобраться в базовых вопросах.