Можно ли соединить UART Arduino и ESP32 напрямую?
Обновлено Редакция GAW
UART передаёт биты уровнями напряжения относительно общего провода (подробнее — в статье «UART»). У Arduino Uno на ATmega328P при питании 5 В единица на выходе — почти 5 В, у ESP32 — около 3,3 В, и пороги входов тоже разные.
Сравнение уровней
| Параметр | ATmega328P, 5 В | ESP32, 3,3 В |
|---|---|---|
| Единица на входе (VIH) | от 0,6 · VCC = 3,0 В | от 0,75 · VDD ≈ 2,48 В, но не выше VDD + 0,3 = 3,6 В |
| Ноль на входе (VIL) | до 0,3 · VCC = 1,5 В | до 0,25 · VDD ≈ 0,83 В |
| Единица на выходе (VOH) | близко к 5 В | от 0,8 · VDD = 2,64 В |
Пересчёт в вольты — наш, по табл. 5-3 Espressif и разд. 29.2 Microchip. Отсюда две проблемы.
- Arduino TX → ESP32 RX. 5 В выше допустимых 3,6 В на входе ESP32. Простое решение — резистивный делитель, его номиналы считает калькулятор делителя напряжения.
- ESP32 TX → Arduino RX. Гарантированные 2,64 В меньше 3,0 В, которые ATmega328P считает единицей. Делитель здесь не поможет — нужно повысить уровень.
Надёжный вариант
Двунаправленный преобразователь уровней решает обе задачи: TXS0108E питают от 3,3 В со стороны A и от 5 В со стороны B (условие VCCA ≤ VCCB), и он пропускает двухтактные линии UART со скоростью намного выше обычных 115 200 бит/с. Другие схемы согласования, в том числе на транзисторах, — в статье «Согласование уровней 3,3 и 5 В».
Похожие вопросы
Какой делитель поставить на RX ESP32?
Например, 1 кОм последовательно от TX Arduino и 2 кОм от RX ESP32 к земле. Наш расчёт: 5 · 2 / 3 ≈ 3,33 В — ниже предела 3,6 В и выше порога единицы 0,75 · 3,3 ≈ 2,48 В. Резисторы в единицы килоом не заваливают фронты на скоростях до 115 200 бит/с (наш вывод).
Почему соединение Arduino и ESP32 «на столе» работает без преобразователя?
Потому что 2,64 В — это гарантированный минимум при нагрузке, а без нагрузки выход ESP32 обычно ближе к 3,3 В, что выше порога 3,0 В. Но гарантии даташита нет, а вход ESP32 под 5 В работает за пределом допустимого — такую связь не оставляют в готовом устройстве (наш вывод).
Нужно ли соединять земли Arduino и ESP32?
Да, UART передаёт уровни относительно общего провода: без соединения GND плат приёмник не знает, где ноль, и линия не работает или работает со сбоями.
Источники
- Espressif. ESP32 Series Datasheet v5.3 — табл. 5-3, DC Characteristics (3,3 В, 25 °C): VIH от 0,75 · VDD до VDD + 0,3 В, VIL до 0,25 · VDD, VOH не ниже 0,8 · VDD, VOL не выше 0,1 · VDD
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P megaAVR Data Sheet (DS40002061B) — разд. 29.2, DC Characteristics: VIH не ниже 0,6 · VCC при VCC 2,4–5,5 В, VIL до 0,3 · VCC
- Texas Instruments. TXS0108E 8-Bit Bi-Directional, Level-Shifting, Voltage Translator for Open-Drain and Push-Pull Applications (SCES642L) — разд. 5.3: VCCA 1,4–3,6 В, VCCB 1,65–5,5 В, VCCA ≤ VCCB; разд. 5.6–5.9: двухтактные линии до десятков Мбит/с
Нашли ошибку?
Смотрите также
- TXS0108EПреобразователь уровней на 8 каналов: выводы, OE, подтяжки, пороги, скорость
- UARTКадр 8N1, скорость и допуск, TX и RX, уровни, USB–UART, AVR и STM32
- Согласование уровнейПрямое соединение, делитель, диоды, MOSFET-транслятор, I²C на BSS138
- Делитель напряженияВыход, ток, нагрузка, подбор пары резисторов
- Преобразователь уровнейМикросхема, согласующая логические сигналы разных напряжений