Отменяющие кнопки

32

Недавно я прочитал статью о том, как отлаживать кнопки, и мне было интересно, стоит ли об этом помнить при работе, например, с Arduino (ATMega mC)? Я предполагаю, что это проблема, особенно при работе с прерываниями.

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

Винсент Ван Ден Берге
источник

Ответы:

17

Я настоятельно рекомендую подключить прицел (надеюсь, у вас есть один или вы можете его использовать) к своему коммутатору. Я видел проект студента, у которого был скачок на переключателе, который снизился с 5 В до -5 В до 4 В до -3 В, затем до 2 В, затем снова до 0 В. Когда мы смотрели на текущую ничью на прицеле, был какой-то очень очень большой всплеск.

В его конкретном случае ему было очень и очень необходимо разобрать аппаратный коммутатор.

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

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

Kellenjb
источник
Я установил изображение отказов переключателя и разместил его в Википедии: en.wikipedia.org/wiki/File:Switch_bounce.JPG
Thomas O
@ Томас О, это довольно забавная картина отказов. Я просто хочу убедиться, что @Vincent Van Den Berghe понимает, что не все отскоки будут выглядеть так. Этот отскок ограничен 0-5В, он не всегда будет выглядеть так.
Келленжб
2
@ Томас О, как примечание, мы создали практику неудачных учеников, которые делают подобные снимки в Oscope. Вспышка на экране ужасна. Мы также делаем еще один шаг вперед и подталкиваем учащихся собирать фактические данные, используя что-то вроде CSV или лабораторного обзора, чтобы его можно было легко использовать в отчетах и ​​анализе данных.
Келленжб
@Kellenjb, я скоро получу принтер для своей области, который поддерживает HP-IB. Также я обнаружил, что режим «Спорт» на моей камере может делать хорошие снимки экрана прицела без вспышки и размытия.
Томас О
1
@Lundin В режиме реального времени вы сильно зависите от прерываний. Если у вас есть нажатие кнопки на прерывании, вы не хотите, чтобы ваша система реального времени была прервана несколько раз одним нажатием кнопки. Вы также не хотите выделять ресурсы для ожидания в течение 10 мс.
Kellenjb
15

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

Независимо от того, используете ли вы программное обеспечение или аппаратное обеспечение, вам все равно придется выбирать качественные кнопки. Печально известная кнопка 157мс из статьи просто не подходит ни для какого приложения.
Я обычно пробую кнопку с интервалами 32 мс , что достаточно, чтобы преодолеть время отказов любой хорошей кнопки. Я большой поклонник Alps SKQG TACT Switches.

Альп тактический переключатель

На тех немногих устройствах, которые я тестировал, начальное время отказов было менее 10 нс. Несмотря на то, что срок его службы составляет 100 000 циклов, мы проверили его на 200 000 циклов, и даже тогда было достаточно 32 мс. (Полагаю, мне следовало измерить фактический уровень отказов, но в то время нашим основным интересом было поведение конечного продукта. В любом случае, мы использовали его вне спецификации.)

Если вам действительно нужно аппаратное решение, я рекомендую решение SR триггер, упомянутое в статье, как технически лучшее решение:

схема отказов

Триггер может быть построен с двойным NAND- шлюзом, который, например, доступен в небольшом пакете VSSOP8. Основным недостатком этого решения является то, что вам нужна кнопка SPDT, где SPST гораздо более доступен.

stevenvh
источник
12

Есть много (и много) различных способов отменить кнопки. Делаете ли вы это в программном или аппаратном обеспечении, зависит от требований вашего проекта и типа коммутатора.

Вот несколько ссылок на разные методы:

http://www.ganssle.com/debouncing.htm

http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/

