Подтягивающие резисторы

В своем стремлении понять электротехнику я наткнулся на этот учебник:

http://www.ladyada.net/learn/arduino/lesson5.html

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

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

Реализация:

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

Основываясь на схеме, я думаю, что происходит следующее: питание поступает на переключатель, если кнопка нажата, значит, цепь не замкнута. Если кнопка нажата, ток идет по пути наименьшего сопротивления к контакту 2, потому что он имеет большую тягу (100 Ом < 10 кОм).

То, как это описано в учебнике, звучит так: когда кнопка нажата, цепь все еще цела, но резистор 10 кОм тянет питание на землю. Я не уверен, как и почему, если и 10 кОм, и 100 Ом получают одинаковый ток, ток будет притягиваться к земле через более высокое сопротивление, чем открыт на контакт 2.

В стороне: попытайтесь думать о цепи с точки зрения того, какое напряжение будет в каждой точке, а не о том, где протекает ток. Это помогло мне понять, когда я впервые изучал EE.
Я немного разочарован качеством ответов на этот вопрос. Вместо этого я предлагаю посмотреть это видео от AddOhms. . Я недостаточно понимаю эту концепцию, чтобы объяснить ее, но ни один из ответов здесь на момент написания статьи даже не говорит о том, что вызывает плавающее состояние или как подтягивание вверх или нажатие вниз решает проблему.
@EvanCarroll С другой стороны, вопрос на момент написания не касается тех вещей, которые вас интересуют.

Ответы (6)

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

  • Если кнопка нажата, P2 будет напрямую подключен к +5 В, так что это будет рассматриваться как высокий уровень, равный «1».
  • Если кнопку отпустить, +5 В больше не учитываются, остается только 10 кОм между портом и землей.

Вывод ввода-вывода микроконтроллера имеет высокий импеданс при использовании в качестве входа, что означает, что через него протекает лишь небольшой ток утечки, обычно намного меньше 1 мкА, который будет максимальным согласно техническому описанию. Хорошо, допустим, это 1 мкА. Тогда по закону Ома это вызовет падение напряжения на 1 мкА. × 10 кОм = 10 мВ на резисторе. Таким образом, на входе будет 0,01 В. Это низкий уровень или «0». Типичный микроконтроллер на 5 В воспринимает любой уровень ниже 1,5 В как низкий.


Теперь резистор 100 Ом. Если бы вы случайно сделали пин-вывод и установили низкий уровень, то нажатие на кнопку вызовет короткое замыкание: микроконтроллер установит на пин 0 В, а переключатель +5 В на тот же пин. Микроконтроллеру это не нравится, и микросхема может выйти из строя. В этих случаях резистор 100 Ом должен ограничивать ток до 50 мА. (Что все же слишком много, резистор на 1 кОм был бы лучше.)

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

10 кОм является типичным значением для подтягивания или понижения напряжения. Более низкое значение даст вам еще меньшее падение напряжения, но 10 мВ или 1 мВ не имеют большого значения. Но есть еще кое-что: если кнопка нажата, на резисторе есть 5 В, поэтому будет протекать ток 5 В / 10 кОм = 500 мкА. Это достаточно мало, чтобы не вызвать никаких проблем, и вы все равно не будете держать кнопку нажатой в течение длительного времени. Но вы можете заменить кнопку выключателем, который может быть замкнут на долгое время. Тогда, если бы вы выбрали понижающее сопротивление 1 кОм, у вас было бы 5 мА через резистор, пока переключатель замкнут, и это пустая трата времени. 10 кОм - хорошее значение.


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

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

Это инвертирует вашу логику: нажатие кнопки даст вам «0» вместо «1», но принцип работы тот же: нажатие кнопки сделает ввод 0 В, если вы отпустите кнопку, резистор подключит вход на уровень +5 В (при незначительном падении напряжения).

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

Я не думаю, что из этого ответа понятно, как метод Push-Down решает проблему с плавающим состоянием.

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

