Согласование логических уровней 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 min | VOL max | VIH min | VIL max |
|---|---|---|---|---|
| 5 В TTL | 2,4 В | 0,5 В | 2,0 В | 0,8 В |
| 3,3 В LVTTL | 2,4 В | 0,4 В | 2,0 В | 0,8 В |
| 5 В CMOS | 4,7 В (VCC − 0,3) | 0,5 В | 3,5 В (0,7·VCC) | 1,5 В (0,3·VCC) |
| 3,3 В LVCMOS | 3,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 В (DS41285A, TIP #12). Сопротивление выхода 5 В — обычно меньше 10 Ом, входа 3,3 В — больше 500 кОм, их влиянием можно пренебречь. Отношение резисторов (уравнение 12-1):
Чем больше сопротивления, тем меньше ток, но медленнее фронт: делитель вместе с ёмкостью монтажа CS и входа CL — это RC-цепь. Для неё эквивалентное сопротивление R = 0,66 · R1, эквивалентный источник — 0,66 · VS, а время фронта (уравнение 12-2)
Пример из DS41285A: CS = 30 пФ, CL = 5 пФ, фронт от 0,3 до 3 В — не дольше 1 мкс. Предельное эквивалентное сопротивление кОм, отсюда 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 В: резистор и защитные диоды
Многие микросхемы защищают входы диодами на шину питания и на общий провод (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
Если порог единицы входа 5 В выше единицы выхода 3,3 В, нужен транслятор (DS41285A, TIP #6). Выход 3,3 В управляет затвором N-канального MOSFET, сток подтянут резистором R1 к 5 В. Схема инвертирует сигнал — это учитывают в программе. Транзистор выбирают с порогом VGS(th) ниже единицы выхода 3,3 В.
Фронт в ноль быстрый — его формирует открытый транзистор, а фронт в единицу — RC-цепь из R1 и ёмкостей входа и монтажа:
При R1 = 10 кОм и 30 пФ это 0,9 мкс; при этом в нуле через R1 течёт 0,5 мА. Меньше R1 — быстрее фронт и больше ток.
Двунаправленная шина I²C
У I²C линии SDA и SCL двунаправленные, с открытым стоком, а направление никто не задаёт. NXP в AN10441 предлагает решение на одном N-канальном MOSFET на каждую линию:
Затвор подключён к низкому напряжению VDD1, исток — к линии на стороне 3,3 В, сток — к линии на стороне 5 В; у каждой стороны свои подтягивающие резисторы Rp. Работа в трёх состояниях:
- Линию никто не тянет вниз. Сторона 3,3 В подтянута к 3,3 В, затвор и исток под одним напряжением, транзистор закрыт. Сторона 5 В подтянута к 5 В. Обе линии в единице — каждая на своём уровне.
- Устройство 3,3 В тянет линию вниз. Исток опускается, затвор остаётся на 3,3 В, транзистор открывается и тянет вниз сторону 5 В.
- Устройство 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 В
до 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²C | BSS138 на линию, 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).
Источники
- Microchip. 3V Tips 'n Tricks (DS41285A) — табл. 4-1 (пороги TTL и CMOS), TIP #5, #6 (транслятор на MOSFET, время фронта), #9–#12 (5 → 3,3 В: прямое соединение, диоды, делитель, уравнения 12-1–12-3), #13 (интегральные трансляторы)
- NXP. AN10441: Level shifting techniques in I2C-bus design, Rev. 01, 18 June 2007 — двунаправленный сдвиг уровней на одном MOSFET: схема, три состояния, скорость, напряжения питания
- STMicroelectronics. STM32F072x8 STM32F072xB datasheet (DS9826 Rev 6) — табл. 21 (входное напряжение выводов FT, TTa и прочих), табл. 22 (втекающий ток), табл. 54 (выходные напряжения)
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — табл. 30-1: пороги входа VIL, VIH и предельное входное напряжение
- onsemi. BSS138: N-Channel Logic Level Enhancement Mode Field Effect Transistor (Rev. 7, 2024) — напряжение сток–исток, пороговое напряжение, RDS(on)
Нашли ошибку?
Смотрите также
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- Подтягивающие резисторы I²CДиапазон Rp по напряжению, скорости и ёмкости шины
- Делитель напряженияВыход, ток, нагрузка, подбор пары резисторов
- MOSFET и IGBTУстройство, логический уровень, заряд затвора, потери, ключ и IGBT
- Ключ на транзистореНижний ключ на NPN: ток и резистор базы, мощность, PNP и ULN2003A
- ATmega328PРаспиновка, фьюзы, Optiboot, периферия, питание, схема и код на C