Rs232 to rs485 arduino

Содержание

Урок 26.2 Соединяем две arduino по стандарту RS485

При создании некоторых проектов, требуется разделить выполняемые задачи между несколькими arduino.

В этом уроке мы научимся соединять две arduino по стандарту RS485 через аппаратную шину UART.

Преимущества:

  • Простота реализации.
  • Реализуется возможность подключения более двух arduino.
  • Любая arduino на линии связи может работать ведущим и/или ведомым.
  • Передача данных осуществляется на большие расстояния (длина линии связи до 1,2 км).
  • Не требуется отключать модули от шины UART при загрузке скетча.

Недостатки:

  • Связь осуществляется в полудуплексном режиме (одновременно может отправлять данные только одна arduino).
  • Используется дополнительный цифровой вывод arduino, для управления конвертирующим модулем.

Нам понадобится:

  • Arduino х 2шт.
  • LCD дисплей LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) х 2шт.
  • Trema Shield х 2шт.
  • Эластичная клавиатура 4×4 х 2шт.
  • Шлейф «мама-мама» (4 провода) для шины I2С х 2шт.
  • Витая пара «мама-мама» (2 провода) — линия связи x 1шт.
  • Конвертирующий модуль на базе чипа MAX485 х 2шт.

Для реализации проекта нам необходимо установить библиотеки:

  • Библиотека iarduino_KB (для подключения матричных клавиатур).
  • Библиотека LiquidCrystal_I2C_V112 (для подключения дисплеев LCD1602 по шине I2C).

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .

Видео:

Схема подключения:

Подключение LCD дисплея осуществляется к аппаратным выводам шины I2C.
Клавиатура подключается к любым цифровым выводам, в примере используются выводы 2-9.
Конвертирующий модуль подключается к шине UART:

RE (Receiver Enable — разрешение работы приёмника)

Конвертирующий модуль Arduino
DI (Driver Input — вход передатчика) TX (transmit — передать)
RO (Receiver Out — выход приёмника) RX (receive — получить)
Vcc (Voltage constant current — напряжение постоянного тока) Vcc
GND (GrouND — земля) GND (GrouND — земля)
DE (Driver Enable — разрешение работы передатчика) D10 (Digital — цифровой)
D10 (Digital — цифровой)

На рисунке приведён пример подключения двух и более устройств.
Схемы устройства-1, устройства-2, . — идентичны.

Все конвертирующие модули на линии соединяются одноименными выводами: «A» с «A», «B» с «B».

Код программы:

Настройка параметров линии связи:

Конвертирующий модуль только преобразует сигналы TTL в стандарт RS485 и обратно. Параметры линии: скорость передачи данных, количество бит в минимальной посылке, длина стопового бита, проверка на чётность/нечётность, зависят от настроек шины UART, см. раздел «Настройка параметров шины UART» в уроке 26.1.

Настройки шины UART всех arduino подключённых к линии должны быть идентичны!

Источник

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

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

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

► Рабочее напряжение: 5 В
► Потребляемый ток:

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

Назначение контактов:
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 и обратно.

Источник

Arduino RS-485: Подключение, описание и примеры с кодами

Интерфейс RS-485

RS-485 является одним из наиболее распространенных интерфейсов передачи данных.

Для передачи сигнала используется всего два провода. Обычно применяется витая пара UTP, но можно использовать и простой кабель. Ну, а связка Arduino и RS-485 открывает большие возможности в различных DIY проектах.

Интересные факты о RS-485

Максимальная длина линии интерфейса RS-485 составляет 1200 метров и подключить к одному кабелю можно до 32 устройств. Предком интерфейса RS-485 является RS-232.

Преимущество связки Arduino RS-485

  • Длина линии связи, которая может достигать 1200 метров.
  • Подключение к одной линии до 32 устройств.
  • Помехоустойчивость.
  • Простота реализации.
  • Любая Arduino может быть ведущим или ведомым устройством.

Недостатки RS-485

  • Скорость уменьшается с увеличением длины провода.
  • Полудуплексный режим, то есть прием и передача производится по одной паре проводов.

При передачи данных на расстояние от 500 метров потребуется экранированный UTP кабель. Скорость может снизиться до 50 Кбит/с, но этого вполне достаточно для передачи показаний с датчиков.

Схема подключения Arduino по RS-485

Для подключения плат Arduino по интерфейсу RS-485 потребуется конвертирующий модуль на базе MAX485. Это

Модуль TTL to RS-485
Преобразователь логики Arduino в RS-485

Схема соединения двух Arduino UNO

Код программы для Arduino RS-485

