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

Согласование логических уровней 3,3 и 5 В

Выход одного устройства можно напрямую подключить ко входу другого, если его единица выше порога единицы входа, ноль ниже порога нуля, а входу не вредит напряжение выхода. Иначе нужен преобразователь уровней: делитель для 5 → 3,3 В, транзистор для 3,3 → 5 В и один MOSFET на линию для двунаправленной шины I²C.

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

Согласование уровней нужно, когда соединяются устройства с разным напряжением питания: микроконтроллер на 3,3 В с датчиком или дисплеем на 5 В, Arduino с модулем на 3,3 В. Проверяют две вещи: поймёт ли вход сигнал выхода (пороги) и выдержит ли вход напряжение выхода (предельные режимы).

Коротко

Когда можно соединить напрямую

Microchip в DS41285A (TIP #5) формулирует условие так: выход можно подключить ко входу без преобразователя, если напряжение единицы выхода VOH больше порога единицы входа VIH, а напряжение нуля VOL меньше порога нуля VIL. Типовые пороги из того же документа (табл. 4-1):

ЛогикаVOH minVOL maxVIH minVIL max
5 В TTL2,4 В0,5 В2,0 В0,8 В
3,3 В LVTTL2,4 В0,4 В2,0 В0,8 В
5 В CMOS4,7 В (VCC − 0,3)0,5 В3,5 В (0,7·VCC)1,5 В (0,3·VCC)
3,3 В LVCMOS3,0 В (VCC − 0,3)0,5 В2,3 В (0,7·VCC)1,0 В (0,3·VCC)

Это ориентиры: для расчёта берите пороги из даташита конкретной микросхемы. Выход 3,3 В LVCMOS (единица от 3,0 В) уверенно управляет входом 5 В TTL (порог 2,0 В), но не входом 5 В CMOS (порог 3,5 В). У ATmega328P при питании 5 В порог единицы — 0,6 · VCC = 3,0 В, нуля — 0,3 · VCC = 1,5 В (DS40002061B, табл. 30-1): выход 3,3 В проходит, но с запасом около 0,3 В.

В обратную сторону, 5 → 3,3 В, пороги обычно выполняются, а проблема — напряжение: 5 В превышают допустимое для входа 3,3 В. У STM32F072 выводы с пометкой FT выдерживают до VDDIOx + 4,0 В при выключенных встроенных подтягивающих резисторах, а выводы TTa и остальные — только до 4,0 В (DS9826, табл. 21). На FT-вывод 5-вольтовый сигнал можно подавать напрямую (TIP #9), на остальные — через делитель.

5 → 3,3 В: делитель

Делитель напряжения с 5 на 3,3 В для цифрового сигналаВыход устройства на 5 В через резистор R1 10 кОм подключён к входу устройства на 3,3 В; от этой точки на общий провод идёт резистор R2 20 кОм. Ёмкость монтажа и входа, показанная конденсатором, вместе с резисторами задаёт время нарастания фронта.Устройствовыход 5 ВR110 кОмR220 кОмCs + CL≈ 35 пФМК 3,3 Ввход5 В · 20 / (10 + 20) = 3,33 В

Делитель уменьшает 5 В до 3,3 В (DS41285A, TIP #12). Сопротивление выхода 5 В — обычно меньше 10 Ом, входа 3,3 В — больше 500 кОм, их влиянием можно пренебречь. Отношение резисторов (уравнение 12-1):

R1=VS−VLVLR2=0,515⋅R2(VS=5 В, VL=3,3 В)R_1 = \frac{V_S - V_L}{V_L} R_2 = 0{,}515 \cdot R_2 \quad (V_S = 5\ \text{В},\ V_L = 3{,}3\ \text{В})

Чем больше сопротивления, тем меньше ток, но медленнее фронт: делитель вместе с ёмкостью монтажа CS и входа CL — это RC-цепь. Для неё эквивалентное сопротивление R = 0,66 · R1, эквивалентный источник — 0,66 · VS, а время фронта (уравнение 12-2)

t=−RCln⁡VF−VAVI−VAt = -R C \ln\frac{V_F - V_A}{V_I - V_A}

Пример из DS41285A: CS = 30 пФ, CL = 5 пФ, фронт от 0,3 до 3 В — не дольше 1 мкс. Предельное эквивалентное сопротивление R=10−6/(35⋅10−12⋅ln⁡10)=12,4R = 10^{-6} / (35 \cdot 10^{-12} \cdot \ln 10) = 12{,}4 кОм, отсюда R1 ≤ 12,4/0,66 = 18,8 кОм и R2 ≤ 36,5 кОм. В самом документе на последнем шаге R1 получен умножением на 0,66 (8,19 кОм) — такой делитель тоже работает, просто с запасом по скорости.

Удобная пара из ряда E24 — R1 = 10 кОм, R2 = 20 кОм: 5 · 20/30 = 3,33 В, эквивалентное сопротивление 6,67 кОм, фронт от 0,3 до 3 В при 35 пФ — около 0,5 мкс, ток делителя в единице — 0,17 мА. Для частот в мегагерцы сопротивления уменьшают или ставят интегральный транслятор.

Исходные данные

Что нужно
В
Ом
Ом
Ом

Сопротивление того, что подключено к выходу: вход АЦП, базы транзистора и т. п.

Результат

Выходное напряжение
3,837 В
Коэффициент деления
0,3197
Ток делителя
816 мкА
Мощность R1
6,66 мВт
Мощность R2
3,13 мВт
Выходное сопротивление
3,197 кОмR1 ∥ R2: чем меньше, тем слабее влияет нагрузка

5 → 3,3 В: резистор и защитные диоды

Последовательный резистор и защитные диоды входаВыход на 5 В через резистор R1 подключён к выводу микроконтроллера на 3,3 В. Внутри микроконтроллера от вывода к шине VDD идёт защитный диод анодом к выводу, от общего провода к выводу — второй диод анодом к общему проводу. Когда на выводе больше, чем VDD, лишний ток через верхний диод уходит в шину питания, и резистор R1 ограничивает этот ток.Устройствовыход 5 ВR1RпослМК 3,3 ВVDD 3,3 Вк входуR1 ограничивает ток диода до единиц мкА

Многие микросхемы защищают входы диодами на шину питания и на общий провод (DS41285A, TIP #10). Если подать на такой вход 5 В через резистор, лишний ток уйдёт через верхний диод в шину 3,3 В. Ток через защитные диоды держат в пределах микроампер — иначе можно вызвать защёлкивание (latch-up), — поэтому резистор нужен обязательно. Есть и побочный эффект: втекающий ток поднимает напряжение слабо нагруженной шины 3,3 В (TIP #11).

У STM32F072 для выводов FT положительный втекающий ток не допускается (от −5 до 0 мА): пока напряжение не выше допустимого, его и нет. Для выводов TC и RST допускается до ±5 мА (DS9826, табл. 22). Делитель надёжнее: он не зависит от внутреннего устройства входа.

3,3 → 5 В: транслятор на MOSFET

Транслятор 3,3 → 5 В на N-канальном MOSFETВыход устройства на 3,3 В подключён к затвору N-канального MOSFET, исток которого соединён с общим проводом. Сток через резистор R1 подтянут к плюсу 5 В и подключён к входу устройства на 5 В. Схема инвертирует сигнал: единица на выходе 3,3 В даёт ноль на входе 5 В.Устройствовыход 3,3 ВVT1+5 ВR1Устройствовход 5 Винвертирует: 1 на выходе 3,3 В → 0 на входе 5 В

Если порог единицы входа 5 В выше единицы выхода 3,3 В, нужен транслятор (DS41285A, TIP #6). Выход 3,3 В управляет затвором N-канального MOSFET, сток подтянут резистором R1 к 5 В. Схема инвертирует сигнал — это учитывают в программе. Транзистор выбирают с порогом VGS(th) ниже единицы выхода 3,3 В.

Фронт в ноль быстрый — его формирует открытый транзистор, а фронт в единицу — RC-цепь из R1 и ёмкостей входа и монтажа:

TSW=3⋅R1⋅(CIN+CS)T_{SW} = 3 \cdot R_1 \cdot (C_{IN} + C_S)

При R1 = 10 кОм и 30 пФ это 0,9 мкс; при этом в нуле через R1 течёт 0,5 мА. Меньше R1 — быстрее фронт и больше ток.

Двунаправленная шина I²C

У I²C линии SDA и SCL двунаправленные, с открытым стоком, а направление никто не задаёт. NXP в AN10441 предлагает решение на одном N-канальном MOSFET на каждую линию:

Двунаправленный сдвиг уровней для I²C на одном MOSFETЛиния SDA1 на стороне 3,3 В подтянута резистором Rp к 3,3 В и подключена к истоку N-канального MOSFET BSS138. Затвор подключён к 3,3 В. Сток соединён с линией SDA2 на стороне 5 В, которая подтянута резистором Rp к 5 В. Такой же узел ставят на линию SCL.VDD1 = 3,3 ВRpМК3,3 ВSDA1VT1 BSS138исVDD2 = 5 ВRpSDA2Датчик5 Вдля SCL — такой же узел на втором транзисторе

Затвор подключён к низкому напряжению VDD1, исток — к линии на стороне 3,3 В, сток — к линии на стороне 5 В; у каждой стороны свои подтягивающие резисторы Rp. Работа в трёх состояниях:

  1. Линию никто не тянет вниз. Сторона 3,3 В подтянута к 3,3 В, затвор и исток под одним напряжением, транзистор закрыт. Сторона 5 В подтянута к 5 В. Обе линии в единице — каждая на своём уровне.
  2. Устройство 3,3 В тянет линию вниз. Исток опускается, затвор остаётся на 3,3 В, транзистор открывается и тянет вниз сторону 5 В.
  3. Устройство 5 В тянет линию вниз. Сначала проводит встроенный диод транзистора (между стоком и подложкой), сторона 3,3 В опускается, пока напряжение затвор — исток не превысит порог; дальше линию тянет открытый транзистор.

По AN10441 схема работает в режимах Standard и Fast — до 400 кбит/с, но не в Hs-режиме. Заодно она отделяет выключенную часть шины от остальной и защищает сторону с низким напряжением от выбросов со стороны высокого. В нормальной работе VDD2 должно быть не ниже VDD1; кроме пары 3,3 и 5 В возможны, например, 2 и 10 В.

Транзистор — N-канальный с порогом заметно ниже VDD1: у BSS138 порог от 0,8 до 1,5 В, напряжение сток — исток до 50 В. Подтягивающие резисторы каждой стороны считают как для обычной шины, по ёмкости линии и скорости:

Исходные данные

В

обычно 3,3 или 5 В

Режим (максимальная частота SCL)
пФ

до 10 пФ на вывод каждого устройства плюс дорожки и провода

Результат

Рекомендуемый Rp
1,3 кОм
ряд E24, середина допустимого диапазона
Минимум Rp
967 Ом(3,3 В − 0,4 В) / 3 мА
Максимум Rp
1,77 кОм300 нс / (0,8473 · 200 пФ)
Подходят из ряда E24
1 кОм, 1,1 кОм, 1,2 кОм, 1,3 кОм, 1,5 кОм, 1,6 кОм
Время нарастания с 1,3 кОм
220 нснорма до 300 нс
Ток ключа при VOL = 0,4 В
2,2 мАдопустимо до 3 мА

Детали

УзелДеталиПримечание
Делитель 5 → 3,3 ВR1 10 кОм, R2 20 кОмфронт около 0,5 мкс при ёмкости 35 пФ
Резистор и диодыR1 — по допустимому току диодаток диода — микроамперы
Транслятор 3,3 → 5 ВN-канальный MOSFET, R1 10 кОминвертирует сигнал
I²CBSS138 на линию, Rp на каждой сторонедо 400 кбит/с

Почему не работает

  • Делитель «заваливает» фронты. Сопротивления слишком большие для частоты сигнала: на SPI в мегагерцы делитель 10 + 20 кОм не годится.
  • Микроконтроллер на 3,3 В работает странно или греется. 5 В поданы на вывод без пометки FT или на FT-вывод со включённым встроенным подтягивающим резистором (тогда предел — 4 В).
  • Шина 3,3 В «поднялась» выше 3,3 В. Ток через защитные диоды входа заряжает слабо нагруженную шину питания.
  • I²C через модуль на BSS138 не работает. Перепутаны стороны (сток должен быть со стороны высокого напряжения), нет подтягивающих резисторов на одной из сторон или затвор подключён не к низкому напряжению.
  • SPI через модуль для I²C искажается. Фронт единицы задаёт подтягивающий резистор — для мегагерцовых сигналов он медленный.
  • Инвертированные данные. Транслятор на одном MOSFET переворачивает сигнал — это нужно учесть в программе или поставить второй каскад.

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

Можно ли подключить выход 3,3 В ко входу Arduino на 5 В напрямую?

Чаще всего да. У ATmega328P при питании 5 В единица на входе — от 0,6·VCC, то есть от 3,0 В (DS40002061B, табл. 30-1), а выход на 3,3 В без нагрузки выдаёт почти 3,3 В. Запас всего около 0,3 В, поэтому длинный провод или выход, нагруженный током, могут дать ошибки. Входы 5-вольтовой КМОП-логики с порогом 0,7·VCC = 3,5 В таким сигналом не управляются — нужен транслятор.

Можно ли подать 5 В на вход STM32?

Только на выводы, помеченные в даташите как FT (5V tolerant): у STM32F072 на них допустимо до VDDIOx + 4,0 В, если встроенные подтягивающие резисторы выключены (DS9826, табл. 21). На остальные выводы — не больше 4,0 В. Для них 5-вольтовый сигнал понижают делителем.

Как работает преобразователь уровней на BSS138 для I²C?

Затвор подключён к низкому напряжению, исток — к линии на стороне 3,3 В, сток — к линии на стороне 5 В, у каждой стороны свой подтягивающий резистор. Когда линию никто не тянет вниз, транзистор закрыт, и линии подтянуты каждая к своему питанию. Когда устройство 3,3 В тянет линию вниз, напряжение затвор — исток растёт, транзистор открывается и тянет вниз сторону 5 В. Когда вниз тянет устройство 5 В, сначала проводит встроенный диод транзистора, затем открывается и сам транзистор (NXP AN10441).

Подойдёт ли преобразователь на BSS138 для SPI?

AN10441 рассчитан на I²C в режимах Standard и Fast — до 400 кбит/с. Фронт единицы в нём формирует подтягивающий резистор, и на мегагерцах SPI он слишком медленный. Для SPI используют однонаправленные интегральные трансляторы уровней (DS41285A, TIP #13).

Источники

  1. Microchip. 3V Tips 'n Tricks (DS41285A) — табл. 4-1 (пороги TTL и CMOS), TIP #5, #6 (транслятор на MOSFET, время фронта), #9–#12 (5 → 3,3 В: прямое соединение, диоды, делитель, уравнения 12-1–12-3), #13 (интегральные трансляторы)
  2. NXP. AN10441: Level shifting techniques in I2C-bus design, Rev. 01, 18 June 2007 — двунаправленный сдвиг уровней на одном MOSFET: схема, три состояния, скорость, напряжения питания
  3. STMicroelectronics. STM32F072x8 STM32F072xB datasheet (DS9826 Rev 6) — табл. 21 (входное напряжение выводов FT, TTa и прочих), табл. 22 (втекающий ток), табл. 54 (выходные напряжения)
  4. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — табл. 30-1: пороги входа VIL, VIH и предельное входное напряжение
  5. onsemi. BSS138: N-Channel Logic Level Enhancement Mode Field Effect Transistor (Rev. 7, 2024) — напряжение сток–исток, пороговое напряжение, RDS(on)

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