Существенные различия между CAN и RS485 в отношении физического уровня

Сравнивая физический уровень CAN и RS485, я пытаюсь найти преимущества одного над другим. Выяснил, что они очень похожи. Оба хороши с точки зрения подавления синфазного сигнала, и оба нуждаются в защите от электростатического разряда и перенапряжения. Я обнаружил только одно существенное преимущество CAN по сравнению с RS485 (относительно физического уровня), в котором CAN имеет отказоустойчивый режим, который позволяет ему поддерживать соединение между узлами CANbus только через 1 провод данных, даже если один провод данных закорочен или разомкнут или оба провода данных замкнуты накоротко.

Вдали от предотвращения столкновений и системы приоритета сообщений, которая есть в CAN,

1. Имеет ли RS485 такой же отказоустойчивый механизм?

2. Есть ли другие важные преимущества или различия между CAN и RS485 в отношении физического уровня?

Может быть, вы могли бы ссылку на режим отказоустойчивости шины CAB?
В этом pdf-файле рассказывается об отказоустойчивости трансивера TJA1055T CAN.
Основное отличие заключается в арбитраже шины CAN, что означает гибкость топологии сети и отсутствие необходимости в мастере для управления трафиком. В RS-485 нет встроенного механизма для переключения того, кто может отправлять, а это означает, что RS-485 имеет тенденцию заканчиваться топологией сети «звезда», сосредоточенной вокруг мастера. Это диктуется на более высоких уровнях, но сильно влияет на физический уровень.
В целом, сегодня нет причин использовать RS-485 и другие технологии на основе UART, если только вам не нужна какая-то обратная совместимость. Раньше одним преимуществом было то, что все компьютеры ПК имели UART, но это уже не так.

Ответы (2)

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

Основное отличие состоит в том, что RS-485 использует симметричную передачу сигналов. Одна линия 5 В, а другая 0 В для сигнализации одного состояния, затем переключается на 0 В и 5 В для другого состояния. Это делает обнаружение состояния очень простым (простой компаратор, возможно, с небольшим гистерезисом), но представляет собой проблему при завершении шины.

Если вы считаете, что витая пара, по которой передаются сигналы, имеет характеристическое сопротивление 120 Ом, то в идеале вы хотите поместить 120 Ом между двумя линиями. Всего между двумя линиями будет 60 Ом. (5 В)/(60 Ом) = 83 мА. Это большой ток для автобуса, и он будет потребляться все время. Получается почти полватта мощности покоя. Обратите внимание, что каждый согласующий резистор сопротивлением 120 Ом будет рассеивать 208 мВт, а это означает, что они должны иметь номинал резистора не менее «¼ Вт». Например, поверхностное крепление 0805 не требуется.

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

CAN, с другой стороны, корректно адресует завершение. Предполагается, что для различных сигналов используется витая пара сопротивлением 120 Ом, и указывается согласующее сопротивление 120 Ом на каждом конце шины. Затем есть два важных отличия, чтобы избежать проблем, описанных выше:

  1. Стационарное состояние является неуправляемым, что означает, что линии поддерживаются при одном и том же напряжении за счет оконечных сопротивлений.

  2. Активное состояние шины (называемое доминирующим состоянием в спецификации CAN) — это то, что каждая линия натягивается всего на 900 мВ от уровня ожидания. Таким образом, эти два состояния являются дифференциальными 0 В или 1,8 В, а не 5 В и -5 В, как RS-485.

Мощность, необходимая для удержания CAN-шины в доминирующем состоянии, составляет всего 54 мВт, а для удержания ее в рецессивном (бездействующем) состоянии вообще отсутствует. CAN предназначен для скоростей до 1 Мбод, что стало возможным благодаря лучшей терминации, чем RS-485.

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

Итак, что использовать? CAN является очевидным выбором для новых конструкций в большинстве случаев, потому что:

  1. Сигнализация низкого уровня позволяет использовать схему обнаружения коллизий. Когда узел «записывает» рецессивное состояние в шину и видит, что на самом деле он находится в доминантном состоянии, он знает, что какой-то другой узел управляет шиной. Узел, пытающийся записать рецессивное состояние, отступает и ждет конца сообщения. Узел, записывающий доминирующее состояние, никогда не узнает, что это произошло. Его сообщение отправляется и принимается всеми остальными узлами в обычном режиме.

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

  3. CAN определяет гораздо больше, чем просто физический уровень, тогда как это все, что вы получаете с RS-485. В RS-485 нет стандартного способа решить, кто должен отправлять, что отправляется, как узнать, что оно дошло неповрежденным и т. д. CAN определяет полные пакеты на шине, которые включают 16-битную контрольную сумму CRC.

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

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

