Обзор конвертера TTL-RS485

В предыдущей статье рассказывал о протоколе связи I2C используемый в дисплеях LCD1602, OLED и во многих других устройств. Сегодня расскажу о другом протоколе RS485, который использует асинхронную передачу данных и преимуществом RS-485, является возможность передачи данных на большие расстояния. Данный протокол часто используется промышленности.
В этой статье приведу пример организации связи по протоколу RS485 и использовании недорогих модулей на базе микросхемы MAX485.

Технические параметры.

► Рабочее напряжение: 5 В
► Потребляемый ток: < 10 мА
► Ток потребляемый в режиме ожидания: < 5 мА
► Частота передачи данных: <2,5 Мбит/с
► Габариты: 44x14x20 мм

Немного о RS485

RS485 — это протокол асинхронной последовательной связи, который не требует тактового сигнала, по сути это предок протоколы RS232. Максимальное расстояние для передачи данных составляет 1200 метров, конечно ее можно увеличить с помощью специальных усилителей. Но при больших расстояниях скорость передачи будет около 60 кб/с. В качестве линии используется витая пара (два провода скрученные с друг другом).
Так же, к одной линии можно подключить до 32 устройств.

Общие сведения о модуль RS485

Модуль собран на небольшой плате, габариты которой всего 44 мм х 20 мм, основная микросхема это MAX485, которая преобразует сигнал TTL (необходимый для Arduino) в стандарт RS485 и обратно. Так же, кроме микросхемы MAX485 на модуле установлена минимальная электрическая обвязка.

Принципиальная схема модуля показана на рисунке ниже.

Назначение контактов:
► VCC и GND — питание модуля
► B — Вход/выход линии RS-485
► A — Вход/выход линии RS-485
► DI — Вход передатчика (TX)
► DE — Разрешение работы передатчика
► RE — Разрешение работы приёмника
► RO — Выход приемника (RX)

Переключение модуля на прием и передачу осуществляется с помощью выводов DE и RE. Если их замкнуть между собой и подключить к любому цифровому выводу arduino, то подав на него «1» модуль будет работать только на передачу, а подав «0», только на приём.

Подключение Arduino к RS485

Необходимые детали:
► 
Arduino UNO R3 x 2 шт.
► Конвертер TTL-RS485 на чипе MAX485 x 2 шт.
► Провода DuPont, 2,54 мм, 20 см x 1 шт.

Подключение.
В примере используем две Arduino UNO и два модуля RS485. Сначала подключаем Arduino (Master) к модулю RS485, вывод 10 (Arduino) к RO (RS485), вывод 11 (Arduino) к RI (RS485) и вывод 3 подключаем к контактам RE, DE (RS485). Затем подключаем питание VCC и GND и конечно два провода в шине RS485, «A» к «A», «B» к «B». Аналогично собираем и второю Arduino.

Программа.
В примере, используем библиотеку «SoftwareSerial» которая входит в среду разработки Arduino IDE. Библиотеку используем только для удобства, так как если воспользоватся выводами 0 и 1, нам придется каждый раз отключать модуль MAX485 при загрузке скетча. Сама программа не сложная, мы одновременно подключим две Arduino на один компьютер и запустим две среды разработки Arduino IDE. Открыв мониторинг порта мы отправим команды с Master Arduino на Slave Arduino и обратно.

Программа для Master

  Скачать скетч

Программа для Slave

  Скачать скетч

Откройте мониторинг порта в обеих arduino IDE и

Описание скетча.
Опишу только программу Master, так как она немного отличается от Slave. Первым делом мы подключаем библиотеку SoftwareSerial, затем указываем к каким выводам будет подключен модуль RS485. Далее создаем переменную val для хранения передаваемых данных и создаем еще одну переменную DE_RE, для переключения модуля на с передающего в принимаемого.

В setup, мы открываем последовательную связь между ПК и Arduino на скорости 19200, затем отправляем текст Master!. Далее мы открываем последовательную между Arduino и RS-485. Следующей командой pinMode(DE_RE,OUTPUT) мы задаем вывод как выход и следующей командой digitalWrite(DE_RE,LOW) устанавливаем ее в «0», тем самым включив его на прием данных.

В loop, мы проверяем, поступили ли данные с последовательного порта компьютера, если данные есть, мы переводом в режим передачи данных, командой digitalWrite(DE_RE,HIGH). Далее копируем данные в переменную val и передаем в последовательный порт на RS485, командой Master.write(val).

Если данных от компьютера не поступало, переводим модуль RS485 на прием данных, командой digitalWrite(DE_RE,LOW). Далее проверяем, поступают данные в последовательный порт от модуля RS-485, если да то копируем данные в переменную val и отправляем в последовательный порт компьютера.

Заключение:
Данный модуль подойдет тем кому необходимо временно организовать связь по протоколу RS-485 для тестирования. Не рекомендую использовать его постоянно, так как в нем нет оптической развязки по шине RS485, если ударит молния или кто то замкнет шину на фазу, сгорит и модуль и arduino.

Купить на Aliexpress
  Контроллер Arduino UNO R3 на CH340G
 Контроллер Arduino UNO R3 на Atmega16U2
  Конвертер TTL-RS485 на чипе MAX485 
  Комплект проводов DuPont, 2,54 мм, 20 см

Купить в Самаре и области
  Контроллер Arduino UNO R3 на CH340G
 Контроллер Arduino UNO R3 на Atmega16U2
  Конвертер TTL-RS485 на чипе MAX485 
 Провода DuPont, 2,54 мм, 20 см 

Читайте также:

комментария 4

  1. Yuri:

    а чем же они отличаются!? «мастер» и «слэйв»?

    • Сергей:

      Здравствуйте, мастер передает данные а слэйв получает их… То есть данные передаются только в одну сторону.

  2. Георгий:

    Сергей, поясните пожалуйста про «► DI — Вход передатчика (TX) и ► RO — Выход приемника (RX) «. Я вижу эти же данные в даташите на MAX485. Почему так подписывают данные контакты? Ведь подключаются они к контактам Arduino TX и RX соответственно.Тогда в назначении контактов платы конвертора было бы корректно указать DI (Rx) и RO (Tx)?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *