Всем доброго дня.
UPD: тут ниже всякий холивар не по теме, пусть это не вводит в заблуждение. Схема рабочая, ни одного конструктивного комментария там нет.
Борясь с дребезгом контактов тактовой кнопки я изучил все топ10 страниц яндекса (не сайтов, а СТРАНИЦ), а также очень много картинок, выходящих по различным запросам. Таким, как "дребезг контактов", "дребезг К561ИЕ10А", "глюки КМОП", "схемы подавления дребезга контактов на пассивных компонентов", "дребезг контактов без микросхем", "дребезг контактов схема" и так далее. Оговорюсь, что интересовался исключительно аппаратным подавлением, не для присоединения кнопки к контроллеру.
И я не нашел ответа на свой вопрос, как же можно отфильтровать сигнал, подаваемый тактовой кнопкой, очистив его от шумов, вызванных дребезгом. Везде все начинается одинаково (не важно, контроллерщики или электронщики задают вопрос):
1. Мусолят схемы с R
2. Мусолят схемы с RC
3. Всякие умники через сообщение закидывают треш схемами с использованием микросхем, в том числе шмидта.
А люди ищут простой аналоговый способ убрать дребезг контактов от тактовой кнопки, чаще всего DIP, избегая использования 14+ ногих микросхем по различным причинам. Очень часто есть в наличие резисторы, конденсаторы, транзисторы, но никак не тонна микросхем всяких разных. Кроме того, разные серии микросхем порой удивляют результатом. Помимо всего прочего, для многих целей оказывается недостаточным убрать дребезг контактов - ведь фильтр создает такие фронты, которые та же К561ИЕ10А и даже К176ТМ2 отказываются корректно принимать. Согласно осциллографическим исследованиям, они умудряются принять один сигнал за несколько сигналов (особенно счетчик) из-за заваленных фронтов. По той же причине счетчик иногда вообще "пропускает" значения, где 0 и 1 разряды равны нулю, просто пропускает их и все тут (причем за 20 минут не удается ни разу попасть на ноль-ноль). Хочу отметь, что все ТСы просят рабочую схему из простых компонентов, все они получают RC и цифровые схемы и уходят не получив такую схему. И я тоже так вот поискал, не нашел и расстроился. Но... никогда не сдавайся?! Ага.
Раз уж довелось работать с этими капризными сериями (ну вот думал "как раз на этот низкочастотный проект потрачу эти схемы, а то никогда их не применю", а приобрел геморрой на свою голову), то нужно все же довести до конца то, чего не сделали другие. Не захотели, не смогли, смогли и не захотели выкладывать - на их совести. Итак, после исследований с измерительными приборами, чтения даташитов и форумов, практически было доказано 2 вещи (сейчас будет речь именно про счетчик, напряжение питания 9 вольт, кнопка тактовая китайская DIP):
1. Дребезг она почти весь превращает в такты -- глючит
2. Заваленный фронт без дребезга он превращает дребезг внутри у себя, "физика процесса" мне неизвестна, да и плевать на нее, когда есть факт -- в итоге опять глючит
3. Несмотря на тормознутость своих характеристик по сравнению с 74HC, например, она требует реально тепличным фронтов (причем не только счетных, но и на откате). Счетный фронт выше 50нс может вызывать проблемы раз через раз.
Выводы человека, сидящего над этой "проблемой" более 24 часов и не имеющего к науке никакого отношения, так что какашками не нужно тут кидаться. Я сам знаю свое место в пищевой цепи и пишу данный пост для тех, кому нужно подавить дребезг контактов при помощи простых компонентов с наибольшей вероятностью, близкой к 100%. А не для тех, кто опять будет рассказывать, что проще, что оптимальнее, что там надо почитать Шило и так далее. Чем богаты, тем и рады, короч.
Спасибо за понимание.
Итак, подбор цепочек RC ни к чему стабильному не приводит. В этом я убедился, когда подобрав вроде бы успешно шунтирующий кнопку конденсатор, сопротивления с плюс и с земли, впаял в реальную плату и взял просто тупо другую кнопку из того же пакетика. Каково было мое удивление, результат - море глюков. Также меня порадовал результат и по смене микросхемы даже на соседнюю из той же серии (маркировка типа одинаковая рядом с моделью, поэтому типа та же серия, ну покупалось там же и тогда же). Единственное, где подобранные RC работают как надо - это второй счетчик той же микросхемы на той же кнопке, с которой подбиралось. Касаемо конденсатора - 103й (10нф) керамика - почти всегда остается в схеме. А вот сопротивления (именно два, потому что схемы с одним сопротивлениям оставим ардуинщикам - они еще хуже дребежжат из-за короткого замыкания на конденсатор) подбирать можно час и не особо успешно, под некоторые кнопки вообще не удалось подобрать баланс между дребезгом и заваленными фронтами, который счетчик схавал бы. То есть мы здесь пытались собрать все мини импульсы кнопки в кучку, но при этом не сильно завалить фронты - эффективность не шибко велика. Хотя кому-то может показаться достаточным, если за импульсом следует цифровая микросхема, способная выпрямить фронт. Есть также второй тип использования RC в схеме подавления шумов - это просто дать импульс через конденсатор (т.е. он не шунтирует, а идет последовательно ко входу микросхемы), но по факту от дребезга это не спасает, а лишь ограничивает максимальную длину сигнала (т.е. кнопку держим, а импульс уже закончился). Да, часть глюков это уберет, но дребезг свою лепту внесет. Этот способ хорош только если удается подобрать настолько короткий импульс, что он трактуется микросхемой как импульс, но не успевает вобрать в себя последующие шумы. Очень сложно подбирается, после одного раза плюнул, причем при смене кнопки опять же подбирай сначала.
Цифровые приемы со всякими Шмидтами, И-Не, триггерами и так далее я рассматривать не буду- они почти все рабочие, но вот лично у меня не нашлось ни одной "лишней" подходящей микросхемы под 9 вольт, а сидеть согласовывать уровни... не надо говорить, что это сильно проще и интереснее))
Ну и что мы имеем? Транзисторы биполярные, резисторы, диоды, конденсаторы. ЛАдно, почти у каждого наверное есть 555й таймер и его-то я и хотел использовать для формирования правильных импульсов (на нем даже вкл-выкл на обычной тактовой кнопке удалось собрать, не используя никаких триггеров). Но это было планом Б и так им и осталось в силу успеха плана А.
Я пошел по следующему пути:
1. Сгладить сигнал не боясь завалить фронт
2. Заострить фронт
Это вполне логичный план как по мне, но почему-то ни одной схемы мне не довелось увидеть по таком плану, или же таковая была настолько непотребна на вид, что прошла мимо глаз. Собирать все помехи в таксебешный фронт мы уже умеем - достаточно воспользоваться RC, зашунтировав конденсатором кнопку и подтянув к обоим контактам питания сопротивлениями. Здесь нужно определиться, где будет большое сопротивление, а где малое. Это зависит от того, какой сигнал у нас будет постоянным в дежурном режиме. Если ноль, значит большое сопротивление будет между землей и кнопкой, ну и выход на следующий каскад будет с того же узла. Если единица, то наоборот. Ничего хитрого, просто моя схема первый фронт (по нажатию кнопки) ровняет гораздо лучше, чем второй. Если Вам нужно ловить фронт на отжатие кнопки, то извините, но я пока не знаю, чем Вам помочь. Возможно, кто-то из знатоков потом доработает схему или подкинет идею. Ну так вот, значит мы конденсатор быстренько зарядили через кнопку и теперь осталось создать крутой первый фронт и не очень позорный обратный фронт нашего импульса. В этом нам поможет инвертор на одном NPN транзисторе. Но как я ни пытался избавиться от глюков на выходе инвертора, идеального фронта получить не удалось. Добавил за ним второй инвертор - получаем повторитель нашего исходного сигнала после кнопки в более крутом виде. И тут уже лучше - два транзистора хорошо выравнивают первый фронт, он укладывается в 20нс и даже меньше. Но впоследствии комбинацию транзисторов я пересмотрел - честно говоря подсмотрел схему такого включения (на эмиттере общий резистор на землю) на тему изменения формы сигнала. В итоге это всё, что нам нужно - микросхема покорилась, смена кнопок и микросхем глюков не добавляет. Осечек ни одной создать не получилось, на осциллографе 10нс первый фронт и где-то 50нс довольно равномерный обратный фронт.
Много рассуждений и всякого бреда превратились в довольно милую картинку, которую я завещаю всем новичкам, ну и возможно некоторым старичкам, которые захотят в одном из проектов решить именно таким способом. Я специально писал этот текст с упором на поисковик, чтобы он был не на десятой странице. Надеюсь, получилось.
Как воспользоваться схемой. Ну... не серчайте, она актуальна для 9 вольт питания, на другом я не тестил. А вот сейчас потестил - ниже 7 вольт начинаются глюки, так что ищите под пятивольтовки свои номиналы (дорабатывать придется только часть с транзисторами, мне пока это не нужно, поэтому не буду)
Номиналы конденсаторов и резисторов выставлены на картинке, они корректные как на моем макете. Сглаживающий конденсатор корректен вплоть до 10мкф электролит, хотя на схеме я все же избрал 1мкф керамика как оптимальный. Просто чем больше, тем заметнее игнорирование быстрого повторного нажатия кнопки, а в моем случае это не должно быть заметно (пользователь должен проклацать интенсивность шим для светодиодов, поэтому ему нужно дать возможность делать это быстро). Я брал и 22мкф ради интереса, но это пауза больше секунды и для этого должны быть веские основания. Но при этом сам счетчик не глючит - все нажатия единичные. Сопротивления на RC цепочке у кнопки сейчас почти от балды, которые до этого с тестов остались резисторы, такие и стоят. Роль они свою выполняют, один быстро заряжает конденсатор через кнопку, другой медленно разряжает его после отпускания кнопки.
Транзисторы я взял левый 2N3904, а правый C3355. Логики особой в этом не было брать разную модель, просто на макетке этой уже были воткнуты с прошлых тестов - их и взял. Оба высокочастотные, поэтому с ними и тестил (один 300мгц, второй 6.5ггц). Будьте внимательны с их выводами, на 2N3904 база посередине, а эмиттер с коллектором попадались и как в даташите и перепутанными между собой. А у C3355 база скраю, что бесконечно раздражает.
UPD. Наилучший результат показывает схема когда оба транзистора C3355 (6.5GHz NPN). Если Ваши транзисторы не потянули ровный фронт, то мне известен способ улучшить фронт увеличением резистора 510ом до 1000ом или даже до 2000ом, но не более. Этим мы жертвуем точностью нуля (ноль поднимется вплоть до 2-3 вольт или выше, но фронты станут ровнее).
Ну а если будет влом возиться с транзисторами (и особенно подбирать под 5 вольт питание), то не сбрасывайте со счетов 555 таймер в качестве формирователя импульса. С одной лишь оговоркой, что туда на вход нужно будет подавать одиночный импульс поставив между кнопкой и запуском (TRG) конденсатор эдак от 1нф до 1мкф и откалибровав RC таймера таким образом, чтобы выход таймера (OUT) выдавал сигнал не меньше, чем длится входной импульс. Таким образом Вы избежите дребезга - он будет просто проигнорирован, потому что таймер в моностабильном режиме будет
Если вдруг мне потребуется собрать вариант с таймером, который я сделал, проверил и разобрал, не записав схему... да да, я с него начинал... то тоже выложу. Он осечек не давал и от кнопок не зависел.
- Вложения
-
- Фильтр дребезга для КМОП на транзисторах.jpg
- (141.65 KiB) Скачиваний: 1295
Последний раз редактировалось
LastHopeMan Сб ноя 20, 2021 14:19:21, всего редактировалось 2 раз(а).