Урок 61. Аппаратная реализация интерфейса RS-485. Объединение плат Ардуино в локальную сеть RS-485.

Связь Ардуино через RS485

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

Предыдущий урок     Список уроков     Следующий урок

Для подключения к линии связи RS-485 применяются дифференциальные передатчики и приемники.

 

Передатчик должен формировать два противофазных сигнала.

Сигналы RS485

При этом стандарт RS-485 предъявляет к нему довольно жесткие требования:

  • высокое быстродействие;
  • работа на низкоомную и емкостную нагрузку;
  • защита от коротких замыканий;
  • отключение от линии (перевод в 3 состояние).

Дифференциальные приемники должны выделять разность между сигналами линий. И это при значительном уровне синфазных помех (-7 … +12 В) и высоком быстродействии.

Реализовать такие функции на дискретных элементах крайне сложно. Проще использовать интегральные приемопередатчики.

 

Приемопередатчики (драйверы) интерфейса RS-485.

Существует большое количество различных типов приемопередатчиков (драйверов) RS-485. Я предпочитаю использовать микросхемы ADM485, SP485, MAX485. Это однотипные микросхемы разных производителей. Функциональные возможности, параметры, назначение выводов у них совершенно одинаковые.

Драйвер RS-484 Производитель Ссылка на документация
MAX485 Maxim Integrated Products MAX481-MAX1487.pdf
ADM485 Analog Devices ADM485.pdf
SP485 Sipex SP485.pdf

Микросхемы выполнены в 8 выводном корпусе и имеют низкую цену.

По моей партнерской ссылке на момент написания статьи:

  • микросхема MAX485ESA стоит всего 8 руб;
  • микросхема MAX485SPA стоит 15 руб;
  • модуль конвертера TTL в RS-485 можно купить за 45 руб.

Купить драйверы RS485

В 8 выводном корпусе драйвера реализованы приемник и передатчик с параметрами, полностью соответствующими стандарту RS-485. Выходы передатчика и входы приемника объединены в микросхеме.

Драйверы RS485

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

Схема преобразования интерфейса UART в RS485

Если необходима гальваническая развязка, приходится использовать оптроны. Например, по этой схеме.

Схема преобразования интерфейса UART в RS485 с гальванической развязкой

Питание драйвера (+5 V INT) в этом случае должно быть гальванически развязано.

 

Объединение нескольких плат Ардуино в локальную сеть RS-485.

В качестве примера практической реализации сети RS-485 переработаем распределенную систему из урока 59 на сеть RS-485.

Новая схема локального контроллера будет выглядеть так.

Схема

Пояснять особенно нечего. Я добавил драйвер RS-485 по стандартной схеме включения.

Внешний вид

Такие же преобразования произошли со схемой центрального контроллера.

Схема

Все контроллеры подключены параллельно двухпроводной линии связи. Локальные контроллеры получают питание 5 В от центрального контроллера.

Линия у меня не длинная, скорость передачи низкая (9600 бит/сек). Поэтому в терминаторах нет необходимости. Для устранения неопределенности состояния линии при отключенных всех передатчиках к схеме центрального контроллера добавлены 3 резистора.

Схема смещения

Вся система теперь выглядит так.

Общий вид системы

 

Программное обеспечение.

Резидентное программное обеспечение центрального и локального контроллера осталось прежним:

sketch_59_2.ino - центральный контроллер;

sketch_59_1.ino  - локальный контроллер.

Загрузить программы в платы Ардуино необходимо до запайки драйверов RS-485. Иначе они будут блокировать сигналы RxD и мешать загрузке из Arduino IDE.

Обмен данными по сети происходит под управлением библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave.

В программах, которые мы использовали в уроке 59, для организации сети через интерфейсы UART объекты ModBus создаются следующим конструктором:

Tiny_ModBusRTU_Slave slave(1, 8, regTable, 6, 13); // создаем объект ModBus

Последний параметр задает номер вывода для управления передатчиком RS-485 (сигнал DE). Для интерфейса UART этот вывод не нужен. Можно было параметр не задавать и сэкономить один вывод микроконтроллера. Но я его задал с номером 13 – светодиод общего назначения. Светодиод светился, когда в контроллере происходила передача данных.

Теперь мы подключили сигнал разрешения работы передатчика (DE) к 13 выводу. Поэтому программное обеспечение осталось прежним. В реальных разработках лучше использовать другой вывод.

 

Проверка работы системы.

Проверка ничем не отличается от тестирования системы-прообраза. Подал питание. Покрутил переменные резисторы, погрел термодатчики, понажимал кнопки. Все работает, данные отображаются на дисплее центрального котроллера. Ошибок обмена нет.

