Главная → Связь

MAX485 и промышленный RS-485 в проекте на Arduino: обзор и подключение

25 сентября 2026 · Связь

Где заканчивается TTL и начинается RS-485

На коротком проводе от Arduino до датчика UART-уровни 3,3–5 В живут спокойно. Но стоит сигналу уйти на теплицу или в щитовую — наводки и разница земель съедают биты. Выход — RS-485: линии дифференциальные, бит кодируется разностью между двумя проводами, а помеха, наведённая на оба провода сразу, приёмником вычитается. Классический чип для этого — MAX485; вся спека ниже взята из datasheet Maxim (Rev 10).

Что внутри и что в паспорте

MAX485 — приёмо-передатчик на один драйвер и один приёмник, питание строго 4,75–5,25 В. Спящего режима у него нет: по таблице datasheet он потребляет 500–900 мкА в любом состоянии. Скорость — до 2,5 Мбит/с; MAX483 и MAX487 из того же семейства в десять раз медленнее (250 кбит/с), зато фронты у них пологие — меньше выбросов и отражений даже без идеального терминатора. Приёмчик — 1 unit load с входным сопротивлением 12 кОм, значит до 32 устройств на шину (у MAX487/MAX1487 — четверть нагрузки и 128 устройств).

Параметр Значение по datasheet
Питание VCC 4,75–5,25 В, ток 500–900 мкА
Скорость до 2,5 Мбит/с
Дуплекс полудуплексный, одна пара A/B
Драйвер 1,5 В на 27 Ом (RS-485), 5 В без нагрузки
Порог приёмника |A−B| > +200 мВ — высокий уровень, < −200 мВ — низкий
Гистерезис входа приёмника 70 мВ (при VCM = 0)
Входное сопротивление приёмника 12 кОм (1 UL), до 32 устройств; MAX487 — 48 кОм, 128 шт.
Ток КЗ драйвера 35–250 мА, термозащита в Hi-Z
Напряжение на A, B −8…+12,5 В (absolute maximum); working common-mode −7…+12 В
Защита драйвера фолдбек-ограничение тока + термозащита

Восемь ног и как их читать

Распиновка по Pin Description, DIP/SO:

Ногa Имя Смысл
1 RO выход приёмника UART-уровней: A−B > +200 мВ — «1», A−B < −200 мВ — «0»
2 /RE разрешение приёмника, активный ноль: 0 — RO работает, 1 — RO в Hi-Z
3 DE разрешение драйвера: 1 — чип управляет линией, 0 — выходы в Hi-Z
4 DI вход драйвера UART-уровней: KiNESS низкий — Z=0, Y=1; высокий — Z=1, Y=0
5 GND земля
6 A прямая линия, по совместительству неинвертирующий выход драйвера
7 B инверсная линия, по совместительству инвертирующий выход драйвера
8 VCC 5 В

/RE и DE логически зеркальны, поэтому их часто соединяют вместе: DE на +5 В — чип передаёт, на 0 — слушает. Пока DE=0, выходы A/B в третьем состоянии и не мешают ни соседям, ни приёмнику.

Схема для Arduino и ESP32

Стык к datasheet: топология — как на Figure 1 (Typical Half-Duplex RS-485 Network), терминатор Rt на 120 Ом между A и B ставится на обоих концах линии при длинных проводах и высокой скорости.

  1. Где взять 3,3 В. Питание по паспорту 4,75–5,25 В, ниже не заведётся. Для 3,3-вольтового контроллера берите родственное семейство MAX3483/MAX3485 — оно рассчитано на 3,0–3,6 В.
  2. RO на RX. У Uno это пин 0 (или SoftwareSerial), у Mega — Serial1 (19). У ESP32 UART2 обычно GPIO16 — сверяйте по своей плате.
  3. DE и /RE соединяются вместе на GPIO — пин направления.
  4. Между двумя устройствами — витая пара. Терминатор 120 Ом ставится только на краях шины, не в середине.

Схема: RO на GPIO16, DI на GPIO17, DE и /RE вместе на GPIO4; линия — витая пара между A первого чипа и A второго, B первого с B второго, по 120 Ом между A и B на краях.

Рабочий код обмена