Программа для одностороннего приема и передачи

Напомним, что в один момент времени устройство может либо принимать, либо отправлять данные. Для указания устройства в качестве приемника или передатчика на модулях присутствуют контакты DE и RE. Высокий уровень на контактах — режим передатчика, низкий — приёмника.

Программа для передатчика — Она будет отправлять в Serial Port строку «test» один раз в секунду.
Программа для приемника — При появлении в эфире строки «test» будет мигать светодиодом на плате Arduino (13 пин).

Код программы приемника

Код программы передатчика

Программа для двухстороннего приема и передачи данных

Код программы для первой платы Arduino

Теперь платы Arduino буду менять режим приемника/передатчика в момент отправки сообщения.

Код программы для второй платы Arduino

Разновидности микросхем RS-485

Существуют различные микросхемы RS-485 — MAX485, ADM485, SP485, SN75176. Функциональные возможности которых идентичны, назначения выводов совершенно одинаковые.

Микросхемы представлены в SOIC-8 и DIP-8 корпусах.

Защита от помех

  1. Снижение скорости передачи данных повышает помехоустойчивость. Не устанавливайте скорость большую, чем требуется для нормального функционирования системы.
  2. Не прокладывайте сигнальный кабель вместе или вблизи силовых кабелей.
  3. В промышленных зонах рекомендуется применять экранированную витую пару с последующем заземлением экрана.
  4. Использование индуктивных фильтров для избавления системы от высокочастотных помех.

Заключение

Интерфейс RS-485 применяется в промышленных системах из-за устойчивости к помехам и возможностью передавать данные на большие расстояния.

Но этот интерфейс нашел применение в домашних системах Умного дома и проектах Arduino по тем же причинам.

RS-485 широко используется с протоколами ModBus и DMX512.

* ModBus — открытый коммуникационный протокол.
* DMX512 — протокол передачи данных между контроллерами и световым оборудованием.

Источник

Последовательная связь с помощью RS-485 между Arduino Uno и Arduino Nano

Выбор протокола (интерфейса) связи между микроконтроллером и периферийными устройствами является важной частью встраиваемых систем. От правильности его выбора зависят многие параметры подобной системы: стоимость, скорость передачи данных, максимальное расстояние связи и т.д.

В предыдущих статьях мы изучили использование интерфейса I2C и интерфейса SPI в платах Arduino. В этой же статье мы рассмотрим использование в платах Arduino интерфейса асинхронной последовательной связи RS-485. Основным преимуществом интерфейса RS-485 является большая дистанция связи. Также он обладает хорошей устойчивостью к помехам, благодаря чему находит применение в условиях со сложной (сильно зашумленной) электромагнитной обстановкой.

В данной статье мы рассмотрим обмен данным между двумя платами Arduino с помощью интерфейса RS-485. Мы будем управлять яркостью свечения светодиода, подключенной к ведомой плате Arduino, с ведущей платы Arduino при помощи передачи значений АЦП (аналогово-цифрового преобразования) с помощью модуля RS-485. Для изменения значений АЦП в ведущей плате Arduino мы будем использовать потенциометр 10 кОм.

Принципы работы интерфейса последовательной связи RS-485

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

Если следовать определению из википедии, дифференциальный сигнал представляет собой способ электрической передачи информации с помощью двух противофазных сигналов. В данном методе один электрический сигнал передаётся в виде дифференциальной пары сигналов, каждый по своему проводнику, но один представляет инвертированный сигнал другого, противоположный по знаку. Пара проводников может представлять собой витую пару, твинаксиальный кабель или разводиться по печатной плате. Приёмник дифференциального сигнала реагирует на разницу между двумя сигналами, а не на различие между одним проводом и потенциалом земли.

В нашем случае дифференциальный сигнал образуется при помощи использования положительного и отрицательного напряжения 5V. Интерфейс RS-485 обеспечивает полудуплексную связь (Half-Duplex) при использовании 2-х линий (проводов) и полноценную дуплексную связь (Full-Duplex) при использовании 4-х линий (проводов).

Основные особенности данного интерфейса:

  1. Максимальная скорость передачи данных в интерфейсе RS-485 – 30 Мбит/с.
  2. Максимальная дистанция связи – 1200 метров, что значительно больше чем в интерфейсе RS-232.
  3. Основным достоинством интерфейса RS-485 по сравнению с RS-232 является использование нескольких ведомых (multiple slave) при одном ведущем (single master) в то время как RS-232 поддерживает только одного ведомого.
  4. Максимальное число устройств, которое можно подключить по интерфейсу RS-485 – 32.
  5. Также к достоинствам интерфейса RS-485 относится хорошая помехоустойчивость вследствие использования дифференциального сигнала.
  6. RS-485 обеспечивает более высокую скорость передачи по сравнению с интерфейсом I2C.

