Подтягивающий резистор
Подтягивающий резистор соединяет сигнальную линию с питанием или с общим проводом, чтобы у неё всегда был определённый логический уровень. Без него вход микросхемы, к которому ничего не подключено, ловит наводки и читается случайно.
Обновлено Редакция GAW
Подтягивающий резистор (pull-up resistor, подтяжка) — резистор между сигнальной линией и питанием, который держит на линии логическую единицу, пока её никто не тянет к нулю. Его зеркальный вариант — стягивающий резистор (pull-down) между линией и общим проводом, он задаёт ноль. Резистор достаточно большой, чтобы выход любой микросхемы на линии легко перебил его и установил свой уровень.
Зачем нужен
- Свободный вход. Вход КМОП-микросхемы почти не потребляет ток и, если к нему ничего не подключено, принимает случайный уровень от наводок. Подтяжка задаёт определённое состояние — например, у кнопки, замыкающей вход на землю.
- Выходы с открытым стоком. Выход с открытым стоком умеет только прижимать линию к нулю, а единицу на ней создаёт подтягивающий резистор. Так устроены шины I²C и 1-Wire, линии прерываний и сброса.
- Уровень при старте. Пока микроконтроллер не настроил выводы, подтяжка удерживает подключённые к ним ключи и драйверы в безопасном состоянии.
Как выбрать сопротивление
Нижнюю границу задаёт ток, который выход обязан принять, удерживая линию в нуле. Верхнюю — время нарастания фронта: резистор вместе с ёмкостью линии образует RC-цепь, и фронт от 0,3 до 0,7 VDD длится 0,8473 · R · C, то есть пропорционален постоянной времени. Для шины I²C спецификация NXP UM10204 даёт обе формулы:
При 3,3 В и ёмкости линии 100 пФ получается от 967 Ом до 11,8 кОм на 100 кГц и от 967 Ом до 3,54 кОм на 400 кГц. Расчёт для своей шины — в калькуляторе подтягивающих резисторов I²C. Встроенные подтяжки микроконтроллеров слабые — у STM32F103 30–50 кОм: их хватает для кнопок и неиспользуемых входов, но не для быстрых шин. Как они включаются в регистрах — в статье о GPIO STM32.
Частые вопросы
Чем подтяжка вверх отличается от подтяжки вниз?
Подтяжка вверх (pull-up) соединяет линию с питанием, и когда никто её не тянет, на ней логическая единица. Подтяжка вниз (pull-down, стягивающий резистор) соединяет линию с общим проводом и даёт ноль. Выбирают по тому, какой уровень должен быть у линии в покое: кнопку на землю подтягивают вверх, а вход разрешения, который должен быть выключен по умолчанию, — вниз.
Хватит ли встроенной подтяжки микроконтроллера для I2C?
Обычно нет. У STM32F103 встроенная подтяжка — 30–50 кОм. При 40 кОм и ёмкости линии 100 пФ фронт от 0,3 до 0,7 VDD длится 0,8473 · 40 кОм · 100 пФ ≈ 3,4 мкс, а спецификация I2C допускает 1000 нс на 100 кГц и 300 нс на 400 кГц. Нужны внешние резисторы в единицы килоом.
Почему подтягивающий резистор нельзя ставить слишком маленьким?
Когда выход прижимает линию к нулю, через резистор течёт ток (VDD − VOL) / R, и выход должен его принять, не поднимая напряжение нуля выше нормы. Для I2C при 3,3 В и токе выхода 3 мА это ограничивает резистор снизу значением 967 Ом. Меньший резистор ещё и бесполезно расходует ток всё время, пока на линии ноль.
Источники
- NXP Semiconductors. UM10204: I2C-bus specification and user manual, Rev. 7.0, 2021 — п. 7.1 — формулы Rp(min) и Rp(max); табл. 10 и 11 — VOL, IOL и время нарастания
- STMicroelectronics. AN4899: STM32 microcontroller GPIO hardware settings and low-power consumption — п. 5.1.5 — время нарастания 0,8473·R·C; п. 6.1–6.6 — неиспользуемые выводы и подтяжки
- STMicroelectronics. STM32F103x8, STM32F103xB datasheet (DS5319) — табл. 36: внутренние подтяжки 30–50 кОм
Нашли ошибку?
Смотрите также
- Подтягивающие резисторы I²CДиапазон Rp по напряжению, скорости и ёмкости шины
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- GPIO STM32Режимы выводов, регистры F1 и F4, BSRR, AF, скорость, токи, 5 В, код
- Открытый стокВыход только с транзистором к земле, единицу даёт подтяжка
- Постоянная времениτ = RC: скорость заряда конденсатора и частота среза