Open drain output что это

от admin

Open drain output что это

ARM processors provide general purpose input and output functions, where there several parameters to be set. The first is the output type, second is the pull up or pull down mode and the third one is the output speed.

Pull-up / Pull-down

In digital circuits, the signal lines are generally not allowed to put as “float”, i.e., they need to always be in a high state or a low state. When floating, the state is undetermined, which may cause some IO errors.

If the parameter of GPIO_PuPd is set as “GPIO_PuPd_UP”, it is equivelent to adding a resistor between the signal line and Vcc and it is the same case for “GPIO_PuPd_DOWN”. For some application, one needs to do this manually and for most of the ARM processors, the feature is done by its build-in circuitry.

GPIO_OType (Output type)

Push-pull: this is the output type that most of us think of as “standard”. When the output goes low, it is actively “pull” to ground. Conversely, when the output is set to high, it is actively “pushed” towards Vcc. The below figure shows the working principle of push-pull circuitry.

Push-pull circuitry

An Open-Drain output, on the other hand, is only active in one direction. It can pull the pin towards ground, but it cannot drive it high. Imagine the previous image, but without the upper MOSFET. When it “release” the wire, the (lower-side) MOSFET is simply non-conductive, which causes the output to float.

For this type of output, there needs to be a pull-up resistor added to the circuit, which will cause the line to go high when not driven low. You can do this with an external part, or by setting the GPIO_PuPd value to GPIO_PuPd_UP.

The name comes from the fact that the MOSFET’s drain isn’t internally connected to anything. This type of output is also called “open-collector” when using a BJT instead of a MOSFET.

Open-drain/collector circuitry

GPIO Speed

Basically, this controls the slew rate (the rise time and fall time) of the output signal. The faster the slew rate, the more noise is radiated from the circuit. It is good practice to keep the slew rate slow, and only increase it if you have a specific reason.

Push-pull VS open-drain.

Push-pull VS open-drain.

На картинке видно, что open-drain может быть с внутренней подтяжкой и без неё.
Если использовать подтяжку становится вообще непонятно чем он отличается от push-pull.

А теперь давайте подумаем, что будет если мы соединим два PP выхода и установим на них разные логические уровни?

Push-pull VS open-drain.

Push-pull VS open-drain.

Push-pull VS open-drain.

Это и есть тот случай когда PP не может заменить OD.

А теперь представим другую ситуацию, есть шина данных, например, I2C у которой логическая единица не соответствует напряжению нашего МК и равна либо 1.8, либо 5 вольт. В обоих случаях, используя PP выход, подключить МК к такой шине не получится потому, что PP не может выдать ни 1.8, ни 5 вольт. Но это очень просто сделать, используя OD и внешний подтягивающий резистор.

Урок 6. Порты ввода-вывода STM32.

Уроки STM32

В уроке узнаем структуру, функциональные возможности, электрические характеристики портов ввода-вывода общего назначения. Изучим регистры микроконтроллера для управления портами.

Кому-то кажется, что порты ввода-вывода очень простой элемент микроконтроллера. Выбрал для вывода режим — вход или выход, считал или установил его состояние.

Не пропускайте этот урок, прочитайте внимательно. По опыту уроков Ардуино знаю, что много вопросов возникает из-за незнания всего того, что я описываю в этой статье.

И про аппаратное устройство портов и их электрические характеристики я пишу не для того, чтобы набрать объем урока. Это очень важный вопрос. Знание его необходимо для подключения к микроконтроллеру различных электронных компонентов. Микроконтроллер сам по себе никогда не работает. К нему всегда что-то подключается.

Через порты ввода-вывода микроконтроллер управляет и связывается со всем, что к нему подключено. Есть еще коммуникационные интерфейсы, но о них в последующих уроках. Хотя интерфейсы также используют порты, только в режиме альтернативных функций.

В системе STM32 применяется общепринятое название портов ввода-вывода общего назначения, а именно GPIO (General purpose input-output).

Под “общим назначением” имеется в виду, что состояние выводов устанавливается или считывается программно, т.е. вывод не является входным или выходным сигналом какого-либо аппаратного узла микроконтроллера.

