Как стать автором
Обновить

Комментарии 74

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

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

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

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

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

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

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

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

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

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

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

Можно.

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

Зато "-1" запросто

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

Вы видели, как реализуют кнопку открывания дверцы микроволновки? К примеру, на самсунгах три концевика. Если нарушается порядок их срабатывания, то накоротко замыкается питание магнитрона, и перегарает предохранитель.

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

>>> Статика от пальцев легко пробивает пины микроконтроллеров.

Это утверждение истинно для p-mos или n-mos технологий. У cmos на входе стоят два диода, которые защищают вход от статики.
https://toshiba.semicon-storage.com/ap-en/semiconductor/knowledge/faq/logic_common/logic_common_18.html
С наносекундными помехами борются уменьшением входного сопротивления (тот самый резистор, который притягивает кнопку к пюсу или минусу) и установкой параллельно конденсатора.
Как то так.

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

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

Так если PIN==1 и счетчик сбросить, то это просто повтор дребезга.

Дребезг конечен во времени. Данный алгоритм как раз предотвращает накопление счетчика, пока дребезг не завершится.

возможно ошибся, давно делал, но как ниже написали и так будет работать(пока дребезг просто накапливаться не будет), проверка на отжатие кнопки и сброс счетчика может быть уже внутри выполнения операции в конце алгоритма

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

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

НЛО прилетело и опубликовало эту надпись здесь

Ну вы уж тоже не не перегибайте палку.

Конденсатор на 0.1 мкФ 6.3В

...

в момент нажатия кнопки он будет разряжаться через нее огромным током

Сколько там будет того тока-то? В конденсаторе на 0,1 мкФ при напряжении 5В будет запасена энергия 1,25 мкДж, а при 3,3 вольта 0,54 мкДж. Предположим, что контакты медные и имеют массу 10 миллиграмм, предположим, что вся энергия выделится на них. Они даже на градус не нагреются. Но вообще согласен, я бы тоже ом на 100 ещё резистор поставил. Если уж ТАК стоит вопрос, то лишним не будет.

железо проектируют люди, которые тут же пишут под него софт

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

Оперирования к «бест практик» в ардуино проектах это конечно сильно, там обычно люди просто копипастят решения и даже не пытаются понять почему именно так сделано

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

Отчего же? Давайте обсудим физику. Рискну предположить, что тут опечатка и должна быть всё-таки производная напряжения по времени, поскольку именно она показывает ток конденсатора и он же ток через контакты. Поправьте, если придумываю лишнего. Теперь вспомним про паразитные индуктивности и сопротивления дорожек и тем более проводов. Получается что и ток уже не такой уж и большой, и по времени не так сконцентрирован, как казалось вначале. Но, повторюсь, в реальности я бы тоже резистор накинул, не призываю полагаться на паразитные параметры.

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

Один пишет код 8 часов в день... Даже давайте 12 часов каждый день в течении уже как 6 месяцев. Другой же человек вот уже 20 лет как ежедневно по 3 часа паяет и по 3 часа кодит. У кого из них будет больше опыта в программировании? Имеются в виду не большие машины с их новыми языками и технологиями, а по нашей теме - микроконтроллеры и Си.

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

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

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

У нас явно возникло недопонимание. Позвольте попробую переформулировать мысль. Если посмотреть на структуру порта микроконтроллера от STM32 (документ AN4899), то увидим вот такую картину

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

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

Ну так-то и я себя не на помойке нашёл. Разрабатываю как раз таки программно-аппаратные узлы или устройства в том числе силовой электроники. Настаиваю именно на связке "программно-аппаратный", поскольку

Да и самое переключение контекста с софта на железо

не рассматриваю это как две отдельные задачи. Настраиваю периферию, а в голове держу как при этом будут переключаться полевики, какие задержки в драйверах, какие режимы мне помогут легче решить задачу сейчас и получить более гибкую систему для настройки. Делая схему, принимаю в расчёт тот факт, что я могу сгенерировать 4 сигнала вместо двух, на тот случай, если будет сподручнее перейти с ШИМ управления мостом на управление сдвигом фаз. И я знаю, что именно на этих вот ногах микроконтроллера это можно будет сделать легко и непринуждённо, даже прямо на ходу, во время работы преобразователя. Если бы я был двумя разными людьми, то взаимодействие между нами было бы отдельной задачей, которая как раз и затрудняла бы разработку всего устройства.

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

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

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

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

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

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

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

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

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

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

Не совсем это имел в виду. Характеристики характеристиками, здесь ничего сказать не хочу. Я про внутреннюю структуру. Там зачастую применяются весьма нетривиальные силовые контуры. Просто из учебника их взять не получится. Многие из них запатентованы.

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь

Во-во, они. Такие раскоряки иной раз встречаются, что диву даёшься.

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

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь
Системы безопасности — например, кнопки аварийного останова, контакты пожарной сигнализации и т.д. — всегда делают на НЗ контактах. Это практически аксиома.
И не одну ставят, а пару.

Я где-то в примере приводил микроволновку. Чтоб потраха пользователю не прожарить, там три контакта есть, и важен даже порядок их срабатывания. Нет так сработало, питание замыкает накоротко и жжет предохранитель

Я имел в виду не бытовую технику, а промышленное оборудование :) Там, правда, не такие кнопки ставят, а немного покрупнее.

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

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

Я примерно об этом и написал. Только отношение к новичка у меня, похоже, более лояльное.

Ну автор еще только в начале пути )))

Делал контроллер управления вентилятора в ванной.

https://habr.com/ru/post/389751/

На корпусе была кнопка ручного включения. Так как вентиляция для ванной и туалета одна, жена попросила кнопку включения в туалет вынести. Долго ли пробросить 5м провода? Оказалось не все так просто - любая реактивная нагрузка - например, стиралка и ирригатор давали помехи и кнопка периодически самопроизвольно срабатывала. Иногда ночью (стиралка ведь ночью экономичнее!)

Просто добавление конденсатора сильно не изменила ситуацию.

Немного лучше стало с уменьшением подтягивающего резистора до 1К

Почти исправили ситуацию два диода в обратной полярности на землю и плюс

Но когда от проекта остался "лишний" контроллер на ESP32 для умной теплицы "психанул" со своей "идеальной кнопкой":

На входе МK оптрон.

Питание кнопки 12В (идеально 24В как в промышленных контроллерах)

Ну и супрессор, отбивающий как статику, так и импульсы обратной полярности

С дребезгом контактов я разобрался давно написав свою библиотеку http://samopal.pro/arduino-button-2/

В принципе Debounce хватает, но я себе расширил функционал для отработки длинного нажатия, атонажатия при удержании, а также счетчика нажатий (двойной клик, тройной и так далее)

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

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

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

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

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

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

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

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

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

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

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

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

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

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

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

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

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

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

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

Это хорошее замечание. У AVR по изменению уровня можно.

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

Публикации

Истории