Одним из ограничений CAN, которое может потребовать обхода для некоторых приложений, является ограничение в 8 байтов данных на пакет. Это также хорошо для механизма коллизий/повторных попыток, но это то, что вы должны учитывать, если собираетесь передавать потоковые данные по CAN. Однако сделать то же самое с RS-485 тоже не так просто, как может показаться на первый взгляд.

«Возможно, из-за этих соображений требования к оконечной нагрузке для RS-485 несколько смягчены. Это приводит к уменьшению используемой скорости шины». Я не знаю точно, что вы имеете в виду, говоря это, но RS485 может достигать скорости передачи данных до 10 Мбит / с, что в 10 раз выше, чем может позволить CAN.
Как насчет отказоустойчивого механизма? Есть ли у RS485 такая функция?
@Maj: На коротких длинах RS-485 может работать быстро. Однако, если используется типичная линия передачи по витой паре, концы не будут терминированы должным образом.

RS485 использует +/- 400 мВ, а не 0-5 В, поэтому согласующий резистор имеет меньшую мощность, чем шина CAN. Есть преимущество, которое многие (все), кажется, упускают. Поскольку RS485 на самом деле является двунаправленным при напряжении около 0 В, т. е. это должен быть полноценный H-мост, это означает, что ток течет в одну или другую сторону. Дело не в уровнях напряжения, а в фактическом направлении тока. Так что это отличается от CAN, где вы фактически смотрите на 2 разных сигнала относительно GND. Вы хотите увидеть, что этот уровень 2,5 В ОТНОСИТЕЛЬНО к GND, и что эти две линии имеют одинаковое напряжение относительно GND или что одна выше, а другая ниже 2,5 В относительно GND.

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

Теперь RS485 - это, по сути, привод переменного тока от H-моста, электроны текут так или иначе, какое напряжение относительно GND совершенно не имеет значения. напряжение не сравнивается с GND, рассматривается направление потока электронов, поэтому вам не нужен GND. Это означает, что в ситуациях, когда вы хотите соединить две системы вместе, которые не имеют общего заземления или вам это не нужно, это нормально, и когда заземления не являются общими, но различаются, это нормально, потому что измерение не относится к GND и принимает это означает, что изоляции можно избежать там, где этого требует CAN.

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

Извините, но это просто неправильно. Допускается выход RS-485 в диапазоне от 1,5 В до 6,0 В, а для принимающей стороны требуется +/- 200 мВ. Таким образом, согласующий резистор на 120 Ом должен выдерживать мощность 0,3 Вт. Стандарт шины CAN говорит 0,25 Вт, если вы не хотите обрабатывать короткие замыкания на напряжение батареи. А RS-485 касается уровней напряжения, а не направления тока. И RS-485, и CAN являются дифференциальными шинами, и обе они требуют общего заземления между трансиверами, RS-485 просто может обрабатывать большее синфазное напряжение, чем CAN. Разница существенна, и напряжение шины RS-485 на приемнике должно быть в пределах от -7 до +12 В по сравнению с местной землей.
Да, дифференциальный выход может достигать 5 В (+/- 2,5 В), но эти две шины работают совершенно по-разному. CAN создает виртуальную землю вокруг 2,5 В, поэтому многие схемы фактически делят 120 Ом на 2 и помещают туда конденсатор, чтобы попытаться удержать эту точку. Таким образом, есть положительное и отрицательное напряжение или дифференциальный привод относительно этих 2,5 В, не заземленных. RS485 является дифференциальным по отношению к земле, что означает, что он должен быть настоящим двухтактным, а земля становится неактуальной, поскольку вы измеряете полярность напряжения, а не величину.
Вы можете разделить терминацию RS-485 так же, как это делает CAN. И вы можете запустить RS-485, используя передатчик, чтобы он имитировал дифференциальный открытый сток, такой как CAN. И вы можете смещать RS-485 в режиме ожидания около 2,5 В с отказоустойчивым смещением, пока дифференциал всегда превышает порог логической 1 в 200 мВ. RS-485 имеет гистерезис, поэтому величина любой полярности должна превышать определенный порог. CAN просто имеет больший порог. Я не концентрировался на том, насколько они похожи или разные, просто на ложных утверждениях в вашем ответе.