Дисплей системы

Имитировал ошибки обмена – нажал кнопку сброса локального контроллера.

Сообщение об ошибках

Посыпались ошибки на дисплее для данных обоих контроллеров.

В системе-прообразе на интерфейсе UART при нажатии сброса были ошибки только одного локального контроллера. Второй работал нормально. Происходит это, потому что при состоянии сброса микроконтроллер переводит все свои выводы в плавающее состояние (бросает в воздухе). Сигнал разрешения работы передатчика RS-485 за счет светодиод с резистором (вывод 13) переходит в состояние лог. 1. Для передатчика это разрешающий уровень. В результате выход драйвера блокирует линию связи.

Если необходимо, чтобы при отключении микроконтроллера сигналом сброса линия связи не блокировалась необходимо использовать для сигнала DE другой вывод. Также надо подключить его к земле через резистор сопротивлением 5…10 кОм.

Помехоустойчивость сети.

Все, что было написано по поводу сети RS-485 в предыдущем уроке в полной мере справедливо по отношению к нашей системе.

Длина линии связи теперь может достигать 1200 м. Скорость обмена можно увеличить. По сравнению с сетью через интерфейс UART схема незначительно усложнилась, но помехоустойчивость и все остальные параметры повысились. Получилась сеть совершенно другого качественного уровня.

 

В следующем уроке продолжу тему обмена данными между платами Ардуино.

Предыдущий урок     Список уроков     Следующий урок

Урок 60. Интерфейс RS-485.

RS485

В уроке расскажу о магистральном интерфейсе RS-485.

Предыдущий урок     Список уроков     Следующий урок

Интерфейс RS-485, наверное, самый распространенный интерфейс для организации малых сетей промышленной автоматизации.

 

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

  • шинной топологии ;
  • с витой парой в качестве среды передачи данных;
  • длина линии связи может достигать 1200 м;
  • скорость передачи данных до 10 Мбит/сек.

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

RS-485 описан в стандарте ANSI TIA/EIA–485–A :1998. Стандарт задает только электрические и временные параметры. Он не оговаривает:

  • протокол обмена;
  • типы кабелей и разъемов;
  • гальваническую развязку абонентов сети.

 

Основные параметры стандарта RS-485.

Параметр Значение
Топология сети Шина
Линия связи Витая пара
Гальваническая развязка Стандартом не оговаривается
Режим обмена данными Полудуплекс
Способ передачи данных Дифференциальные сигналы
Число абонентов сети До 32, может быть увеличено за счет повторителей
Максимальная длина линии связи 1200 м
Максимальная скорость передачи данных 10 мБит/сек

 

Способ передачи данных RS-485.

Стандарт интерфейса RS-485 определяет следующие сигналы:

  • A – неинвертирующий;
  • B – инвертирующий;
  • C – общая линия (необязательный сигнал).

Иногда используют альтернативные обозначения сигналов:

  • Data+ / Data-;
  • D+ / D-;
  • + / -.

В интерфейсе применяется дифференциальный способ передачи данных. Информация передается с помощью двух противофазных сигналов A и B, а состояние шины RS-485  определяется разностью потенциалов между линиями A и B относительно общей линии C. Напряжение каждой линии относительно земли может быть любым, но в пределах диапазона -7 … +12 В.

Сигналы RS485

RS-485 требует применения дифференциальных приемников и передатчиков.

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

Для приема данных используются дифференциальные приемники, которые выделяют разность напряжений между линиями A и B. При разности более 200 мВ, но до +12 В состояние линии считается равным логической единицы. При разности напряжений менее – 200 мВ, но не ниже – 7 В линия находится в состоянии логического нуля.

  • Va > Vb соответствует лог. 1;
  • Va < Vb соответствует лог. 0.

Нетрудно посчитать, что уровень помех и падение напряжения на активном сопротивлении линии могут достигать 1,3 В (выходное напряжение передатчика 1,5 В минус порог срабатывания приемников 0,2 В). Такой запас обеспечивает работу интерфейса на длинных линиях связи со значительным активным сопротивлением. Максимальная длина линии связи (1200 м) определяется именно этим параметром. Реальная разность напряжений на выходе передатчиков может достигать 5 В.

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

Благодаря симметричности передатчиков и приемников интерфейса значительный эффект в борьбе с электромагнитными помехами дает применение в качестве линии связи витой пары. Токи наводок в соседних витках направлены противоположно друг другу и взаимно компенсируются.

Компенсация электромагнитных наводок в витой паре

Стандарт RS-485 определяет следующие электрические параметры передатчиков и приемников.

