Модуль UART TTL – RS-485 на MAX485: подключение к Arduino

Как преобразователь на MAX485 выводит Arduino на шину RS-485: характеристики, выводы и две схемы обмена данными.
Зачем нужен RS-485
RS-485 — стандарт проводной связи, который чаще всего применяют для объединения в сеть промышленного оборудования. Приём и передача идут по одной витой паре. Стандарт допускает расстояние между устройствами до 1,2 км и до 32 устройств на одной шине. Одно из них является ведущим (master), остальные — ведомыми (slave).
Приёмопередатчиков RS-485 существует много. Модули на микросхеме MAX485 преобразуют сигналы TTL в уровни RS-485 и обратно, поэтому через них к шине подключают устройства на базе Arduino.

Характеристики и выводы
| Напряжение питания | 5 В |
| Ток потребления | 10 мА |
| Ток в режиме ожидания | 5 мА |
| Скорость передачи данных | до 2,5 Мбит/с |
| Рабочая температура | 0–70 °С |
| Размер | 44x14x20 мм |
На плате модуля восемь контактов:
- Vcc — питание +5 В;
- GND — земля;
- DI — вход передатчика;
- RO — выход приёмника;
- DE — разрешение работы передатчика;
- RE — разрешение работы приёмника;
- A и B — линии передачи данных.
Все модули на шине соединяются одноимёнными выводами: A с A, B с B. Соединение обязательно выполняют витой парой.
Управление направлением
Входы DE и RE можно объединить и подключить к одному цифровому выводу Arduino. Тогда высокий уровень (HIGH) на этом выводе переводит модуль только на передачу, а низкий (LOW) — только на приём. Для обмена с модулем в примерах используется программный последовательный порт библиотеки SoftwareSerial, а аппаратный Serial остаётся для вывода в монитор порта.

Arduino и компьютер на одной шине
Со стороны компьютера нужен адаптер USB – RS-485; система видит его как COM-порт.

Arduino в этой схеме работает ведомым устройством. Программный порт создаётся строкой SoftwareSerial RS485Serial(3, 2), то есть RX на контакте 3, TX на контакте 2, а объединённые выводы RE и DE подключены к пину 6. Оба порта запускаются на скорости 9600. В setup на пин направления подаётся LOW, и модуль слушает шину.
Скетч накапливает принятые байты в строку, пока не встретит символ «*» — признак конца передачи. После этого проверяется первый байт, который играет роль адреса. Если это символ «1», плата переводит модуль в режим передачи, выдерживает паузу 10 мс, отправляет ответ «OK», снова ждёт 10 мс и возвращается к приёму. Проверить обмен можно из любой терминальной программы для COM-порта, например ComPortToolkit: на команду, начинающуюся с «1», приходит ответ «OK».

Две платы Arduino по RS-485
Во втором примере первая плата по нажатию кнопки отправляет команду, а вторая переключает по ней светодиод. Для сборки нужны:
- плата Arduino Uno — 2 шт.;
- модуль TTL – RS-485 — 2 шт.;
- плата прототипирования;
- светодиод и кнопка;
- резисторы 10 кОм и 220 Ом;
- провода.
На обеих платах программный порт объявлен как SoftwareSerial RS485Serial(7, 6) — RX на 7, TX на 6, выводы RE и DE модуля заведены на пин 10, скорость 9600. Первая плата держит модуль в режиме передатчика. Кнопка подключена к пину 12 и опрашивается с подавлением дребезга: при изменении состояния выдерживается пауза 5 мс и вывод читается повторно. Каждое нажатие меняет значение переменной состояния светодиода, после чего в шину уходит строка «1=1» или «1=0».
Вторая плата постоянно находится в режиме приёма и собирает строку тем же способом, что и в примере с компьютером. Если первый символ равен «1», а второй «=», третий определяет состояние светодиода на пине 12: «0» гасит его, любое другое значение зажигает. Принятая строка дублируется в монитор порта.
Если связи нет
- Проверить питание плат Arduino и модулей TTL – RS-485.
- Проверить правильность соединений плат и модулей.
- Убедиться, что приёмопередатчики соединены витой парой.
- Убедиться, что на шине только одно ведущее устройство, а остальные работают ведомыми.