Перейти к содержанию

Подтягивающий резистор

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

Обновлено Редакция GAW

Подтягивающий резистор (pull-up resistor, подтяжка) — резистор между сигнальной линией и питанием, который держит на линии логическую единицу, пока её никто не тянет к нулю. Его зеркальный вариант — стягивающий резистор (pull-down) между линией и общим проводом, он задаёт ноль. Резистор достаточно большой, чтобы выход любой микросхемы на линии легко перебил его и установил свой уровень.

Зачем нужен

  • Свободный вход. Вход КМОП-микросхемы почти не потребляет ток и, если к нему ничего не подключено, принимает случайный уровень от наводок. Подтяжка задаёт определённое состояние — например, у кнопки, замыкающей вход на землю.
  • Выходы с открытым стоком. Выход с открытым стоком умеет только прижимать линию к нулю, а единицу на ней создаёт подтягивающий резистор. Так устроены шины I²C и 1-Wire, линии прерываний и сброса.
  • Уровень при старте. Пока микроконтроллер не настроил выводы, подтяжка удерживает подключённые к ним ключи и драйверы в безопасном состоянии.

Как выбрать сопротивление

Нижнюю границу задаёт ток, который выход обязан принять, удерживая линию в нуле. Верхнюю — время нарастания фронта: резистор вместе с ёмкостью линии образует RC-цепь, и фронт от 0,3 до 0,7 VDD длится 0,8473 · R · C, то есть пропорционален постоянной времени. Для шины I²C спецификация NXP UM10204 даёт обе формулы:

Rmin=VDD−VOLIOL,Rmax=tr0,8473⋅CbR_\text{min} = \frac{V_{DD} - V_{OL}}{I_{OL}}, \qquad R_\text{max} = \frac{t_r}{0{,}8473 \cdot C_b}

При 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 Ом. Меньший резистор ещё и бесполезно расходует ток всё время, пока на линии ноль.

Источники

  1. NXP Semiconductors. UM10204: I2C-bus specification and user manual, Rev. 7.0, 2021 — п. 7.1 — формулы Rp(min) и Rp(max); табл. 10 и 11 — VOL, IOL и время нарастания
  2. STMicroelectronics. AN4899: STM32 microcontroller GPIO hardware settings and low-power consumption — п. 5.1.5 — время нарастания 0,8473·R·C; п. 6.1–6.6 — неиспользуемые выводы и подтяжки
  3. STMicroelectronics. STM32F103x8, STM32F103xB datasheet (DS5319) — табл. 36: внутренние подтяжки 30–50 кОм

Нашли ошибку?