Что значит подтягивающий резистор
Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Что такое подтягивающий резистор: pull-up и pull-down, расчет подтягивающего резистора
Что такое подтягивающий резистор, и зачем он нужен?
Резисторы являются устройствами ограничения тока, которые широко используются в электронных схемах и изделиях. Резистор – это пассивный компонент, который обеспечивает сопротивление при протекании тока через него. Сегодня существует много разных типов резисторов.
Если мы рассмотрим цифровую схему, то ее контакты всегда будут либо в состоянии логического 0, либо в состоянии логической 1. В некоторых случаях нам нужно изменить состояние с 0 на 1 или с 1 на 0. В любом случае нам нужно удерживать цифровой контакт либо в 0 и затем изменить состояние на 1, либо нам нужно удерживать его на 1, а затем изменить на 0. В обоих случаях нам нужно сделать цифровой вывод либо «высоким», либо «низким», но его нельзя оставлять плавающим.
Таким образом, в каждом случае состояние меняется, как показано ниже.
Теперь, если мы заменим значение High и Low фактическим значением напряжения, то High будет логическим уровнем 1 (скажем, 5V), а Low будет заземлением или 0 В.
Pull-up резистор используется, чтобы сделать состояние по умолчанию цифрового вывода высоким, то есть High (на изображении выше это 5 В), а Pull-Down резистор делает в точности наоборот, он делает состояние по умолчанию цифрового контакта низким, то есть Low (0 В).
Но зачем нам нужны эти резисторы, вместо этого мы могли бы подключить цифровые логические выводы непосредственно к напряжению уровня логики или к земле, как показано на рисунке ниже?
Так делать нельзя. Поскольку цифровая схема работает при слабом токе, подключение логических контактов непосредственно к напряжению питания или заземлению не является хорошим вариантом. Поскольку прямое соединение в конечном итоге увеличивает ток, как и короткое замыкание, это может привести к повреждению чувствительной логической схемы. Чтобы контролировать ток, нам нужны резисторы с понижением или повышением напряжения. Подтягивающий к питанию (pull-up) резистор позволяет контролировать поток тока от источника напряжения питания к цифровым входным контактам, а подтягивающие к земле (pull-down) резисторы могут эффективно управлять током от цифровых контактов к земле. В то же время оба резистора, повышающий и понижающий, поддерживают цифровое состояние низкого или высокого логического уровня.
Где и как использовать подтягивающие резисторы
Ссылаясь на приведенное выше изображение микроконтроллера, где цифровые логические выводы закорочены с заземлением и питанием, мы могли бы изменить соединение, используя pull-up и pull-down резисторы. Предположим, нам нужно логическое состояние по умолчанию, и мы хотим изменить состояние с помощью некоторого взаимодействия или внешних периферийных устройств, мы используем pull-up или pull-down резисторы
Использование pull-up резистора
Если нам нужно высокое логическое состояние по умолчанию и мы хотим изменить состояние на низкое с помощью внешнего взаимодействия, мы можем использовать подтягивающий резистор, как показано на рисунке ниже.
Цифровой логический входной контакт P0.5 может переключаться с логической 1 или High на логическую 0 или Low с помощью переключателя SW1. Резистор R1 действует как подтягивающий резистор. Он связан с логическим напряжением от источника питания 5В. Таким образом, когда переключатель не нажат, на контакт логического входа всегда подается напряжение по умолчанию 5 В, если контакт не закорочен на землю, то логический уровень станет низким (Low).
Однако, как мы уже говорили, контакт не может быть напрямую закорочен на землю или питание, поскольку это в конечном итоге приведет к повреждению цепи из-за короткого замыкания, но в этом случае мы снова замыкаем на землю с помощью замкнутого переключателя. Но, посмотрите внимательно, на самом деле это не короткое замыкание. Поскольку, согласно закону Ома, из-за сопротивления подтягивающего резистора небольшое количество тока будет течь от источника к резистору и переключателю и затем достигнет земли.
Если мы не используем этот подтягивающий резистор, выход будет непосредственно закорочен на землю при нажатии переключателя, с другой стороны, когда переключатель будет разомкнут, вывод логического уровня будет плавать, что может дать некоторый нежелательный результат.
Использование pull-down резистора
То же самое верно и для резистора с понижением напряжения. Рассмотрим нижеследующее соединение, где показан pull-down резистор в цепи.
На изображении выше происходит прямо противоположное предыдущему варианту с pull-up резистором. Здесь мы имеем понижающий резистор R1, который связан с землей или 0В. Таким образом, вывод цифрового логического уровня P0.3 по умолчанию равен 0 до тех пор, пока не будет нажат переключатель, и вывод логического уровня не станет высоким. В этом случае небольшое количество тока протекает от источника 5 В через замкнутый переключатель и pull-down резистор, что предотвращает замыкание линии с источником 5 В.
Таким образом, для различных схем логического уровня мы можем использовать резисторы Pull-up и Pull-down. Это наиболее часто встречается в различном встроенном оборудовании, однопроводной системе протоколов, периферийных соединениях, Raspberry Pi, Arduino и прочих микроконтроллерных и микропроцессорных устройствах.
Расчет подтягивающего резистора
Теперь, когда мы знаем, как использовать подтягивающие резисторы Pull-up и Pull-down, возникает вопрос, как рассчитать номинал этих резисторов? Хотя во многих схемах цифрового логического уровня мы видим повышающие или понижающие резисторы в диапазоне от 2 кОм до 4,7 кОм. Но каково будет действительное номинальное значение?
Чтобы понять это, нам нужно знать, что такое логическое напряжение. Какое напряжение является низким логическим уровнем, а какое – высоким? Для различных логических уровней различные микроконтроллеры используют разные диапазоны напряжения для высокого логического уровня и низкого логического уровня. Если мы рассмотрим вход уровня транзисторно-транзисторной логики (TTL), ниже на графике будет показано минимальное логическое напряжение для высокого логического сигнала и максимальное логическое напряжение для обнаружения низкого логического сигнала.
Как мы видим, для логики TTL максимальное напряжение логического 0 составляет 0,8 В. Таким образом, если мы предоставим менее 0,8 В, логический уровень будет принят как 0. С другой стороны, если мы обеспечим более 2 В до максимума 5,25 В, сигнал будет распознан как высокий логический уровень. Но при напряжении от 0,8 до 2 В это пустая область, при этом напряжении нельзя гарантировать, что логика будет принята High или Low. Итак, для безопасности, в архитектуре TTL мы принимаем от 0 В до 0,8 В как низкий уровень и от 2 В до 5 В как высокие, что гарантирует, что 0 и 1 будут распознаваться логическими микросхемами при этом предельном напряжении.
Для определения значения подтягивающего резистора по формуле используется простой закон Ома:
В случае подтягивающего pull-up резистора, V будет напряжением источника. И ток будет максимальным током, потребляемым логическими линиями.
Rpull-up = (Vпит – Vвыс(min)) / Iпотр
Здесь Vпит – это напряжение питания, Vвыс(min) – это минимальное допустимое напряжение высокого логического уровня, а Iпотр – максимальный ток, потребляемый цифровым выводом.
То же самое относится и к pull-down резистору. Но формула имеет небольшое изменение.
Здесь Vниз(max) – максимальное напряжение низкого логического уровня, а Iотд – максимальный ток, отдаваемый цифровым выводом.
Подтягивающий резистор
Из Википедии — свободной энциклопедии
Подтягивающий резистор — резистор, включённый между проводником, по которому распространяется электрический сигнал, и питанием (pull-up resistor — подтягивающий вверх/подтягивающий к питанию резистор), либо между проводником и землёй (pull-down resistor — стягивающий резистор).
Подтягивающий резистор нужен, чтобы гарантировать на логическом входе, с которым соединён проводник, высокий (в первом случае) либо низкий (во втором случае) уровень в случаях:
Цепь с подтягивающим резистором можно сравнить с делителем напряжения из двух резисторов — большого подтягивающего и очень маленького на месте кнопки или открытого стока.
Любой логический вход имеет ёмкость относительно земли. Если сигнал формируется на открытом выводе ключевого элемента, то чем больше сопротивление подтягивающего резистора, тем больше время нарастания или спада сигнала при размыкании ключевого элемента. Если подтяжка к питанию, то надо учитывать время нарастания сигнала. Если подтяжка к земле, то — время спада сигнала. Время спада или нарастания — это время между размыканием ключа и достижением сигнала порогового напряжения.
Пороговое напряжение — это напряжение, при достижении которого логическим входом фиксируется изменение логического состояния.
Время спада или нарастания — это произведение сопротивления, ёмкости и коэффициента, который учитывает пороговое напряжение.
При проектировании логических схем приходится рассчитывать сопротивление подтягивающего резистора, при этом известны ёмкость входа и пороговое напряжение. Время спада или нарастания пропорционально сопротивлению подтягивающего резистора, то есть, например, при увеличении сопротивления вдвое время спада или нарастания увеличится вдвое.
Про Ардуино и не только
суббота, 3 февраля 2018 г.
Что такое подтягивающий (стягивающий) резистор
Мы бы хотели отслеживать нажатие кнопки для выполнения каких-то действий. Для этого мы подключили линию +5В через резистор и кнопку к цифровому выводу Ардуино, полагая, что при нажатии на кнопку ток потечет через нее и Ардуино считает на цифровом входе 2 сигнал высокого уровня. Соответственно, при размыкании контакта мы рассчитываем получить на входе сигнал низкого уровня. Так ли это? Проверим.
Подключим кнопку по приведенной схеме и загрузим в Ардуино следующий скетч. Результат его работы посмотрим в мониторе порта.
Чтобы логический вход не оставался в подвешенном состоянии при разомкнутом контакте кнопки и гарантировать на нем сигнал низкого уровня, его через резистор соединяют с землей. Такой резистор называют подтягивающим: он обеспечивает подтяжку сигнала к земле (как в данном случае) или же к питанию, если устанавливается между логическим входом устройства и линией питания. Соответственно при подтяжке к питанию на логическом входе будет гарантирован высокий уровень сигнала.
Иногда подтягивающим называют резистор, который подтягивает именно к питанию, также используют англоязычный термин pull-up (pull-up резистор). А для обозначения резистора, подтягивающего к земле, можно использовать термин стягивающий или pull-down резистор. Ниже приведены схемы подключения кнопки к логическому входу (не обязательно Ардуино) с использованием подтягивающего и стягивающего резисторов.
Попробуйте подключить кнопку к Ардуино используя одну из приведенных схем. В этот раз в мониторе порта не будет никаких неожиданных значений.
Как вы понимаете, подтягивающие резисторы весьма востребованы в электронике. Они нужны не только для подключения кнопок, но также при подключении выводов устройств с Z-состоянием или открытым коллектором. Поэтому многие контроллеры имеют встроенные подтягивающие резисторы, в том числе и Ардуино (а точнее используемые в них микроконтроллеры). Чтобы подтянуть порт Ардуино к питанию необходимо функцией pinMode установить для данного порта режим INPUT_PULLUP. Давайте немного изменим схему и скетч из начала этой статьи. Из схемы уберем резистор и установим кнопку между вторым портом и землей:
А в скетче изменим режим работы порта на INPUT_PULLUP, чтобы задействовать внутренний подтягивающий резистор:
Загрузите этот код в Ардуино и убедитесь, что схема работает как нам нужно без дополнительных (внешних) резисторов. В тот момент когда кнопка разомкнута порт Ардуино не остается подвешенным в воздухе: он подтянут к питанию внутренним резистором. Поэтому на нем гарантирован сигнал высокого уровня. А при нажатии кнопки будет считываться сигнал низкого уровня.
Не забывайте о встроенных подтягивающих резисторах Ардуино. Я довольно часто замечаю, что люди, пишущие статьи про Ардуино, не знают об их наличии и вешают для тех же кнопок внешние подтягивающие резисторы.
Что такое сильный (strong pull-up) и слабый (weak pull-up) подтягивающий резистор? Чем ниже сопротивление подтягивающего резистора, тем больший ток протекает через него и тем сильнее он подтягивает сигнал к питанию (или земле, если речь о pull-down резисторе). Отсюда и название сильный подтягивающий резистор. Соответственно, чем выше сопротивление, тем слабже резистор подтягивает сигнал, поэтому его называют слабым.
На этом всё. А дочитавшим до конца в качестве бонуса функциональная схема порта ввода/вывода микроконтроллера ATmega328P, используемого в Arduino UNO. На схеме показан подтягивающий резистор и условия для его включения:
28 комментариев:
Друг ты опять спас меня, только из твоей статьи понял что если PULLUPом включаем подтягивающий резистор надо кидать контакт датчиков на землю. Весь русскоязычный интернет ато перешерстил. Спасибо.
Узнал про подтягивающие из курса универа в PIC16, использовать в ардуино начну сегодня 😀
Надеюсь, в том смысле, что хорошая?
Получил Raspberry Pi и пользуюсь готовыми решениями с интернета, но ненмогу понять принципов работы, что очень напрягает (скорее раздражает). Ваш пост очень помог, хотя все ещё никакне могу понять две вещи:
1. Разве резистор на 10к Ом не должен снижать напряжение до нулевых значений, что при подводе к вводу должен преобразовываться в 0?
2. Почему при нажатии кнопки сигнал не разделяется и не поступает одновременно и на заземление и на ввод?
Спасибо за ответ, наконец то все понял. Странно что все это хорошо знал когда был школьником, а сейчас ума не приложу как все это работает. Хорошо что вы продолжаете поддерживать пост и читателей (особенно таких как я).
Великая статья. А главное понятно мне начинающему.
Добрый день.
С удовольствием читаю ваши статьи.
Вопрос. Как влияют на энергопотребление подключение кнопки через стягивающий и подтягивающий резисторы?
Добрый день!
Вообще увеличивают, ведь через них протекает ток. Тем больший, чем меньше сопротивление резистора. Но по этому поводу не стоит заморачиваться, если вы работаете с Ардуино: на ее фоне подтяжка не влияет на потребление. А вот когда вы пересядете с Ардуино на отдельные микроконтроллеры и начнете считать микроамперы, вот тогда можно обратить на этот вопрос внимание.
Nick Gammon на странице http://www.gammon.com.au/power привел результаты своих измерений тока, потребляемого ATmega328P в режиме SLEEP_MODE_PWR_DOWN (BOD и ADC отключены) для различных состояний выводов:
Все пины в режиме OUTPUT, LOW: 0.35 мкА.
Все пины в режиме OUTPUT, HIGH: 1.86 мкА.
Все пины в режиме INPUT, LOW (внутренние подтягивающие резисторы не задействованы): 0.35 мкА.
Все пины в режиме INPUT, HIGH (задействованы внутренние подтягивающие резисторы): 1.25 мкА.
В общем аппаратная часть STM32 если честно нравиться, но как ее программировать и с какого боку прошивать, пока даже образно, если честно плохо понимаю, в то время как по Ардуино и в скетчах уже покопался и библиотеки посмотрел, логического шока вроде нет (пока). Вот и думаю имеет смысл углубляться в Ардуино среду или все же на какие-то другие контроллеры посмотреть? Например MSP430 еще рассматривал, но это я так понимаю еще одна среда и уже другая, значит и скетчи для датчиков не факт, что будут и библиотеки тоже, то есть все руками через регистры, что это такое я вроде бы (хотя не факт), а вот как руками делать пока увы не представляю.
Сама задача из-за чего весь сыр-бор выглядит так, есть необходимость сделать простую, но гибкую метеосистему. Гибкую в том плане, что вот надо сейчас сделать регистратор температуры и влажности воздуха, что бы просыпался, допустим каждые 10 минут, снимал данные, писал на SD и засыпал, но при этом с автономным сроком работы хотя бы полгода и МАЛЕНЬКИЙ (грибники тырят блин) и все это в количестве штук 5-10 за не сильно астрономическую сумму (к слову посмотрел цены очень хороших датчиков SHT35 и приятно офигел, с модулями не сравнить). А завтра надо тоже самое, но плюс замер света и каждый час продувание камеры вентилятором (для учета транспирации), то есть уже не такое автономное (пара недель), не такое маленькое (может с батарейкой солнечной или даже с выводом данных по wi-fi/sim/радиоканалу), но что бы не с нуля и в той же системе?
Про энергосбережение читал кстати очень внимательно, про прерывания тоже. Главная головная боль на данный момент, ОЧЕНЬ много информации о том, что из глубокого сна хорошо выходить по внешнему прерыванию, например с часов реального времени (выбрал DS3231), нашел даже связку блоков сон/пробуждение для FLProg, библиотеки вроде бы тоже есть. НО. нигде не найду, хоть сколько ни будь, внятного объяснения куда в этом случае прописывать или ставить в визуальную среду этот самый внутренний будильник часов реального времени, как программировать его, способна ли сама программа после пробуждения его перепрограммировать на новое время и как запрограммировать ногу SQW на модуле, что бы она выдавала этот самый вожделенный сигнал на пробуждение платы.
Что касается flprog, то, мне кажется, для серьезных проектов он не очень. Лучше использовать нормальную IDE, в которой сам всё контролируешь.
Резисторы: последовательное и параллельное соединение, токоограничивающие и подтягивающие сопротивления
Резистор (сопротивление) — один из наиболее распространённых компонентов в электронике. Его назначение — простое: сопротивляться течению тока, преобразовывая его часть в тепло.
Основной характеристикой резистора является сопротивление. Единица измерения сопротивления — Ом (Ohm, Ω). Чем больше сопротивление, тем большая часть тока рассеивается в тепло. В схемах, питаемых небольшим напряжением (5 – 12 В), наиболее распространены резисторы номиналом от 100 Ом до 100 кОм.
Закон Ома
Закон Ома позволяет на заданном участке цепи определить одну из величин: силу тока I, напряжение U, сопротивление R, если известны две остальные:
Для обозначения напряжения наряду с символом U используется V.
Рассмотрим простую цепь
Расчитаем силу тока, проходящего через резистор R1 и, соответственно, затем через лампу L1. Для простоты будем предполагать, что сама лампа обладает нулевым собственным сопротивлением.
Аналогично, если бы у нас был источник питания на 5 В и лампа, которая по документации должна работать при токе 20 мА, нам нужно бы было выбрать резистор подходящего номинала.
В данном случае, разница в 10 Ом между идеальным номиналом и имеющимся не играет большого значения: можно смело брать стандартный номинал — 240 или 220 Ом.
Аналогично, мы могли бы расчитать требуемое напряжение, если бы оно было не известно, а на руках были значения сопротивления и желаемая сила тока.
Соединение резисторов
При последовательном соединении резисторов, их сопротивление суммируется:
При параллельном соединении, итоговое сопротивление расчитывается по формуле:
Если резистора всего два, то:
В частном случае двух одинаковых резисторов, итоговое сопротивление при параллельном соединении равно половине сопротивления каждого из них.
Таким образом можно получать новые номиналы из имеющихся в наличии.
Применеие на практике
Среди ролей, которые может выполнять резистор в схеме можно выделить следующие:
Токоограничивающий резистор
Пример, на котором рассматривался Закон Ома представляет собой также пример токоограничевающего резистора: у нас есть компонент, который расчитан на работу при определённом токе — резистор снижает силу тока до нужного уровня.
В случае с Ардуино следует ограничивать ток, поступающий с выходных контактов (output pins). Напряжение, в состоянии, когда контакт включен (high) составляет 5 В. Исходя из документации, ток не должен превышать 40 мА. Таким образом, чтобы безопасно увести ток с контакта в землю понадобится резистор номиналом R = U / I = 5 В / 0.04 А = 125 Ом или более.
Стягивающие и подтягивающие резисторы
Стягивающие (pull-down) и подтягивающие (pull-up) резисторы используются в схемах рядом со входными контактами логических компонентов, которым важен только факт: подаётся ноль вольт (логический ноль) или не ноль (логическая единица). Примером являются цифровые входы Ардуино. Резисторы нужны, чтобы не оставить вход в «подвешенном» состоянии. Возьмём такую схему
Мы хотим, чтобы когда кнопка не нажата (цепь разомкнута), вход фиксировал отсутствие напряжения. Но в данном случае вход находится в «никаком» состоянии. Он может срабатывать и не срабатывать хаотично, непредсказуемым образом. Причина тому — шумы, образующиеся вокруг: провода действуют как маленькие антенны и производят электричество из электромагнитных волн среды. Чтобы гарантировать отсутствие напряжения при разомкнутой цепи, рядом с входом ставится стягивающий резистор:
Теперь нежелательный ток будет уходить через резистор в землю. Для стягивания используются резисторы больших сопротивлений (10 кОм и более). В моменты, когда цепь замкнута, большое сопротивление резистора не даёт большей части тока идти в землю: сигнал пойдёт к входному контакту. Если бы сопротивление резистора было мало (единицы Ом), при замкнутой цепи произошло бы короткое замыкание.
Аналогично, подтягивающий резистор удерживает вход в состоянии логической единицы, пока внешняя цепь разомкнута:
То же самое: используются резисторы больших номиналов (10 кОм и более), чтобы минимизировать потери энергии при замкнутой цепи и предотвратить короткое замыкание при разомкнутой.
Делитель напряжения
Делитель напряжения (voltage divider) используется для того, чтобы получить из исходного напряжения лишь его часть. Например, из 9 В получить 5. Он подробно описан в отдельной статье.
Мощность резисторов
Резисторы помимо сопротивления обладают ещё характеристикой мощности. Она определяет нагрузку, которую способен выдержать резистор. Среди обычных керамических резисторов наиболее распространены показатели 0.25 Вт, 0.5 Вт и 1 Вт. Для расчёта нагрузки, действующей на резистор, используйте формулу:
При превышении допустимой нагрузки, резистор будет греться и его срок службы может сильно сократиться. При сильном превышении — резистор может начать плавиться и вызвать воспламенение. Будьте осторожны!