
Итак мой друг, ты решил сказать своему товарищу что он петух что-то очень важное. Вот только твой друг — микроволновка с тремя проводами: RX TX GND. Можно было-бы просто подключить UART, но…
Голый UART крайне уязвим к помехам.
Он отлично работает когда ты подключаешь свою чипипирку к компу коротким кабелем, но стоит проводу стать чуть длиннее, пройти мимо электродвигателя или просто словить не тот вайб, так на его выходе ты получишь с̶̰͈̄̚о̸̡͈̬̎̇в̵̳̤̻͐̽̋е̷̤̍р̴̙̟̠̆͘ш̸̻̎е̶̨̘̯̃́н̵̝͇̻̋н̵͎̠́̊͌о̶͙̍ ̵̧̧̼͒̈́н̷̨̽о̸̢͓̣̽̚р̵̱̼̜̓м̸̙͍̙̂͐̍а̶͈̝̃̆͝л̸͎̽ь̷͔͛͝н̷͙̈̐ы̷̬̑̇й̷͓̹͍̑ ̶̻̊т̵͕͉͌е̴̞͓̋̋к̴̲̠̃̀с̸̮̭͈́т̵̪̳̍̿
RS485 решает эту проблему, отчасти.
Установив поверх UART микросхему 485 происходит следующее:
- Качество и скорость связи значительно возрастает: в хороших случаях до 16килобайт/с по кабелю 1км. Скачать все сезоны Игры Престолов можно всего за 3 года.
- Доступно множество приемопередатчиков на линии. (вплоть до ОЧЕНЬ МНОГО устройств)
- В конкретный момент времени только одно устройство может орать, другие будут слушать (полудуплекс)
Тебе может показаться что это не очень интересная перспектива, но:
- Чип приемопередатчика крайне дешевый ( 0.1-0.4$ )
- Не всегда твоему контроллеру нужны скорости выше (а порой он и не может)
- Для промышленного оборудования это практически идеальный интерфейс (без обид, CAN)
Чип используется так часто, просто потому что во многих ситуациях достаточно изредка отправлять команды типа «ЧТО ПО СТАТУСУ?» и «ВКЛЮЧИ X4Z32»
Окей, окей, но всё-же что это такое, этот твой 485?
Во первых — это SP3485
Есть другие менее популярные чипы, но они практически все содержат в себе 3485. Некоторые неудачные клоны неповторимого SP3485 — это: MAX3485, ADM3485. Не смотря на свою ущербность, они имеют весьма качественные даташиты
Также стоит учитывать что SP3485 это модификация SP485. Главное отличие в напряжении питания, совместимости с 3.3v контролерами и цене. Небольшие табличка для сравнения:
XD485 | SP485 | SP3485 | MAX3485 | |
Питание | 5v | 5v | 3.3v | 3.3v |
Работа с 3.3v UART | 不知道 | С костылями | ✅ | ✅ |
Цена MOQ:100 | 0.117$ | 0.285$ | 0.416$ | 4$ |
Шашечки | ❌❌❌ | ❌ | ❌ | ✅ |
Да что же это за хрень?
Ладно, ладно, вот пример конкретной микросхемы:

Чип может показаться сложным, но это только первую сотню раз 🙂
Начнем с простого — питание. GND — земля. VCC — напряжение питания. На этом всё
У большинства 5в чипов цифровые входы совместимы с уровнями логики 3.3в. Назначение входов:
Пин | Описание | Если подать 0 | Если подать 1 |
R̅E̅ (Reciever Enable) | Контроль приемника | Выход RO будет работать как обычно | Выход RO будет в режиме высокого импеданса (High-Z). |
DE (Driver Enable) | Контроль ора | Выходы передатчика не будут никак воздействовать на линии A и B (High-Z). | Микросхема будет орать на линиях A и B. Что именно — определяет DI |
DI (Driver Input) | Вход данных | При DE=1 : A = 0, B = 1 | При DE=1 : A = 1, B = 0 |
Зачастую R̅E̅ не используется и его привязывают к земле.
Осталось только объяснить как работают 3 пина выхода: A, B, RO . Стоит начать с некоторых фактов о RS485:
- Дифференциальное напряжение Vdif ( равное разнице напряжений A — B ) является признаком отличия цифрового 1 от 0 на линии RS485
- При Vdiff >200мВ — считается что на линии логическая 1, и это будет выходом RO (При RE=0)
- При Vdiff < -200мВ — считается что на линии логический 0, и это будет выходом RO (При RE=0)
- Когда передатчик орет, Vdiff >1.5В.
Всё достаточно просто, но вот только один момент — что будет если никто не передает данные и напряжение Vdiff = 0?
¯\_(ツ)_/¯¯
Про терминаторы, нагрузку и failsafe
Не всё так идеально, есть некоторые неприятные моменты. Начнем с топологии:
Ввиду того что с длинными проводами есть некоторые неприятности (наличие волнового импеданса и отражений) — должна применяться топология «сосиска»
Правила построения сети — наличие двух терминаторов (Rt) и отсутствие длинных ответвлений от центральной линии. Нарушение этих правил приведет к понижению максимальной скорости.
Без хотя-бы одного одного терминатора в сети (он обязателен) можно встретить неприятности — прием шума и возможность запитать 3.3в электронику пятью вольтами.
В идеале, сопротивление Rt равно волновому сопротивлению кабеля, но в большинстве ситуаций просто используют резистор 120 Ом
Также стоит что максимальное количество приемников 485 может быть ограничено их импедансом (стандарт гарантирует только 32 элемента). Это зависит от качества используемого чипа, но на практике возможна работа с значительно большим количеством чипов (500+)
И что с Vdif=0в ? Ведь если у нас есть терминаторы и никто не передает сигнал, входное состояние не гарантировано. Тут возможен прием любого мусора.
Для решения этой проблемы есть два подхода — failsafe передатчики и пассивная подтяжка:
- У некоторых передатчиков явно указано свойство failsafe в документации. Большинство современных приемопередатчиков не требуют внешних резисторов.
- Для старых / черезмерно дешевых передатчиков, или для дополнительной надежности систем с низким количеством нодов используется внешние failsafe схемы:
Типовое значение резисторов находится в районе 470 — 1000 Ом и зависит от цели разработчика.
И земли на десерт
На последок стоит напомнить что интерфейс RS485 использует общую землю между всеми приемопередатчиками. Все устройства должны иметь хорошее заземление, либо отдельный третий провод земли. В особо жестких условиях эксплуатации этого будет недостаточно. Для предоставления высокой надежности в промышленных условиях необходима полноценная гальваническая изоляция (статья о изоляции данных и энергии: TBD).
К счастью — многие приборы изолированы сами по себе (сенсоры, счетчики) и имеют 4-х проводной интерфейс (GND, A, B, VCC). Это один из самых надежных и дешевых способов передачи данных.
Также, для улучшения характеристик, есть вариант с экранированным кабелем. Он не используется для выравнивания потенциалов и заземляется только в одной точке. Но на практике это можно встретить достаточно редко — это лишает главного преимущества — простоты и дешевизны.