Нужно ли деблокировать переключатель при открытии?


8

Предположим, что на входе микроконтроллера имеется подтягивающий резистор до 5 В и подключенный к нему переключатель на землю (нормально разомкнутый). Я знаю, что переключатель должен быть отключен (в моем случае, в программном обеспечении), когда он закрыт, но нужен ли отмена, когда переключатель открыт?

Ответы:


11

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

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

Я считаю, что 50 мс - хорошее время для обсуждения. Большинство переключателей отскакивают гораздо меньше, но некоторые могут быть почти такими же длинными. Но 50 мс все равно будут ощущаться мгновенно для пользователя, поэтому вы можете быть более надежным. Разница лишь в количестве, которое вы считаете в прошивке, поэтому никаких дополнительных затрат там нет. В любом случае у меня обычно есть периодическое прерывание в 1 мс по другим причинам, поэтому, если коммутатор находится в одном и том же состоянии 50 раз подряд в этом прерывании, вы объявляете его отклоненным до нового состояния.

Подробная информация о логике отладки в ответ на комментарий:

Как правило, у вас будет глобальный бит, который указывает на официальное дебатированное состояние коммутатора. Это то, что использует любая логика, которая должна знать, каким образом установлен переключатель. Единственное дополнительное состояние, которое вам нужно, - это счетчик, обычно один байт, в процедуре прерывания. Допустим, прерывание происходит каждые 1 мс, а время ожидания составляет 50 мс. Для каждого прерывания:

Если мгновенное состояние соответствует дебазированному состоянию:
  Сброс счетчика до 50
  Выполнено

Если мгновенное состояние отличается от отклоненного состояния:
  Счетчик декрементов
  Если счетчик достигает 0:
    Объявить новое опровергнутое состояние
    Сброс счетчика до 50
  Выполнено

Некоторое время назад на www.embedded.com была очень хорошая статья. Автор взял несколько переключателей и поместил их между источником питания и входом цифрового хранилища, чтобы посмотреть характеристики отказов. Окончательный вывод заключается в том, что вы не можете выбрать время отката «один размер подходит всем»: вам нужно охарактеризовать каждый конкретный переключатель и посмотреть, как он отскакивает.
Джон Р. Штром

@Джон: можешь дать ссылку? Я не понимаю, почему предположение о максимальном отскоке в худшем случае нельзя использовать для всех коммутаторов, при условии, что оно достаточно короткое, чтобы удовлетворить пользователя. IME 50 мс, которые упоминает Олин, удовлетворяет обоим критериям.
Wouter van Ooijen

Спасибо Олин. Так как же отслеживать, в каком состоянии находился коммутатор за последние 50 прерываний? Я бы увеличил переменную, если переключатель находится в том же состоянии, что и последнее прерывание, очистил бы его, если состояние изменилось, и посчитал, что переключатель отменен, если он достигнет 50. Это эффективный способ сделать это?
Nate

1
Возможно, это не та статья, о которой говорилось выше, но в ней много интересной информации: ganssle.com/debouncing.htm Любой, кто имеет дело с debouncing, должен ее прочитать.
Безоговорочно восстановите

1
@Nate: Смотрите дополнение, чтобы ответить.
Олин Латроп

2

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


1

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


1

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

Однако, если вы управляете прерыванием, скорее всего, вам следует отыграться.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.