#include
#define RX_PIN 16 // RO приёмника MAX485
#define TX_PIN 17 // DI драйвера MAX485
#define DIR_PIN 4 // DE и /RE вместе: HIGH — говорим, LOW — слушаем
HardwareSerial RS485(2); void setup() { pinMode(DIR_PIN, OUTPUT); digitalWrite(DIR_PIN, LOW); // стартуем в режиме приёмника RS485.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN); Serial.begin(115200);
} void loop() { // ---- передача ---- digitalWrite(DIR_PIN, HIGH); delayMicroseconds(50); // драйвер выходит из Hi-Z не мгновенно RS485.print("temp=23.7C\n"); // одно сообщение закончилось \n RS485.flush(); // дождались, пока уйдёт байт за байтом delayMicroseconds(50); // теперь можно ронять DE digitalWrite(DIR_PIN, LOW); // отдали линию соседу // ---- приём ---- if (RS485.available()) { String line = RS485.readStringUntil('\n'); Serial.println("Got: " + line); } delay(1000);
}

Главное правило кода — дожимать буфер (flush) перед сбросом направления: сбой этой пары строк даёт половину всех глюков RS-485.

Ошибка новичка №1: забытый полудуплекс

Пока DE держится HIGH, свой приёмник молчит: входы заняты. Отсюда два правила: направление переключается всегда, и очередь на шине не возникает сама — одно устройство говорит, остальные слушают.

Почему «висяк» не значит «висяк»

У приёмника есть встроенный fail-safe: если A и B висят в воздухе, RO гарантированно держит высокий уровень — это прямо по datasheet (receiver input has a fail-safe feature). Обрыв линии вы увидите не как поток «мусора», а как стабильные единицы. Но fail-safe не заменяет терминатор: пока никто не передаёт, сигнала на шине нет.

Частые ошибки

  1. Подают 3,3 В на VCC. Питание по паспорту 4,75–5,25 В, ниже чип не заведётся; для 3,3-вольтовой платы — MAX3483/MAX3485.
  2. Забывают отпустить DE. Пока DE=1, передатчик держит линию, и чужие передачи под свои биты уже не слышны. Обязательно digitalWrite(DIR_PIN, LOW) после каждой передачи.
  3. Перепутали A и B. A первого узла обязан идти на A второго: поменяете местами — инверсия полюсов, приёмник покажет бессмыслицу.
  4. Не ставят терминатор при длинной линии. На скоростях выше ~200 кбит/с и проводах в десятки метров без 120 Ом на краях — отражения и срыв байта. Для коротких проводов и низких скоростей MAX483 с пологими фронтами потянет, у MAX485 терминатор обязателен.
  5. Гонят на максимуме без нужды. Для 9600 бод хватит MAX483/MAX487; быстрый обмен — только MAX485.
  6. Путают полярность DE и /RE. DE активен единицей, /RE — нулём. Их часто соединяют вместе (это нормально), а вот подключить DE как «активный ноль» — типовой промах.
  7. Ищут спящий режим. У MAX481/483/487 он есть (RE=1, DE=0 → около 0,1 мкА), у MAX485 его нет — он всегда потребляет около 500 мкА. Для батарейного проекта берите MAX481.

Где почитать дальше

RS-485 хорошо ложится рядом с другими видами связи проекта: Bluetooth-модули HC-05/HC-06 закрывают ближнюю зону без проводов, а измерение тока INA219 покажет, что происходит по 5 В, когда на шине живут 32 узла.

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

Читайте дальше

Контроллеры

Обзор: Arduino Uno, Nano и Pro Mini — чем отличаются и что взять под задачу

Три платы — один чип Uno, Nano и Pro Mini построены на одном ATmega328P: 32 КБ флеша, 2 КБ ОЗУ, 1 КБ…

Читать обзор →
Связь

LoRa-модуль Ra-02 (SX1278): связь на километры без интернета — обзор и подключение

Что это за модуль Wi-Fi и Bluetooth работают на десятки метров, сотовой связи в поле нет, а передать показания датчика с дачи…

Читать обзор →
Дисплеи

Дисплей LCD1602 с I2C-переходником PCF8574: обзор и подключение

Экран 16×2 — первый дисплей, который берёт новичок, и первая же ловушка: ему нужны шесть проводов данных и управления, плюс отдельная подстройка…

Читать обзор →