Использование интерфейса RS-485 в Arduino

Для использования интерфейса RS-485 в плате Arduino мы будем использовать модуль 5V MAX485 TTL to RS485, в основе которого лежит микросхема Maxim MAX485. Модуль является двунаправленным и обеспечивает последовательную связь на расстояние до 1200 метров. В полудуплексном режиме он обеспечивает скорость передачи данных 2,5 Мбит/с.

Модуль 5V MAX485 TTL to RS485 использует питающее напряжение 5V и логический уровень напряжения также 5V, что позволяет без проблем подключать его к платам Arduino.

Данный модуль имеет следующие особенности:

  • работает с напряжениями 5V;
  • имеет в своем составе чип MAX485;
  • отличается низким энергопотреблением;
  • всеми его контактами можно управлять с помощью микроконтроллера;
  • размеры платы модуля: 44 x 14mm.

Внешний вид модуля RS-485 показан на следующем рисунке.

Назначение контактов (распиновка) модуля RS-485 приведена в следующей таблице.

Название контакта Назначение контакта
VCC 5V
A вход/выход линии RS-485
B вход/выход линии RS-485
GND GND (0V)
R0 выход приемника (RX pin)
RE разрешение работы приемника
DE разрешение работы передатчика
DI вход передатчика (TX pin)

Для подключения модуля к платам Arduino (UNO и NANO) мы будем использовать их последовательные порты на контактах 0 (RX) и 1 (TX). Для передачи данных модулю RS-485 мы будем использовать функцию Serial.print(), а для считывания данных из него – функцию Serial.Read() (или аналогичную).

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Плата Arduino Nano (купить на AliExpress).
  3. MAX485 TTL to RS485 Converter Module (модуль преобразования логики TTL в RS485, купить на AliExpress) – 2 шт.
  4. Потенциометр 10 кОм (купить на AliExpress).
  5. ЖК дисплей 16х2 (купить на AliExpress).
  6. Светодиод (купить на AliExpress).
  7. Макетная плата.
  8. Соединительные провода.

В нашем проекте плата Arduino Uno будет использоваться в качестве ведущей, а плата Arduino Nano – в качестве ведомой.

Схема проекта

Схема для последовательной связи с помощью интерфейса RS-485 между платами Arduino Uno и Arduino Nano представлена на следующем рисунке.

В следующей таблице представлены необходимые соединения между платой Arduino Uno (ведущей) и модулем RS-485.

RS-485 Arduino Uno
DI 1 (TX)
DE RE 8
R0 0 (RX)
VCC 5V
GND GND
A к контакту A ведомого RS-485
B к контакту B ведомого RS-485

В следующей таблице представлены необходимые соединения между платой Arduino Nano (ведомой) и модулем RS-485.

RS-485 Arduino Nano
DI 1 (TX)
DE RE 8
R0 D0 (RX)
VCC 5V
GND GND
A к контакту A ведущего RS-485
B к контакту B ведущего RS-485

В следующей таблице представлены необходимые соединения между платой Arduino Nano и ЖК дисплеем 16х2.

ЖК дисплей 16х2 Arduino Nano
VSS GND
VDD +5V
V0 к центральному контакту потенциометра для управления контрастностью ЖК дисплея
RS D2
RW GND
E D3
D4 D4
D5 D5
D6 D6
D7 D7
A +5V
K GND

Потенциометр 10 кОм подключен к аналоговому контакту A0 платы Arduino UNO. Светодиод подключен к контакту D10 платы Arduino Nano.

Объяснения программ для плат Arduino UNO и Arduino Nano

Для программирования обоих плат используется среда Arduino IDE. Убедитесь в том, что вы выбрали правильный порт из пункта меню Tools->Port и правильный тип платы из пункта меню Tools->Board.

Полный код программ приведен в конце статьи, здесь же мы рассмотрим их основные фрагменты. Видео, демонтсрирующее работу проекта, также приведено в конце статьи.

Объяснение программы для платы Arduino UNO (ведущей)

В программе для ведущей стороны нам просто необходимо считывать значение напряжения с выхода потенциометра, подключенного к аналоговому контакту A0 и затем с помощью функции SerialWrite передавать их модулю RS-485 через контакты последовательного порта (0,1) платы Arduino UNO.

Инициализация последовательной связи на контактах (0,1) производится с помощью следующей команды:

Источник

Adblock
detector