Резистор на землю для чего
Перейти к содержимому

Резистор на землю для чего

  • автор:

Резисторы: последовательное и параллельное соединение, токоограничивающие и подтягивающие сопротивления

Резистор (сопротивление) — один из наиболее распространённых компонентов в электронике. Его назначение — простое: сопротивляться течению тока, преобразовывая его часть в тепло.

Основной характеристикой резистора является сопротивление. Единица измерения сопротивления — Ом (Ohm, Ω). Чем больше сопротивление, тем большая часть тока рассеивается в тепло. В схемах, питаемых небольшим напряжением (5 – 12 В), наиболее распространены резисторы номиналом от 100 Ом до 100 кОм.

Закон Ома

Закон Ома позволяет на заданном участке цепи определить одну из величин: силу тока I, напряжение U, сопротивление R, если известны две остальные:

$ I = \frac</p>
<p> \hspace U = I \cdot R \hspace R = \frac$» /></p>
<p>Для обозначения напряжения наряду с символом <em>U</em> используется <em>V</em>.</p>
<p>Рассмотрим простую цепь</p><div class='code-block code-block-1' style='margin: 8px 0; clear: both;'>
<!-- 1seodacha -->
<script src=

Расчитаем силу тока, проходящего через резистор R1 и, соответственно, затем через лампу L1. Для простоты будем предполагать, что сама лампа обладает нулевым собственным сопротивлением.

$I = \frac<U></p>
<p> = \frac<5\unit<В>><240\unit<Ом>> \approx 0.02 \unit = 20 \unit\,$» /></p>
<p>Аналогично, если бы у нас был источник питания на 5 В и лампа, которая по документации должна работать при токе 20 мА, нам нужно бы было выбрать резистор подходящего номинала.</p>
<p><img decoding=

= \frac>> = 250 \unit\,$» />

В данном случае, разница в 10 Ом между идеальным номиналом и имеющимся не играет большого значения: можно смело брать стандартный номинал — 240 или 220 Ом.

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

Соединение резисторов

При последовательном соединении резисторов, их сопротивление суммируется:

$ R_t = R_1 + R_2 + \ldots + R_N $

При параллельном соединении, итоговое сопротивление расчитывается по формуле:

$ R_t = \frac<1></p>
<p> + \frac1 + \ldots + \frac1> $» /></p>
<p>Если резистора всего два, то:</p>
<p><img decoding=

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

Применеие на практике

Среди ролей, которые может выполнять резистор в схеме можно выделить следующие:

Токоограничивающий резистор (current-limiting resistor)
Стягивающий, подтягивающий резистор (pull-down / pull-up resistor)
Делитель напряжения (voltage divider)

Токоограничивающий резистор

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