В системе STM32:

  • Порты обозначаются GPIOA, GPIOB, GPIOC и т.д. На схеме микроконтроллера соответствующие портам выводы обозначаются PA0-PA15, PB0-PB15, PC0-PC15…
  • Порты 16ти разрядные, т.е. у каждого порта 16 выводов.
  • Режим и состояние каждого вывода могут быть установлены отдельно, независимо от других выводов.
  • Каждый вывод может использоваться в режиме:
    • Input floating – вход без подтягивающего резистора, брошенный в воздухе вход.
    • Input pull-up – вход с подтягивающим резистором, подключенным к питанию микроконтроллера.
    • Input pull-down — вход с подтягивающим резистором, подключенным к общему проводу (земле).
    • Analog – аналоговый вход ( вход АЦП, компараторов и т.п.).
    • Output open-drain – выход с открытым стоком. Функционально аналогичен выходу с открытым коллектором. При низком логическом уровне замыкает вывод на землю, при высоком – бросает в воздухе.
    • Output push-pull – обычный активный выход. При низком логическом уровне напряжение на выводе равно 0, при высоком – напряжение близко к напряжению питания микроконтроллера, обычно + 3 В.
    • Alternate function push-pull – альтернативная функция вывода в обычном (активном) режиме.
    • Alternate function open-drain – альтернативная функция вывода в режиме открытый сток.
    • GPIOA – 16 выводов: PA0-PA15;
    • GPIOB – 16 выводов: PB0-PB15;
    • GPIOC – 3 вывода: PC13-PC15;
    • GPIOD – 2 выводов: PD0, PD1.

    Распиновка STM32F103C8T6

    Порты STM32 с аппаратной точки зрения.

    К портам ввода-вывода мы будем подключать реальные аппаратные устройства, узлы, схемы. Поэтому важно знать, как они устроены, их электрические характеристики.

    В документации приводится базовая схема вывода порта.

    Базовая схема STM32

    Нас интересует правая, выходная часть.

    Режим входов.

    При использовании вывода в качестве входа, к нему могут быть подключены подтягивающие резисторы сопротивлением порядка 40 кОм. Либо к питанию Vdd, либо к земле Vss.

    Основные для нас входные параметры портов.

    Параметр Значение
    Напряжение низкого уровня Не более 0,35 VDD
    При питании 3,3 В не более 1,16 В
    Напряжение высокого уровня Не менее 0,65 VDD
    При питании 3,3 В не менее 2,15 В
    Ток утечки ± 1 мкА
    Сопротивление подтягивающих резисторов 30 – 50 кОм,
    типовое значение 40 кОм
    Емкость 5 пкФ

    Обратите внимание, какая небольшая разница между входными напряжениями низкого и высокого уровня. За это я и не люблю 3-вольтовые контроллеры.

    Согласно схеме к выводу подключены 2 защитных диода. Один на землю Vss, другой на шину питания Vdd. Первый замыкает через себя входное напряжение отрицательной полярности, другой ограничивает его на уровне Vdd, у нас на плате это 3,3 В.

    Сигналы с напряжением, превышающим эти пределы должны подключаться через ограничительные резисторы. Входной ток не должен превышать ± 5 мА. Это предельный ток защитных диодов.

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

    Но большая часть входов микроконтроллера допускает подачу напряжения 5 В. Это, так называемые, толерантные к 5 В входы. В схеме для таких выводов верхний защитный диод подключен не к питанию Vdd, а к ограничителю напряжения Vdd_ft. Толерантные выводы обозначаются FT (five volt tolerant). Напряжение ограничевается до уровня на 4 В выше Vdd. Сделано это для подключения сигналов с 5 В уровнями. На схеме распределения выводов STM32F103C8T6 толерантные к 5 В выводы отмечены закрашенными точками.

    Предельно-допустимые входные параметры портов.

    Параметр Значение
    Напряжение на толерантных входах Не менее — 0,3 В, не более Vdd + 4 В
    При питании 3,3 В — 0,3 … 7,3 В
    Напряжение на остальных входах Не менее — 0,3 В, не более 4 В
    Максимальный втекающий ток через защитные диоды ± 5 мА

    Режим выходов.

    В режиме выхода порта работают 2 комплементарных транзистора.

    • В активном режиме они открываются по очереди, соединяя выход с шиной питания или землей.
    • В режиме с открытым стоком работает только нижний транзистор, замыкая выход на землю при низком логическом уровне.

    Выходные параметры портов.

    Параметр Значение
    Напряжение низкого уровня при втекающем токе 8 мА Не более 0,4 В
    Напряжение низкого уровня при втекающем токе 20 мА Не более 1,3 В
    Напряжение высокого уровня при вытекающем токе 8 мА Не менее Vdd – 0,4 В
    Напряжение высокого уровня при вытекающем токе 20 мА Не менее Vdd – 1,3 В

    Предельно-допустимые выходные параметры портов.

    Параметр Значение
    Максимальный вытекающий ток вывода 25 мА
    Максимальный втекающий ток вывода — 25 мА
    Общий вытекающий или втекающий ток портов Не более 150 мА.

    Получается, что к каждому выводу порта можно подключать нагрузку до 25 мА. Но при этом уровень логического сигнала выйдет за допустимые значения логических уровней. Чтобы этого не произошло нельзя нагружать вывод током свыше 8 мА.

    Программное управление портами STM32.

    Для каждого порта (16 выводов) есть два 32х разрядных регистра конфигурации. Они образуют 64 битный регистр конфигурации порта.

    Младший регистр конфигурации портов GPIOx_CRL (Port configuration register low)

    GPIOx_CRL

    Старший регистр конфигурации портов GPIOx_CRH (Port configuration register high)

    GPIOx_CRH

    На каждый вывод отводится 4 бита, которые делятся на 2 битные поля режима и конфигурации.

    Поле режима определяет направление работы вывода – вход или выход. В случае выхода оно задает максимальную частоту передачи выходного сигнала. Очевидно, это влияет на энергопотребление микроконтроллера.

    Поле режима (биты Mode).

    Биты режима MODE [1 : 0] Режим
    0 0 Вход
    0 1 Выход, синхронизация 10 мГц
    1 0 Выход, синхронизация 2 мГц
    1 1 Выход, синхронизация 50 мГц

    Поле режима дополняют биты конфигурации.

    Состояние регистров конфигурации можно защитить от непредусмотренных изменений. Для этого существует регистр блокировки конфигурации.

    Регистр блокировки конфигурации порта GPIOx_LCKR (Port configuration lock register)

    GPIOx_LCKR

    Каждому выводу порта соответствует бит блокировки LCK0 – LCK15. При установке бита в 1 запрещается изменение соответствующих битов режима и конфигурации. После задания всех нужных битов регистра блокировки необходимо активизировать защиту. Для этого надо в 16й бит регистра блокировки (LCKK) последовательно записать 1, 0, 1. После этого блокировка будет действовать и изменение защищенных битов конфигурации и режима возможно только после сброса микроконтроллера.

    Проверить установлена ли защита конфигурации можно чтением этого же 16-го бита (LCKK). При активированной защите два подряд чтения бита должны дать результат 0, 1.

    Доступ к портам происходит через регистры ввода и вывода данных.

    Регистр ввода данных порта GPIOx_IDR (Port input data register)

    GPIOx_IDR

    Регистр вывода данных порта GPIOx_ODR (Port output data register)

    GPIOx_ODR

    Первый доступен только для чтения. Биты IDR0 – IDR15 содержат состояние соответствующих выводов порта.

    Запись данных во второй регистр устанавливает состояние выводов порта (ODR0 – ODR15).

    Если задан режим вывода – вход, то состояние соответствующего бита ODR0 – ODR15 определяет, куда подключен подтягивающий резистор, к шине питания или земле.

    Для управления состоянием отдельных выводов можно воспользоваться регистрами битовой обработки.

    Регистр установки/сброса битов GPIOx_BSRR (Port bit set/reset register)

    GPIOx_BSRR

    Регистр установки/сброса битов разделен на 2 равные части(0-15 и 16-31). Первая предназначена для установки выводов в состояние 1, вторая – в состояние 0.

    • Запись данного с 1 в битах BS0 – BS15 устанавливает соответствующие выводы в состояние высокого уровня.
    • Запись данного с 1 в битах BR0 – BR15 переводит соответствующие выводы в состояние низкого уровня.

    Таким образом, одним обращением к регистру можно установить или сбросить нужные выводы, не изменяя состояние остальных. Если производить эту операцию с помощью регистра вывода данных, то потребуется операции чтение, модификация и запись.

    Регистр сброса битов GPIOx_BRR (Port bit reset register)

    GPIOx_BRR

    Это 16ти разрядный регистр, который работает точно так, как младшая половина предыдущего регистра установки/сброса.

    Запись слова с 1 в битах BR0 – BR15 переводит соответствующие выводы в состояние низкого уровня.

    Конфигурация портов с помощью STM32CubeMX.

    Здесь все просто и понятно. Мы это уже делали.

    Давайте настроим вывод PB12 на вход с подтягивающим резистором к шине питания, а PB13 на активный выход.

    Закладка System Core -> GPIO.

    Правой кнопкой мыши нажимаем на вывод PB12. Выбираем GPIO_Input.

    STM32CubeMX

    Для вывода PB13 задаем режим GPIO_Output

    STM32CubeMX

    В поле Configuration выбираем строку PB12 и задаем Pull-up и имя вывода. Я написал Button.

    STM32CubeMX

    Выбираем строку PB13 и задаем:

    • высокий уровень при включении (High);
    • активный выход (Output Push Pull);
    • имя Led.

    STM32CubeMX

    Я не буду описывать режимы, они очевидны.

    Давайте настроим систему тактирования и вывод PC13, как в уроке 3, и создадим проект Lesson6_1.

    What is an Open Drain : Configuration & Its Working

    An open-drain or open-collector output pin is simply a transistor that is connected to the ground. Whenever we apply high input at the gate, drain, and source are shorted. Whenever we apply low input at the gate, drain, and source are disconnected. To make it simple, open-drain is like a switch that will get connected or disconnected basing on the input signal given. This article discusses an overview of what is an open drain, circuit, and its working

    Open-Drain Input/Output Configuration

    An open-drain is commonly found in many integrated circuits. This helps multiple devices to connect with the usage of single wire which is in a mode of pull-down operation. This single wire is also a bi-directional one so its bidirectional nature will gain so much importance to the circuit due to the interconnection of many devices on a common line. Coming to the configuration it is having programmable output configuration with push-pull. The operating of digital output is done in two modes one is a push-pull mode and another one is an open-drain mode.

    Open Drain

    Open Drain

    When the configuration is done on push-pull mode,0 connects output pin to ground, 1 will connect to Vio. When an operation is done on open-drain mode, the higher transistor will be disabled, 0 continues to connect with the ground, and outputting 1 will disconnect pin to Vio and remains floating.

    Open Drain vs Pull Push

    Open Drain vs Pull Push

    Switches
    • It consists of only one switch which is connected to the ground
    • Push-pull will contain two switches. One switch is connected to the ground and another switch is connected to Vcc.
    Output
    • If the output pin is made high then pin gets connected to ground through the switch. When the output pin is made low, the pin will start floating as the switch is turned off.
    • If the output is made high pin gets connected to Vdd through NPN switch. If the output is made low, the pin will get connected to the ground with the help of the PNP switch.
    Power Consumption
    • Push-pull consumes very low power because it doesn’t require any pull up resistor
    • It requires high power consumption due to drain through a load resistor when it was ON
    Operating Speed
    • Push-pull is having high operating speed
    • When compared with push-pull, it has slower switching
    Loads
    • Push-pull will not drive external loads
    • An open-drain will drive external loads less than or equal to 10ma directly
    Signals
    • Push-pull is not able to combine Vout signals for various sensors onto a common bus
    • It is able to switch higher or lower voltage than Vdd supply voltage

    In an Open Drain vs Open Collector, An open-drain is CMOS and an open collector is BJT. When currents are low BJTs saturation voltage is a bit higher than the voltage drop due to RDS for FET.

    Open Drain GPIO

    • PMOS doesn’t exist in open-drain configuration and the output has two possibilities high or floating.
    • NMOS will get activated by giving 0 in the output data register and the I/O pin is to the ground.
    • Output data register will leave the port in Hi-Z when it is given and I/O state is not defined.
    • To resolve this issue the internal pull-up resistor has to be activated or another one is giving an external pull up resistor. When the pull-up resistor is activated the I/O pin turns its state to Vdd.

    Output mode with open-drain configuration is nothing but the top PMOS transistor simply not present. The drain will get open when the transistor is switched off, so the output will float. Open-drain output configuration can’t pull up the pin it can only pull down the pin. The open-drain output configuration of GPIO is useless until and unless it is provided with pull up capability

    Open Drain GPIO

    Open Drain GPIO

    To make use of this in real-world applications, it has to be used with an external pull up resistor or internal pull-up resistor. In present scenario all MCU are supporting internal pull-up resistor for every GPIO pin, you have to use the GPIO configuration to activate or deactivate them

    How to Drive LED

    In order to drive LED first, activate the internal pull-up resistor after connecting the LED to the pin. For turning on the LED just give 1 as input so that it is inverted as 0 and the transistor will get turned off. When it gets turned off, a pull-up resistor will help LED will be driven to Vcc. Similarly, if you want to turn off the LED just give 0 to the input so that transistor will get on which will make the LED turned off.

    The value of the internal pull-up resistor is fixed and its range is from 10kilo ohms to 250-kilo ohms which are good enough to run real applications

    In Open-drain MOSFET, a MOSFET is like a transistor which is having the ability to handle higher voltages. The transistors switching behavior is controlled by the base. When IC output is flowing to base the flow of current will get switched on through the transistor similarly if there is little flow through IC output, then the current will not flow through the transistor. Transistor takes control of the flow of current and voltage potentials through circuits made with billions of transistors, basing on IC.

    When the NPN transistor is open but connected to an external pin then it is an open collector this will make the transistor switch to ground when it’s active. This tends current sink and current source to gain current flow but in different directions

    In open-drain I2C, whenever using the i2c, the serial clock pin, and the serial data pin will be in its configuration. In order to make the bus work properly, we have to connect the pull-up resistor to each pin either internally or externally. The correct value for pull up resistors in the i2c bus depends on the total capacitance of the bus and the frequency at which bus works. But we can figure out the value of pull up resistor by taking into consideration of I2c bus speed capacitance etc but the resistor value with the range of 4.7-kilo-ohms to 10-kilo ohms works.

    Thus, this is all about an overview of what is an open drain, its configuration, how to drive LED, etc. Here is a question for you, what are the different configurations of a transistor?

    Читать:
    Сколько стоит внешний дисковод

Похожие публикации