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

Открытый сток

Открытый сток — схема выхода, в которой есть только транзистор к общему проводу. Ноль такой выход создаёт сам, а единицу — внешний подтягивающий резистор. На этом построены шины I2C и 1-Wire, линии прерываний и простейшее согласование уровней.

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

Открытый сток (open drain, OD) — схема выхода, в которой есть только N-канальный транзистор между выводом и общим проводом, а сток этого транзистора выведен наружу «открытым», без нагрузки. Логический ноль выход создаёт сам, открывая транзистор, а при единице транзистор закрыт, вывод находится в высокоимпедансном состоянии, и высокий уровень на линии создаёт внешний подтягивающий резистор. У биполярных микросхем и оптронов то же самое называется открытым коллектором (open collector).

Монтажное И

Несколько выходов с открытым стоком можно подключить к одной линии: каждый умеет только прижимать её к нулю, поэтому выходы не могут закоротить друг друга. Линия находится в единице, только когда её отпустили все, и в нуле, если её прижал хоть один, — это логическая функция И, выполненная соединением проводов. На этом построена шина I²C: любое устройство может придержать линию SCL, растягивая такт, а ведущие, которые одновременно начали передачу, разбираются по линии SDA, кто уступит. Так же устроена линия данных 1-Wire, где ведущий и датчики по очереди прижимают общий провод.

Открытый сток в микроконтроллере

Выходной каскад вывода STM32 — пара транзисторов P-MOS и N-MOS. В двухтактном режиме работают оба, а в режиме открытого стока P-MOS не включается никогда. У STM32F1 режим выбирается полем CNF = 01 регистра GPIOx_CRL/CRH, у STM32F4 — битом OTYPER = 1; выводы I²C работают в режиме альтернативной функции с открытым стоком. Подробнее — в статье о GPIO STM32.

За что приходится платить

Фронт на линии с открытым стоком формирует подтягивающий резистор, заряжая ёмкость линии, и он заметно медленнее спада. Чем меньше резистор, тем быстрее фронт, но тем больший ток должен принять выход, удерживая ноль. Найти компромисс для шины I²C поможет калькулятор подтягивающих резисторов.

Частые вопросы

Чем открытый сток отличается от двухтактного выхода?

Двухтактный (push-pull) выход сам формирует оба уровня: верхний транзистор подключает вывод к питанию, нижний — к земле. У открытого стока работает только нижний: ноль он создаёт, а вместо единицы отпускает линию, и её поднимает внешний резистор. Поэтому фронт у открытого стока медленнее, а спад такой же быстрый.

Можно ли соединить вместе несколько выходов с открытым стоком?

Да, это главное их достоинство. Короткого замыкания не бывает: выходы умеют только тянуть вниз. Линия в единице, только когда её отпустили все, и в нуле, если её прижал хоть один — это монтажное И. Так работают общая линия прерываний от нескольких микросхем и шина I2C, где на этом построены подтверждение, растягивание такта и арбитраж.

Как с помощью открытого стока получить 5 В от микроконтроллера на 3,3 В?

Подтянуть линию резистором к 5 В: когда выход отпускает линию, её уровень задаёт резистор, а не питание микроконтроллера. Но вывод должен выдерживать это напряжение. У STM32 это выводы с пометкой FT, и AN4899 приводит такой пример для шины I2C с подтяжкой к 5 В. На обычный вывод подавать больше VDD + 0,3 В нельзя.

Источники

  1. NXP Semiconductors. UM10204: I2C-bus specification and user manual, Rev. 7.0, 2021 — выходы с открытым стоком на SDA и SCL, монтажное И, синхронизация такта и арбитраж
  2. STMicroelectronics. RM0008: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx reference manual — табл. 20: режимы вывода — двухтактный выход и открытый сток, CNF и MODE
  3. STMicroelectronics. AN4899: STM32 microcontroller GPIO hardware settings and low-power consumption — п. 5.3.3 — шина I²C с подтяжкой к 5 В: выводы с открытым стоком, P-MOS выключен

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