Если переключатель отключен (не нажат), единственный возможный путь для тока — от P2обоих резисторов к земле. Таким образом, микроконтроллер будет считывать НИЗКИЙ уровень.

Если переключатель подключен (нажат):

  • Ток проходит от источника питания через переключатель

  • Некоторый ток проходит через резистор 100 Ом до P2. Микроконтроллер покажет HIGH.

  • Небольшой ток будет протекать через резистор 10 кОм на землю. По сути это зря потраченная мощность.

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

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

Вход имеет высокий импеданс, что означает, что через него вряд ли будет протекать ток. Нулевой ток через резистор означает нулевое напряжение на нем (закон Ома), поэтому 0 В на одной стороне также будет 0 В (или очень близко) на входном контакте.

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



См. также этот ответ .

Я не думаю, что из этого ответа понятно, как метод Push-Down решает проблему с плавающим состоянием.

Резистор 10 кОм называется подтягивающим резистором, потому что, когда «зеленый» узел (при подключении резисторов 100 Ом и 10 кОм) не подключен переключателем к +5 В, этот узел притягивается к земле (при условии низкого тока через эту ветвь). , очевидно). Когда переключатель замкнут, этот узел получает потенциал +5В.

Это используется для управления входами логических ИС (элементы И, элементы ИЛИ и т. д.), поскольку эти схемы будут вести себя хаотично, если на их входах нет определенного значения (значение 0 или 1). Если вы оставите вход логического элемента плавающим, выход нельзя будет надежно определить, поэтому рекомендуется всегда подавать определенный вход (опять же 0 или 1) на вход элемента. В этом случае P2 будет входом для определенного логического элемента, и когда переключатель разомкнут, он имеет входное значение 0 (GND); когда переключатель замкнут, его входное значение равно 1 (+5 В).

ток идет по пути наименьшего сопротивления

Я не уверен, откуда взялось это распространенное заблуждение, но оно действительно ошибочно, так как прямо противоречит закону Ома. Ток проходит по всем возможным путям обратно пропорционально их сопротивлению. Если вы приложите 5 В к резистору 10 кОм, через него будет протекать 0,5 мА, независимо от того, сколько альтернативных путей (с низким сопротивлением или нет) вы предоставляете.

Между прочим, этот путь через резистор 100 Ом не обязательно является «наименьшим сопротивлением», так как резистор не подключен к земле . Как правило, вы подключаете этот резистор к входу MCU с импедансом> 10 МОм, эффективно делая резистор 10 кОм путем наименьшего сопротивления.

Причина, по которой требуется подтягивающий резистор, заключается в том, что микроконтроллер представляет собой КМОП-устройство, и поэтому входной контакт в конечном итоге является затвором MOSFET.

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

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

Напротив, вход вашего микроконтроллера представляет собой затвор MOSFET, который действует как конденсатор. Когда напряжение на затворе достаточно высокое, вход «включен». Это происходит, когда вы нажимаете кнопку, и ток течет через резистор 100 Ом в микроконтроллер. Ворота заряжаются (очень быстро), как конденсатор, и вход становится «включенным». Что теперь происходит, когда вы отпускаете кнопку? Нет больше текущих течений. Но что это значит для ввода? Если нет подтягивающего резистора, то заряду на затворе деваться некуда. Напряжение будет просто около 5 В, а вход все еще будет «включен». Подтягивающий резистор разряжает заряд затвора, поэтому его напряжение падает ниже уровня «включено». Это то, что вы хотите, чтобы цифровой вход считался «выключенным».

Вы можете поэкспериментировать с этим, подключив две кнопки к входному контакту. Свяжите один с 5V и один с землей. Когда вы нажмете кнопку 5V, вход включится. Когда вы отпустите его, он останется включенным, пока вы не нажмете тот, который подключен к GND.

В TTL это действительно соединение база-эмиттер, которое не будет проводить, но не так, как вы могли бы подумать: вход является эмиттером входного NPN-транзистора, и транзистор проводит, если на вход подается низкий уровень. Плавающий то же, что и высокий.