В чем разница между INPUT и INPUT_PULLUP?


24

На новых Arduinos можно установить pinMode в одном из трех состояний: OUTPUT, INPUT, и INPUT_PULLUP.

На этой странице написано:

Чип Atmega на Arduino имеет внутренние подтягивающие резисторы (резисторы, которые подключаются к источнику питания внутри), к которым вы можете получить доступ. Если вы предпочитаете использовать их вместо внешних понижающих резисторов, вы можете использовать аргумент INPUT_PULLUP в pinMode (). Это эффективно инвертирует поведение, где HIGH означает, что датчик выключен, а LOW означает, что датчик включен.

Я скорее уверен, что инвертирование поведения - это не единственное, что он делает.

Что делает INPUT_PULLUP? Чем он отличается INPUTи как решить, какой из них использовать?


INPUT_PULLUP был добавлен в IDE 1.0.1. Не имеет значения, какую плату Arduino вы используете, все они поддерживают PULLUP.
Baldengineer

Ответы:


23

По умолчанию INPUTустанавливается пин-код как INPUT. Если контакт полностью отключен, он будет случайным образом читать HIGHи LOW. Если вы связываете его с +5 В или 0 В, он, очевидно, будет читать HIGHили LOW.

Внутри Arduino установлены подтягивающие резисторы со значением около 50 кОм. Эти резисторы могут быть подключены по выбору INPUT_PULLUP. Это функционально (и электрически) эквивалентно подключению резистора 50 кОм между контактом и + 5 В, единственное отличие состоит в том, что для него не требуются внешние компоненты, и вы можете включать и выключать его в программном обеспечении во время выполнения вашей программы.

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

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


Upvote. К вашему сведению, согласно документации, внутренние подтягивания составляют 20 КБ, но это не так уж и сильно отличается от 50 КБ. arduino.cc/en/Tutorial/DigitalPins
SDsolar

9

Обратите внимание, что до версии 1.0.1 вы могли включить подтягивания с помощью digitalWrite(). И ты все еще можешь.

Код:

pinMode(13, INPUT);
digitalWrite(13, HIGH); // Turns internal pull-up on
digitalWrite(13, LOW);  // Turns internal pull-up off

Это важное различие, потому что, INPUT_PULLUPочевидно, включает подтягивающий резистор. Однако, менее очевидным является то, что начиная с 1.0.1, простой вызов вызывает INPUTотключение подтягивания. (Раньше состояние подтяжки оставалось прежним).

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

Плавающая булавка на осциллографе: http://www.youtube.com/watch?v=dBIBFLYCjMM

С включенным Pull-Up: http://www.youtube.com/watch?v=SAIw7LLVl-U

Полное учебное видео по подтягиванию (обратите внимание, что я сделал это до того, как INPUT_PULLUP был добавлен в библиотеку Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo


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