Тоби джеффи
источник
Я собирался пойти получить ссылку на ganssle, когда я увидел вопрос.
Кортук
Статья ganssle была причиной, по которой я задал этот вопрос, она связана в моем вопросе :) Спасибо за ссылку на фрагменты кода debounce.
Винсент Ван Ден Берге
Не могли бы вы суммировать несколько вариантов использования, чтобы проиллюстрировать, когда следует использовать программное обеспечение или аппаратное обеспечение? (это, вероятно, субъективно, но я все равно хотел бы привести несколько примеров)
Винсент Ван Ден Берге
1
@ Винсент, Келленжб подвел итог своему ответу, как решить. Я не нажимал на вашу ссылку, потому что у нее было забавное имя, теперь, когда я щелкнул по ней, я вижу ganssle!
Кортук
Если это правило консенсуса / общего порядка, тогда действительно нет необходимости в дополнительных примерах.
Винсент Ван Ден Берге
6

Эта статья является "библией" о разоблачении. Отказов контактов может быть проблемой с любым приложением.

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

Леон Хеллер
источник
Почему люди голосуют за это?
Тоби Джаффей
Хороший вопрос о деблокировании ключевого релиза!
Винсент Ван Ден Берге
1
Я не отрицал это, но просто сказать, что делать это в программном обеспечении - ужасная идея. Это хорошая идея для характеристики.
Кортук
Я сказал «в общем», который имеет место, и дал причину. Это также минимизирует стоимость спецификации и повышает надежность.
Леон Хеллер
это только увеличивает надежность, если сигнал остается в безопасных пределах вашего контроллера. Это действие повысит надежность, если уменьшить количество компонентов без увеличения износа компонентов. Я не говорил, что я не согласен с вашей концепцией постов, но я постоянно работаю с инженерами, которые просто выходят на поле и получают ответ, подобный этому, и они будут обсуждать все в программном обеспечении. Вы всегда должны характеризовать. Я также не отрицал вас, но и не голосовал, я думаю, что широкий ответ, такой как программное обеспечение, рискует для новых разработчиков, рискуя своим оборудованием.
Кортук
1

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

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

JustJeff
источник
Наличие переключателя для вызова прерывания - хорошая идея. Но как только вы его получите, не допускайте дальнейших прерываний - отключите их и вместо этого запустите таймер на указанное время отката.
Лундин
@Lundin - если доступны таймеры, вы можете просто использовать таймер для реализации опроса, и не беспокоиться о том, чтобы коммутатор вообще генерировал прерывания.
JustJeff
0

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

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

forever loop
   wait (at least) 50 ms
   check buttons
   do procesing
end loop
Воутер ван Оойен
источник
И используйте для этого встроенные в микросхемы таймеры.
Лундин
Это конечно возможно, но вы можете написать много программ без.
Wouter van Ooijen
3
Профессиональное программное обеспечение в качественных продуктах всегда будет использовать встроенные таймеры. Любители могут сойти с рук с некоторым "NOP" для петли или мертвого опроса ожидания. Но нет никакой причины делать это в реальных продуктах, независимо от ваших требований в реальном времени. «Я не знаю, как работает таймер, и для этого ленивого« я »требуется 10 секунд», - не является веским аргументом для инженера.
Лундин
Bullocks. Профессионалы должны быть эффективными, что (в зависимости от рассматриваемого проекта) может означать (среди прочего) «максимально эффективно использовать оборудование» или «использовать время профессионала настолько эффективно, насколько это возможно». Таким образом, ваш приход, безусловно, применяется в некоторых случаях (вероятно, во всех случаях, с которыми вы имели дело), ​​он, безусловно, не применяется во всех случаях.
Воутер ван Оойен
Реализация встроенного таймера занимает не более часа вашего времени. Вряд ли это что-то сложное, это каждодневная разработка хлеба и масла. Вы даже не можете потратить один час на свой проект, чтобы получить значительно лучшее решение и в целом лучшее качество? Да, хорошо ... если вы не очень разбираетесь в программировании, это может занять неделю. Но тогда, возможно, вам не следует сначала работать с программным обеспечением ... или, возможно, вам следует больше работать с ним, чтобы вы научились реализовывать эту простую мелочь в кратчайшие сроки.
Лундин
0

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

Supercat
источник