Для начала немного истории. RS485 – это сокращение от Recommended Standard номер 485. Была такая организация в Соединенных Штатах – ассоциация производителей электроники (Electronic Industry Association). Она в свое время выпустила ряд рекомендаций для того, чтобы оборудование разных производителей могло совместно работать. Самые известные из тех рекомендаций – стандарты номер 232 и 485. Надо отметить, что впоследствии EIA объединилась с TIA и переименовалась в опять же EIA (но на этот раз Electronic Industries Alliance). Поскольку желающих писать стандарты в мире много, то, чтобы не перепутать, стандарты этой организации теперь официально называются EIA-232 и EIA-485. Первый из них – RS232 – впоследствии стал нормой для модемного оборудования и потому весьма жестко и многократно стандартизован (пережил около 10 различных уточняющих и улучшающих редакций от имени семи или даже восьми организаций, включая такие, как ITU, CCITT, ANSI, ISO). И поныне он присутствует на многих настольных компьютерах, хотя уже давно не рекомендован для применения. Младшему же брату – RS485 – повезло меньше. Во-первых, изначальный текст RS-485 включал в себя лишь описание уровней напряжений на проводах. Впоследствии наибольшее применение RS485 нашел на закрытых сетях промышленной автоматизации, и в частности в системах охраны. Производители такого оборудования, а также и производители микросхем, реализующих RS485, не очень сильно заботились о совместимости. Да, существует ряд более точно описанных стандартов, основанных на RS485, например, Modbus, Profibus и Bacnet, но они также не очень жесткие. Дополнительно масла в огонь добавил CAN, который, по сути, основан на RS485, и потому впоследствии многие производители применяли в своих системах, называемых RS485, ряд идей, позаимствованных обратно из CAN.
Разберем подробнее каждый из пунктов. Во-первых, поясню, что такое дифференциальный сигнал. Это значит, что измеряется напряжение между двумя проводами. Имеет значение только напряжение между проводами, а каков потенциал этих проводов относительно земли – не очень важно.
На практике это означает, что передатчик подает то на один провод 0В, а на другой 5В, то наоборот. А приемник анализирует, на каком проводе напряжение выше и понимает, «0» или «1» ему передали. А теперь тонкость номер 1. Изначально стандарт требовал, чтобы приемник заведомо воспринимал разницу напряжений, превышающую 200 мВ. Если один провод на 200 мВ выше другого – это «1». Если ниже – значит «0». А что будет, если разницы напряжений вообще нет? Например, если передатчик отключен? Приемник имеет право воспринимать малейшие шумы то как «1», то как «0». Конечно, шум – это просто бессмысленный шум, но, говорят, даже обезьяна за пишущей машинкой за миллион лет может случайно написать «Войну и мир». А вам надо случайно получить команду включения пожаротушения? Что же делать? Есть несколько решений проблемы, применяемых разными производителями микросхем. Первое – если напряжение между проводами заметное время находится между -200 и +200 мВ, то микросхема приемника выдает отдельный сигнал «линия свободна». Некоторые системы используют этот сигнал для того, чтобы устройства понимали, когда они могут начать передавать. Второе решение – микросхема приемника воспринимает все, что выше -200 мВ как заведомую «1». Поэтому между пакетами, когда никто на линии ничего не передает, наш прибор будет заведомо видеть «1» и не получит никаких нежелательных команд от источников помех. Если не применять специальные микросхемы, то аналогичный эффект достигается, если подключить (см. пункт 2 таблицы) пару резисторов к питанию, чтобы в случае отключенных передатчиков на линии заведомо было +250 мВ. Кстати, на картинке выше именно такой вариант – в паузах между пакетами явно присутствует небольшое напряжение. Вот как это обычно реализуют:
Но самый распространенный вариант борьбы с шумами – добавить гистерезис на 100–150 мВ. Тогда получается, что если последний раз напряжение было выше +200 и после этого болтается между -200 и +200, микросхема считает, что на линии все еще передается «1». А если напряжение вылезло ниже -200, то теперь микросхема будет выдавать «1», пока напряжение не перейдет вверх верхнюю границу и не станет выше +200. Картинка ниже иллюстрирует работу приемника с гистерезисом. График U – это входное напряжение, график А – это что бы выдал на выход приемник без гистерезиса, график В – с гистерезисом (шумы исчезли, а переключения при приеме сигнала немного сдвинулись).
Все описанные решения хороши, но никакое из них не идеально. Особенно чревато, если в одной системе встретятся устройства, которые ожидают реального нуля (между – и + 200 мВ), чтобы начать передачу, и устройства, которые в паузах легонько растягивают напряжение до -200 мВ. В таком случае первое устройство никогда не дождется возможности что-то передать. Перейдем ко второму пункту. Согласование кабеля. В теории на концах длинной линии передачи должны быть подключены резисторы, равные ее так называемому волновому сопротивлению. Тогда распространяющийся по линии сигнал воспринимает этот резистор как бесконечное продолжение линии связи и уходит в него без отражений. В противном же случае получается то, что изображено на рисунке ниже.
Вверху – исходный передаваемый сигнал, следующие две пары осциллограмм – напряжения на передатчике и приемнике, последний (нижний) луч – восстановленный приемником информационный сигнал. Правда, довольно корявая форма сигнала? Приемник, конечно, восстановил довольно точно, но мы понимаем, что помехоустойчивость во время этих переходных процессов, отражений сигнала от концов – наверняка не так высока, как нам бы хотелось. Конечно, по стандарту положено согласовать. Конечно, на практике мы прокладываем линии связи кабелем, про который никто не скажет, какое у него волновое сопротивление. И насколько оно однородно по длине кабеля (а на скачках параметров кабеля, или на скрутках, тоже будут отражения, как бы вы ни согласовали концы). Так вот, в реальности отсутствие согласования почти никогда никому не мешает. Обратите внимание на шкалу времени на картинке. Отражения (в данном случае на 50-метровом участке кабеля) занимают меньше 200 наносекунд. Несколько отражений от обоих концов кабеля – максимум одна микросекунда – и сигнал уже успокоился. Если кабель длинный (например, 1 километр), отражения распространяются дольше – скажем, 5 микросекунд, но зато отражение будет только одно – отраженный сигнал настолько затухает на длинном кабеле, что второго и третьего отражения уже точно не будет. Итак, все отражения и искажения длятся всего несколько микросекунд. Согласно тому же исходному тексту стандарта RS485 (да и согласно требованиям микросхем последовательных передатчиков) установление сигнала должно занимать не более 1/10 длительности бита данных. Умножаем 5 микросекунд на 10 – получаем, что при длительности бита 50 микросекунд (т. е. при скорости передачи 19 200 бит/сек) все эти отражения на километровой линии можно игнорировать. Вот так! Конечно, лучше не игнорировать, лучше, чтобы отражений не было, но на типичной скорости передачи 9600 на длине кабеля меньше километра проблемы, вызванные плохим согласованием, мягко говоря, маловероятны. Если у вас не работает канал связи RS485 – скорее всего это вызвано совсем другими причинами. Более того. Выходное сопротивление передатчика согласно стандарту должно быть 54 Ом. Согласующие резисторы (по 120 Ом с каждой стороны) являются нагрузкой 60 Ом. Таким образом, сигнал изначально делится пополам. Передатчик мог бы передать разностное напряжение 5 В, а на линии получается всего лишь 2–2,5 В. Сигнал меньше, помехоустойчивость хуже. И запас на затухание меньше. Например, довольно толстый кабель сечением 0,75 мм2 имеет сопротивление провода около 3 Ом на 100 м. Два провода на длине 1 км добавят еще 60 Ом. То есть сигнал на конце линии окажется еще в 2 раза меньше. А если вы взяли замечательную витую пару 6-й категории (сечением 0,2 мм2, т. е. в 4 раза тоньше рассмотренного ранее кабеля), сигнал будет еще в 4 раза меньше. Это сколько ? 2 вольта, да пополам, да еще на 4, итого – 250 милливольт. Практически на границе чувствительности приемника. Работать точно не будет уже на 1 км, хотя стандарт нам вроде бы обещает 1200 м. Так что не гонитесь за категорией витой пары, возьмите лучше кабель потолще. Кстати, если проблема с большим затуханием в тонком кабеле – снимите согласующие резисторы. Все равно никакие отражения никуда не дойдут – затухнут, да и, как мы уже показали, на скорости 9600 отражения никого и не волнуют. Зато сигнал подрастет в несколько раз. Вот теперь вы знаете, откуда берутся некоторые ограничения, описанные в стандарте. Так, стандарт описывал максимальную скорость 10 МБод, однако это было связано с тем, что отдельно требовалось от передатчиков не искажать фронты импульсов более чем на 20 нс. Современные передатчики могут уложиться в 2 нс, потому и скорость декларируется до 50–70 Мбод. Однако такая скорость возможна только на коротких линиях. Известное мнемоническое правило рекомендует, чтобы произведение скорости передачи в битах в секунду на длину кабеля в метрах не превышало величины 108. Это и дает примерно 1 км на скорости 100 кбит/сек и 10 м на скорости 10 Мбит/сек. Это из-за возможных отражений (идеального согласования не бывает) и времени на установление сигнала. Конечно, при тщательном согласовании указанное произведение можно несколько повысить, но не стоит намного. Из этого же правила вытекает, что на скорости 9600 (примерно 10 кбит/сек) вроде бы можно передать аж на 10 км. Но только если у вас будет достаточно толстый кабель. Стандарт подразумевал использование типичного многопарного кабеля 22–26 AWG и потому для любых скоростей ограничивал длину линии величиной 4000 футов (1200 м). Но мы-то знаем, что на самом деле, если взять кабель потолще, можно и перекинуть сигнал подальше. Хотя у производителей оборудования обычно написано просто 1200 м без вариантов. У большинства потому, что они сами не знают, откуда берется число 1200. У некоторых просто потому, что лучше перебдеть (указывается длина самого тонкого доступного на практике кабеля). Кроме того, производители предпочитают в большие системы продать дополнительно усилители-разветвители или еще какие-нибудь удлинители линии связи. (Продолжение в следующем номере).