Использование внешнего pull-up резистора вместо INPUT_PULLUP
Когда предпочтительнее использовать внешний подтягивающий резистор вместо внутреннего:
pinMode(fanPin, INPUT_PULLUP);
Покопавшись на форумах и на этом сайте, выяснилось, что обычно рекомендуемое значение подтягивающего резистора составляет 10 КБ.
Однако техническое описание ATmega32U4 В Таблице 29-1 указано, что сопротивление RPU или «подтягивающего резистора контакта ввода-вывода» составляет от 20 до 50 кОм.
В этом вопросе речь идет о внутренних и внешних подтягиваниях для простой кнопки, но я спрашиваю в общем случае.
Какие проекты будут лучше работать с внутренними подтягиваниями, а какие — с внешними?
По каким соображениям следует отдать предпочтение одному другому?
В настоящее время мой проект заключается в подключении датчика температуры AM2302/DHT22.
@Tom Hale, 👍1
Обсуждение2 ответа
Насколько мне известно, OUTPUT_PULLUP не существует. Используйте INPUT_PULLUP для большинства вещей.
Добавьте внешние подтягивающие напряжения 3,3 К (3,3 В) или 4,7 К (5 В) для I2C. Если вы видели трассировку с напряжением I2C 10 К в системе 5 В и даже с коротким проводом, время нарастания очень медленное. 4,7 КБ намного быстрее.
10 КБ для внешнего подтягивания хорошо подходят для медленных вещей, таких как кнопки и переключатели. Если длина проводов больше, то можно использовать и 4,7 КБ, а если провода длинные, то даже 1 КБ. При работе от батареи лучше использовать 10 К, поскольку при низком входном сигнале ток течет меньше.
Я почти всегда использую внешние подтягивающие/понижающие резисторы. С их помощью я получаю больше контроля над значением и могу больше делать с аппаратным обеспечением, будь то устранение дребезга кнопок или использование различных типов транзисторов.
Самый простой способ ответить на ваш вопрос — спросить, чем вы хотите заниматься. Если вам нужен активный низкий уровень, используйте Pull Up. Активный максимум – это понижение. Некоторые транзисторы гораздо лучше работают с тем или иным способом, поэтому они могут определить, что вы используете. I2C использует слабые подтягивания для смещения линий передачи. Если вам нужна аппаратная фильтрация, гораздо проще спроектировать фильтр с известным резистором 25 кОм, чем с неизвестным резистором 20–50 кОм. Список можно продолжать, но это самые распространенные ситуации, с которыми я сталкивался.
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Сколько выводов UNO имеют внутренние подтягивающие резисторы?
- Как узнать сопротивление внутреннего подтягивающего резистора?
- Минимальное значение I2C-подтягивающий резистор для arduino
- Внешний и внутренний pullup
- digitalRead не читает входной контакт ESP8266-01
- ArduinoMEGA: 64 цифровых входа вызывают случайные значения digitalRead
- Arduino UART (TX/RX) multidrop 1 master 50 slaves
Что такое «OUTPUT_PULLUP»? Повышение выходного сигнала не имеет особого смысла., @tkausl
Для I2C требуются подтягивающие резисторы меньшего номинала, поэтому в этом случае вам потребуются внешние резисторы. В условиях сильного шума может случайно сработать входной сигнал, если подтягивание слабое. Но в большинстве случаев внутреннее подтягивание подходит. И дешевле не добавлять резистор, особенно при крупносерийном производстве., @Gerben
Во время производства иногда меняют номинал подтягивающего резистора на номинал резистора, который уже есть на плате. Снижение стоимости установки., @Gerben
внутренние компоненты подходят для большинства задач, если только у вас нет полунизкого импеданса на выходе датчика. Импеданс больше сопротивления., @dandavis
@tkausl Спасибо, что указали на то, что OUTPUT_PULLUP не существует. Отредактировано., @Tom Hale