Подключение кнопки к контакту контроллера

8

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

введите описание изображения здесь

Эта схема просто позволяет проверить состояние кнопки изнутри микроконтроллера. Ничего фантастического. Мои вопросы:

  1. Есть ли что-нибудь лучше, чем этот простой дизайн?
  2. Подходит ли значение резистора 100 кОм для наших современных КМОП-устройств, таких как dsPIC30FXXXX, а не для приложений большой мощности?
Кирилл Кобелев
источник
2
1) Не совсем, если только вы не ищете аппаратные средства устранения неполадок. 2) Да.
NickHalden

Ответы:

6

Во-первых, многие микроконтроллеры и контроллеры цифровых сигналов будут иметь внутренние подтягивающие резисторы. Вот пример, Atmel ATMega164.Порт GPIO ATMega164p

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

Будь то 100КΩзначение адекватно зависит. Если это просто переключатель, который будет периодически переключаться пользователем, то 100КΩбудет хорошим выбором для минимизации энергопотребления. Для вещей, которые будут переключаться быстрее, таких как вращающиеся датчики, процесс, который я бы прошел

  1. Найти максимальный ток потребления в техпаспорте
  2. Рассчитайте значение подтягивания, используя закон Ома
  3. Выберите резистор стандартного размера на несколько размеров больше, в зависимости от необходимой скорости
  4. Проверьте и посмотрите, дает ли выбранный размер резистора требуемое время нарастания и спада
  5. Отрегулируйте соответственно

Так что, если максимальный ток потребления на вывод GPIO был 10 мА и работал при 5 В: рзнак равноВязнак равно5В10мAзнак равно500Ω, Сохранение этого значения R как можно меньше позволит учесть самые острые края и самые высокие частоты переключения.

Мэтт Янг
источник
Вы говорите, что из-за емкости провода / трассы у вас будет RC-цепь, которая будет вызывать задержки распространения сигнала в uC, и что при большем R эти задержки распространения могут фактически вызвать неправильное прочтение вращающегося энкодера?
Angelatlarge
Да, паразитные реактивные реакции - это просто факт жизни, с которым нужно сталкиваться все больше и больше, когда частота увеличивается.
Мэтт Янг
Интересно! Я смущен, хотя: если предположить, что паразитная емкость меньше 1 мкФ, с учетом резистора 100 кОм и предположить, что 0,1 мкФ паразитного C, мы получаем постоянную времени около 23 мс (вход = 5 В, выход = 4,5 В). Другими словами, в цепи 5 В, uC будет видеть 4,5 В на входе в восходящем импульсе менее чем за 25 мс. Для того, чтобы ОК пропустил это (при условии, что он не опрашивает), кодер будет генерировать импульсы на частоте 40 Гц или около того. Об этом мы должны беспокоиться?
Angelatlarge
Паразитная емкость обычно находится в диапазоне нано или пико Фарада. Это становится проблемой с поворотными энкодерами на более высоких скоростях. Рассмотрим оптический датчик, который выдает 24 импульса за оборот и вращается со скоростью 1500 об / мин. Выходные прямоугольные волны будут 600 Гц с периодом около 1,2 мс. Это все еще достаточно медленно, чтобы подтягивание минимального размера было бы ненужным, но 100КΩприведет к временам подъема и спада, которые вряд ли будут приемлемыми. Это стоит вопроса самостоятельно.
Мэтт Янг
Правда и правда. Я думал о ручных поворотных энкодерах.
Angelatlarge
4

Вы можете стать проще, чем это.

Просто используйте внутренний подтягивающий / понижающий резистор в вашем микроконтроллере.

100 кОм вполне достаточно, но внутреннее подтягивание может быть немного ниже в некоторых микроконтроллерах, например, в AVR atmega8 это 30-80 кОм для подтяжки сброса и 20-50 кОм для всех остальных выводов ввода / вывода.

miceuz
источник
Вы не можете сказать, что 100 Кб адекватны. Универсального чека не существует, вы должны вычислить значение в соответствии с MCU и устройством, которое управляет контактом на другой стороне.
Blup1980
1
Человек, задающий вопрос, указал кнопку. Я не вижу проблемы с этим ответом.
mjh2007
1
  1. Есть ли что-нибудь лучше, чем этот простой дизайн?


    На лучшее нельзя ответить без конкретных критериев, по которым вы не предоставили. В большинстве случаев, топология, которую вы показываете, в порядке. Два варианта могут быть «лучше» в зависимости от ситуации:

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

    Другой полезный вариант, о котором следует помнить, - это конструкции с низким энергопотреблением, в которых кнопка может быть переключателем, который можно замкнуть на длительное время. В этом случае вы хотите минимизировать длительный средний ток через нагрузочный резистор. Вы делаете его настолько большим, насколько это возможно, но у этого есть ограничения и недостатки, которые делают его слишком большим. Вместо этого вы включаете подтягивание только на несколько мкс за раз, чтобы получить показания кнопки. Если вы проверяете кнопку каждые 1 мс, и подтягивание включено в течение 10 мкс, то средний ток срабатывания уменьшается в 100 раз. С внешним резистором вы используете другой контакт для управления верхней стороной подтягивания. С внутренней подтягиванием вы включаете / отключаете его в прошивке по мере необходимости.

  2. Подходит ли значение резистора 100 кОм для наших современных КМОП-устройств, таких как dsPIC30FXXXX, а не для приложений большой мощности?


    Я уже ответил на это подробно здесь .

Олин Латроп
источник
0

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

введите описание изображения здесь

Конденсатор будет обычным керамическим колпачком 0,1 мк. Резистор будет 10к. Этот сайт имеет полную информацию о том, почему. Короче говоря, схема отказов предотвращает ложную регистрацию микроконтроллером нескольких нажатий при нажатии кнопки. Настройка резистора / конденсатора сглаживает механическое отскок кнопки, чтобы обеспечить устойчивый переход.

проезжий
источник
Электролитические колпачки не любят замыкания. Я регулярно использую 100nF, который отлично работает для моих приложений.
Джиппи
1
@jippie символом было то, что было на изображении, но для этого нужна керамика 100 нф или 0,1 мкф.
прохожий
3
Это не очень хорошая схема устранения неполадок. Во-первых, это только объявляет перерыв, а не делает. Когда кнопка нажата, крышка сразу замыкается. Во-вторых, постоянная времени в 1 мс слишком коротка, чтобы ее можно было использовать. В-третьих, это должно быть подано только на триггерный вход Шмидта. Нормальные входы не любят медленно нарастающие сигналы. Просто снимите шапку и сделайте разбивку в прошивке, которую вам все равно придется делать даже с шапкой.
Олин Латроп
Да, на заглушке make заглушка немедленно замыкается, но любая перезарядка из-за отскока фильтруется нижними частотами, что устраняет любые последствия отскока. Возможно, точнее, debounce on make - это совсем другой механизм, чем debounce on break. Одна мс слишком быстрая, хотя. Мне не нравится использовать эту схему по ряду причин. Однако, если вы управляете прерыванием с указанным пин-кодом, устранение неполадок в прошивке часто не является лучшим решением. Переход к DPST и отладка с помощью триггера SR - довольно хороший метод для этого случая.
Скотт Сейдман
0

РЕДАКТИРОВАТЬ - комментарий, который я сделал ниже, был предназначен для продолжения того, что Олин сказал позже о схеме с конденсатором, чтобы предположительно добавить дебад. Мне жаль, что это кажется не в том месте - может быть, кто-то может это исправить, потому что я, очевидно, слишком слеп или глуп, чтобы понять, как я должен был это сделать !!

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

Энди ака
источник