Параметр Условия Значение Единица измерения
Мин. Макс.
Выходное напряжение передатчика без нагрузки Rнагр = ∞ 1,5
-1,5
6
-6
В
Выходное напряжение передатчика под нагрузкой Rнагр = 54 Ом 1,5
-1,5
5
-5
В
Выходное сопротивление передатчика 54 Ом
Ток короткого замыкания передатчика Замыкание выхода на источник питания +12 В или – 7В - ±250 мА
Синфазное напряжение на выходе передатчика Rнагр = 54 Ом -1 3 В
Чувствительность приемника Синфазное напряжение от -7 В до +12 В - ±200 мВ
Синфазное напряжение на входе приемника -7 +12 В
Входное сопротивление приемника 12 - кОм
Суммарное входное сопротивление 375 - Ом

 

Топология сети RS-485.

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

Топология RS485

Каждый абонент подключается к сети через дифференциальные передатчик (D) и приемник (R). В один момент времени активным (включенным) может быть только один передатчик сети. Все остальные передатчики должны находиться в третьем (высокоомном) состоянии. Управление состоянием передатчика происходит отдельным сигналом (DE).

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

Естественно, возникают моменты, когда все передатчики отключены, “линия висит в воздухе”. Если не принять специальных мер, то состояние линии будет неопределенно. На выходах приемников может быть любой уровень.

Устранить эту неопределенность можно, если подключить через резисторы неивертирующий вход приемника к шине питания, а инвертирующий вход к земле.

Дополнительные резисторы

Сопротивления резисторов должны быть такими, чтобы создать смещение между входами приемников не менее порога срабатывания (200 мВ). Эти резисторы должны быть учтены при расчете концевых резисторов – терминаторов.

Существуют другие варианты устранения неопределенности состояния сети в момент, когда все передатчики отключены. Но они все на уровне протоколов.

Можно в начале обмена передавать служебную последовательность кодов. Но это значительно усложняет обмен, требует передачи лишних данных.

Если в сети всегда есть активное устройство, то существует вариант – выключение передатчика в момент, когда второй передатчик уже включен, но оба находятся в состоянии лог. 1. Допустим, ведущее устройство передает данные. Затем оно переводит выход своего передатчика в состояние лог. 1. Ведомое устройство включает свой передатчик, также в состоянии лог. 1. Далее Ведущее устройство отключает передатчик , и ведомое начинает передавать данные. Линия никогда не остается отключенной. Такой алгоритм требует четкой синхронизации, отработки временных интервалов коммутации передатчиков.

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

 

Согласование линии связи.

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

Причина – распределенные емкостные и индуктивные свойства кабеля. На практике кабель имеет однородную конструкцию на протяжении все длины, следовательно, одинаковые распределенные параметры. Поэтому свойство кабеля можно характеризовать одним параметром – волновым сопротивлением. Так вот, искажение сигнала в кабеле можно значительно уменьшить, если на приемном конце подключить резистор сопротивлением, равным волновому сопротивлению кабеля. Такой резистор называется терминатором. В сетях RS-485 терминаторы ставятся на оба конца кабеля, т.к. обе стороны могут быть как приемными, так и передающими.

Согласование кабеля RS485

Волновое сопротивление витых пар, как правило, составляет 100 … 150 Ом. Для сетей RS-485 разработаны специальные кабели с волновым сопротивлением 120 Ом. Именно это сопротивление терминаторов считается стандартным. Часто терминаторы с сопротивлением 120 Ом уже установлены в устройствах с интерфейсом RS-485 и могут быть отключены переключателем.

На практике используются терминаторы и с большим сопротивлением, чем волновое сопротивление кабеля. Если активное сопротивление кабеля велико и сравнимо с сопротивлением терминаторов, то на приемной стороне амплитуда сигнала может значительно снизиться. В этом случае необходимо искать компромисс между допустимыми искажениями сигнала и его амплитудой. На низких скоростях передачи, 9600 бод и ниже, применение низкоомных терминаторов может даже уменьшить качество приема.

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

Соединение устройств RS485

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

 

Гальваническая развязка.

Стандарт RS-485 не предусматривает гальваническую развязку интерфейса от линии связи. Но если устройства сети расположены на большом расстоянии друг от друга, то потенциалы их земляных проводов могут разойтись на значительное напряжение. В этом случае не спасут дифференциальные сигналы, их потенциалы могут разойтись больше чем допустимые -7 … + 12 В. Это приведет к неработоспособности интерфейса и даже выходе его из строя.

Земляные помехи

Поэтому практически все промышленные варианты устройств с RS-485 имеют гальваническую развязку от линии связи. Это необходимо еще и с точки зрения электробезопасности.

 

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

Предыдущий урок     Список уроков     Следующий урок