В случае с Ардуино следует ограничивать ток, поступающий с выходных контактов (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 Вт. Для расчёта нагрузки, действующей на резистор, используйте формулу:

$ P = U \cdot I = I^2 \cdot R = \frac<U^2></p>
<p> $» /></p>
<p>При превышении допустимой нагрузки, резистор будет греться и его срок службы может сильно сократиться. При сильном превышении — резистор может начать плавиться и вызвать воспламенение. Будьте осторожны!</p>
<p>Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Noncommercial-Share Alike 4.0 International</p><div class='code-block code-block-7' style='margin: 8px 0; clear: both;'>
<!-- 7seodacha -->
<script src=

Производные работы должны содержать ссылку на http://wiki.amperka.ru, как на первоисточник, непосредственно перед содержимым работы.
Вики работает на суперском движке DokuWiki.

схемотехника/резисторы.txt · Последние изменения: 2019/12/06 16:54 — mik

Инструменты страницы

Подтягивающий резистор: что это такое и для чего используется

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

1. Что такое подтягивающий резистор и зачем он нужен

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

Существует два типа подтягивающих резисторов:

Подтягивающие резисторы широко используются при подключении:

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

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

2. Как подобрать подтягивающий резистор

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

Для CMOS логики пороговое напряжение составляет примерно половину напряжения питания. А для ТТЛ логики — около 1,5 В.

Формула для расчета подтягивающего резистора:

R = (Упит — Упорог) / Ипотребления

Например, для схемы на 5В с ТТЛ логикой, где ток потребления входа составляет 1 мА, формула будет:

R = (5 В – 1,5 В) / 0,001 А = 3,5 кОм

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

Также важен правильный выбор между pull-up и pull-down резистором. Если схема использует положительную логику (HIGH — 1), то чаще применяется pull-up. Для отрицательной логики (LOW — 1) подходит pull-down.

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

Далее мы подробно разберем применение подтягивающих резисторов в конкретных схемах и на примере популярных микроконтроллеров.

3. Особенности применения в микроконтроллерах

Многие современные микроконтроллеры, такие как Arduino или Raspberry Pi, имеют встроенные подтягивающие резисторы на входах GPIO. Это позволяет упростить схему и сэкономить на дополнительных дискретных компонентах.

Встроенные резисторы могут быть включены программно, установкой соответствующих бит в регистре порта. Например, в Arduino для активации подтяжки к питанию используется функция pinMode(pin, INPUT_PULLUP).

Стол мастерской, заваленный электронными компонентами. Рука тянется к резистору.

4. Правила подключения внешних резисторов

Однако не всегда встроенных резисторов бывает достаточно. Тогда приходится использовать внешние дискретные резисторы.

При подключении к Arduino важно учитывать:

Для базовой модели Arduino Uno оптимальным является резистор подтягивания к питанию номиналом 4,7 кОм.

Паяльник и поверхностный резистор крупным планом. Аккуратная мелкая пайка.

5. Расчет резисторов для шин данных

При работе с шинами I2C, SPI, 1-Wire на Arduino следует учитывать их особенности.

Например, для шины I2C предусмотрены резисторы подтяжки к питанию на линиях SDA и SCL. Их номинал рассчитывается по формуле:

Рподтяжки = (Упит — Упорог_низк)

6. Подтяжка выводов с открытым стоком

Распространенной задачей является подтяжка выводов различных микросхем, имеющих выход с открытым стоком (open drain). Например, ШИМ-контроллеров, драйверов светодиодов, датчиков.

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

7. Типичные ошибки при выборе резисторов

Чтобы избежать проблем, следует помнить о распространенных ошибках:

Перед запуском схемы необходимо проверить правильность выбора всех резисторов.

Про Ардуино и не только

Мы бы хотели отслеживать нажатие кнопки для выполнения каких-то действий. Для этого мы подключили линию +5В через резистор и кнопку к цифровому выводу Ардуино, полагая, что при нажатии на кнопку ток потечет через нее и Ардуино считает на цифровом входе 2 сигнал высокого уровня. Соответственно, при размыкании контакта мы рассчитываем получить на входе сигнал низкого уровня. Так ли это? Проверим.
Подключим кнопку по приведенной схеме и загрузим в Ардуино следующий скетч. Результат его работы посмотрим в мониторе порта.

void setup() < Serial.begin(9600); pinMode(2, INPUT); > void loop() < Serial.println(digitalRead(2)); delay(1000); >

При нажатии на кнопку Ардуино, действительно, зафиксирует на входе сигнал высокого уровня, при этом в монитор порта будет выводиться значение «1». Но при отпускании кнопки в мониторе порта будут выводиться как «0», так и «1». Я даже больше скажу: можно исключить из схемы кнопку (все равно она разомкнута), у нас останется только провод, подключенный к порту 2 Ардуино, результат опроса порта будет таким же непредсказуемым. Особенно это хорошо заметно с длинным куском провода. Почему так происходит? Дело в том, что вход Ардуино не подключен ни к линии питания, ни к земле — он находится «ни в каком» состоянии. Такое состояние называется высокоимпедансным или Z-состоянием. Провод в данном случае выполняет роль антенны, на которую оказывают воздействие окружающие ее электромагнитные поля. В результате Ардуино непредсказуемо фиксирует то высокий, то низкий уровень сигнала на данном входе.

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

Иногда подтягивающим называют резистор, который подтягивает именно к питанию, также используют англоязычный термин pull-up (pull-up резистор). А для обозначения резистора, подтягивающего к земле, можно использовать термин стягивающий или pull-down резистор. Ниже приведены схемы подключения кнопки к логическому входу (не обязательно Ардуино) с использованием подтягивающего и стягивающего резисторов.

Попробуйте подключить кнопку к Ардуино используя одну из приведенных схем. В этот раз в мониторе порта не будет никаких неожиданных значений.

Как вы понимаете, подтягивающие резисторы весьма востребованы в электронике. Они нужны не только для подключения кнопок, но также при подключении выводов устройств с Z-состоянием или открытым коллектором. Поэтому многие контроллеры имеют встроенные подтягивающие резисторы, в том числе и Ардуино (а точнее используемые в них микроконтроллеры). Чтобы подтянуть порт Ардуино к питанию необходимо функцией pinMode установить для данного порта режим INPUT_PULLUP. Давайте немного изменим схему и скетч из начала этой статьи. Из схемы уберем резистор и установим кнопку между вторым портом и землей:

А в скетче изменим режим работы порта на INPUT_PULLUP, чтобы задействовать внутренний подтягивающий резистор:

void setup() < Serial.begin(9600); pinMode(2, INPUT_PULLUP); > void loop() < Serial.println(digitalRead(2)); delay(1000); >

Загрузите этот код в Ардуино и убедитесь, что схема работает как нам нужно без дополнительных (внешних) резисторов. В тот момент когда кнопка разомкнута порт Ардуино не остается подвешенным в воздухе: он подтянут к питанию внутренним резистором. Поэтому на нем гарантирован сигнал высокого уровня. А при нажатии кнопки будет считываться сигнал низкого уровня.

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

Что такое сильный (strong pull-up) и слабый (weak pull-up) подтягивающий резистор? Чем ниже сопротивление подтягивающего резистора, тем больший ток протекает через него и тем сильнее он подтягивает сигнал к питанию (или земле, если речь о pull-down резисторе). Отсюда и название сильный подтягивающий резистор. Соответственно, чем выше сопротивление, тем слабже резистор подтягивает сигнал, поэтому его называют слабым.

Как выбрать номинал для подтягивающего резистора? Общая рекомендация — это, как правило, 10кОм. Где-то от 5кОм и ниже считается сильной подтяжкой, 20..100кОм — слабая. Подтягивающие резисторы Ардуино имеют номинал 20..50кОм (конкретное значение подбирается и устанавливается на заводе изготовителе), т.е. являются слабыми. Поэтому в документации к различным устройствам можно увидеть рекомендации использовать более сильные подтягивающие резисторы. Особенно это актуально для устройств, работающих в неблагоприятных условиях или при значительной длине проводников, когда увеличивается вероятность возникновения электромагнитных помех.

Есть ли в Ардуино подтяжка к земле (внутренние pull-down резисторы)? — Нет. В Ардуино доступны только к подтягивающие к питанию резисторы. Поэтому если вам нужно подтянуть вывод к земле, то используйте для этого внешний резистор.

На этом всё. А дочитавшим до конца в качестве бонуса функциональная схема порта ввода/вывода микроконтроллера ATmega328P, используемого в Arduino UNO. На схеме показан подтягивающий резистор и условия для его включения:

Схема порта ввода-вывода Ардуино. Подтягивающий резистор

Возможно, Вам будет интересно:

28 комментариев:

Друг ты опять спас меня, только из твоей статьи понял что если PULLUPом включаем подтягивающий резистор надо кидать контакт датчиков на землю. Весь русскоязычный интернет ато перешерстил. Спасибо. Ответить Удалить

Узнал про подтягивающие из курса универа в PIC16, использовать в ардуино начну сегодня 😀 Удалить

Православная статья. Ответить Удалить

Надеюсь, в том смысле, что хорошая? Удалить

Рад помочь Удалить

Получил Raspberry Pi и пользуюсь готовыми решениями с интернета, но ненмогу понять принципов работы, что очень напрягает (скорее раздражает). Ваш пост очень помог, хотя все ещё никакне могу понять две вещи:
1. Разве резистор на 10к Ом не должен снижать напряжение до нулевых значений, что при подводе к вводу должен преобразовываться в 0?
2. Почему при нажатии кнопки сигнал не разделяется и не поступает одновременно и на заземление и на ввод?
Ответить Удалить

А почему резистор должен снижать напряжение?
Посмотрите на приведенную выше схему включения подтягивающего резистора. Когда кнопка разомкнута ток течет от VCC через резистор к микроконтроллеру — цифровой вход подтянут к питанию, на нем сигнал высокого уровня.
Сопротивление порта микроконтроллера (в режиме INPUT) очень велико и при нажатии на кнопку ток пойдет по цепи с меньшим сопротивлением — через кнопку. Через цифровой вход ток уже не потечет, на нем будет сигнал низкого уровня. Удалить

Спасибо за ответ, наконец то все понял. Странно что все это хорошо знал когда был школьником, а сейчас ума не приложу как все это работает. Хорошо что вы продолжаете поддерживать пост и читателей (особенно таких как я). Ответить Удалить

Великая статья. А главное понятно мне начинающему. Ответить Удалить
Привет Владимир !
Очень хорошая статья , спасибо . Ответить Удалить

Добрый день.
С удовольствием читаю ваши статьи.
Вопрос. Как влияют на энергопотребление подключение кнопки через стягивающий и подтягивающий резисторы? Ответить Удалить

Добрый день!
Вообще увеличивают, ведь через них протекает ток. Тем больший, чем меньше сопротивление резистора. Но по этому поводу не стоит заморачиваться, если вы работаете с Ардуино: на ее фоне подтяжка не влияет на потребление. А вот когда вы пересядете с Ардуино на отдельные микроконтроллеры и начнете считать микроамперы, вот тогда можно обратить на этот вопрос внимание.

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 мкА.

Разница в последних двух результатах — это и есть потери на подтяжку всех выводов. Удалить

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

Я сейчас в одном большом ступоре, если не сложно помогите, пожалуйста, определиться, какой контроллер (или систему) лучше взять за основу. Я биолог, но так получилось, что уже давно помимо прочего, отвечаю за сбор, хранение и обработку данных. Признаюсь сразу — программирование как таковое вызывает паралич мозга, но есть такое слово НАДО, поэтому уже 14 и 2 года соответственно у меня успешно работают две базы собранные на VB в Exel, из записей встроенного ридера, уроков «Планеты EXEL» и всякого разного не всегда цензурного….

В общем, сперва почитал восторги на счет Ардуино, посмотрел FLProg (с души вроде не воротит, как XOD ID), в процессе Arduino IDE мелькает — тоже вроде бы явного отторжения не вызывает. Не нравиться два момента — цена кусается, и кушать все таки любит она, а с моим зрение боюсь даже светодиод отпаять будет проблематично. Второй взгляд был на STM32L0 — тут вроде бы и энергопотребление вкусное и часы реального времени тебе встроенные и. зашел еще на один ресурс БЛИН, уши в трубочку свернулись. и мозги-то народу ардуиной зс$р@ны и все эти ваши таблЭтки и примочки хуже чем инвалиды на всю жизнь бейсиком искалеченные и ниже -10 уже не работает и вообще… ИДИТЕ ВЫ. Не мешайте народу НОРМАЛЬНЫЕ языки программирования изучать, ПУСТЬ УЧАТ, а не это ваше всякое-разное!

В общем аппаратная часть STM32 если честно нравиться, но как ее программировать и с какого боку прошивать, пока даже образно, если честно плохо понимаю, в то время как по Ардуино и в скетчах уже покопался и библиотеки посмотрел, логического шока вроде нет (пока). Вот и думаю имеет смысл углубляться в Ардуино среду или все же на какие-то другие контроллеры посмотреть? Например MSP430 еще рассматривал, но это я так понимаю еще одна среда и уже другая, значит и скетчи для датчиков не факт, что будут и библиотеки тоже, то есть все руками через регистры, что это такое я вроде бы (хотя не факт), а вот как руками делать пока увы не представляю.

Сама задача из-за чего весь сыр-бор выглядит так, есть необходимость сделать простую, но гибкую метеосистему. Гибкую в том плане, что вот надо сейчас сделать регистратор температуры и влажности воздуха, что бы просыпался, допустим каждые 10 минут, снимал данные, писал на SD и засыпал, но при этом с автономным сроком работы хотя бы полгода и МАЛЕНЬКИЙ (грибники тырят блин) и все это в количестве штук 5-10 за не сильно астрономическую сумму (к слову посмотрел цены очень хороших датчиков SHT35 и приятно офигел, с модулями не сравнить). А завтра надо тоже самое, но плюс замер света и каждый час продувание камеры вентилятором (для учета транспирации), то есть уже не такое автономное (пара недель), не такое маленькое (может с батарейкой солнечной или даже с выводом данных по wi-fi/sim/радиоканалу), но что бы не с нуля и в той же системе?

Про энергосбережение читал кстати очень внимательно, про прерывания тоже. Главная головная боль на данный момент, ОЧЕНЬ много информации о том, что из глубокого сна хорошо выходить по внешнему прерыванию, например с часов реального времени (выбрал DS3231), нашел даже связку блоков сон/пробуждение для FLProg, библиотеки вроде бы тоже есть. НО. нигде не найду, хоть сколько ни будь, внятного объяснения куда в этом случае прописывать или ставить в визуальную среду этот самый внутренний будильник часов реального времени, как программировать его, способна ли сама программа после пробуждения его перепрограммировать на новое время и как запрограммировать ногу SQW на модуле, что бы она выдавала этот самый вожделенный сигнал на пробуждение платы.

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

Добрый день!
С STM я не работал, поэтому сравнить с AVR не могу. Может оно было бы и лучше. Но Ардуино однозначно популярнее, для нее куча библиотек, примеров — на ней будет проще сделать. И если использовать не саму Ардуину, а отдельно микроконтроллер, то потребление будет реально низким. Проработать автономно год, периодически просыпаясь для опроса датчиков — запросто.

Что касается flprog, то, мне кажется, для серьезных проектов он не очень. Лучше использовать нормальную IDE, в которой сам всё контролируешь.

Так что мне видится следующее решение: AVR (ATmega328P) + DS3231 + датчики + на что писать показания (flash). Часы программируются на генерацию сигнала с нужным интервалом (10 минут), они будут выдавать его на SQW. Микроконтроллер при включении переводим в режим PowerDown, разрешив пробуждение по внешнему прерыванию — от DS3231. Проснувшись, запитываем датчики и память, читаем показания, пишем их в память, отключаем всех и снова спать до следующего сигнала будильника.

Цена ATmega328P на Али меньше 100р. Потребление, как уже сказал, низкое: спать — хоть несколько лет; с учетом просыпаний — нужно иметь представление об общем потреблении системы, но батареи 1Ач на год-то должно хватить. Температурный диапазон -40..105C. Вполне нормальный МК для данной задачи. Удалить

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

Подтягивающий ( стягивающий) резистор — что это, и зачем он нужен

Для понимания сути раскрываемой темы проведем небольшой эксперимент — соберем небольшую схему с кнопкой и напишем скетч, который в Serial будет выдавать значение состояния кнопки:

1
2
3
4
5
6
7
8
9
10
11
12
13
int buttonPin = 8; void setup () < pinMode (buttonPin, INPUT ); Serial.begin(9600); // Настраиваем Serial для вывода информации >void loop () < Serial.println( digitalRead (buttonPin)); // Выводим состояние кнопки delay (1000); // Ждем одну секунду >

Запустив скетч и не нажимая кнопку, убеждаемся в том, что состояние пина 8 меняется даже от обычного прикосновения к проводу — совершенно непредсказуемым образом.

Стабильность появляется только при нажатии кнопки.

Так происходит потому, что когда кнопка находится в отжатом состоянии, схема приобретает вид:

Получается, что 8 пин находится в неопределенном « подвешенном» состоянии и при считывании его значения нельзя определенно сказать, в каком он состоянии — HIGH или LOW . Такое состояние ещё называется высокоомным состоянием или состоянием Z. А провод, соединяющий пин платы с кнопкой, выполняет роль антенны для различных электромагнитных наводок. Именно эти наводки и заставляют контакт вести себя непредсказуемым образом. Для того чтобы устранить эту ситуацию, необходимо сделать так, чтобы в любом состоянии кнопки на 8 пине было однозначное значение. Для этого скорректируем схему следующим образом — подключим пин 8 к земле через резистор номиналом 10 КОм:

Теперь, когда кнопка отжата, можно со 100%-уверенностью говорить о том, что состояние на пине 8 — LOW , так как он подключен к земле. Но если нажать на кнопку, то ток пойдет по пути наименьшего сопротивления и значение на пине 8 станет HIGH . Вот этот добавленный в схему резистор и называется стягивающим, потому что в неопределенном состоянии « стягивает» потенциал к земле, делая его определенным — LOW .

Номинал резистора рассчитывается исходя из максимально протекающего тока. Максимальный ток, который способен выдать цифровой пин Arduino — 40 мА ( 0,04 А). При напряжении 5В, по закону Ома, находим сопротивление участка цепи:

Таким образом минимально допустимый для использования номинал резистора — 125 Ом.

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

Если поменять местами резистор и кнопку получится схема с подтягивающим резистором.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *