Что такое интерфейс CAN и зачем он нужен
Controller Area Network (CAN) – это последовательная коммуникационная шина, разработанная для надежной и гибкой работы в жестких условиях, особенно для промышленных и автомобильных приложений.
Первоначально изобретенный Bosch, а затем кодифицированный в стандарт ISO11898-1, интерфейс CAN определяет канал передачи данных и физический уровень модели взаимодействия открытых систем (OSI), обеспечивая низкоуровневое сетевое решение для высокоскоростной связи в автомобилях и промышленном оборудовании. В частности, CAN был разработан для уменьшения кабельной проводки в автомобилях, чтобы отдельные электронные блоки управления (ЭБУ) внутри транспортного средства могли обмениваться данными только по одной паре проводов. На следующем рисунке показаны ЭБУ автомобиля, подключенного к шине CAN.
Бортовая диагностика (OBD) – это система диагностики и отчетности автомобиля, которая позволяет устранять неполадки с помощью диагностических кодов неисправности (DTC). Когда загорается индикатор «проверьте двигатель» (check engine), техник часто использует портативное устройство для считывания кодов двигателя с автомобиля. На самом низком уровне эти данные передаются по протоколу, который в большинстве случаев является CAN.
DeviceNet – это сетевой протокол высокого уровня, используемый в промышленных приложениях. Это значительно уменьшает проводку, необходимую между системой управления и устройствами ввода/вывода. Вместо того, чтобы подключать каждое устройство к отдельному входу/выходу на модулях ввода/вывода ПЛК, устройства могут быть связаны друг с другом через четырехпроводный разъем и подключены к сетевому сканеру на ПЛК. На самом низком уровне мы находим, что CAN работает в рамках протокола DeviceNet. На следующем рисунке показан ПЛК, сканирующий сеть промышленных устройств, обменивающихся данными через DeviceNet.
Кадры сообщений CAN
Так как же на самом деле выглядит сообщение CAN? В первоначальном стандарте ISO изложено то, что называется стандартом CAN. Стандарт CAN использует 11-битный идентификатор для разных сообщений, что в сумме составляет 211, т. е. 2048, разных идентификаторов сообщений. CAN был позже изменен; идентификатор был расширен до 29 бит, что дало 229 идентификаторов. Это называется расширенной шиной CAN. CAN использует мультимастерную шину, где все сообщения транслируются по всей сети. Идентификаторы обеспечивают приоритет сообщения для арбитража.
CAN использует дифференциальный сигнал с двумя логическими состояниями, называемыми рецессивным и доминантным. Рецессивный указывает, что дифференциальное напряжение меньше минимального порогового напряжения. Доминантный указывает, что дифференциальное напряжение больше, чем этот минимальный порог. Интересно, что доминантное состояние достигается путем передачи логического уровня «0» на шину, в то время как рецессивное состояние достигается с помощью логического уровня «1». Это инверсия от традиционных высоких и низких логических значений, используемых в большинстве систем. Эти два состояния будут подробно описаны далее. Важно то, что доминантное состояние приоритетнее рецессивного в арбитраже.
Стандартный кадр CAN
Стандартный кадр сообщения CAN состоит из нескольких битовых полей. Они показаны на следующем рисунке.
Первый бит – это начало кадра (SOF). Этот доминирующий бит представляет начало сообщения CAN. Далее идет 11-битный идентификатор, который устанавливает приоритет сообщения CAN. Чем меньше идентификатор, тем выше приоритет сообщения.
Бит запроса удаленной передачи (RTR) обычно является доминантным, но он становится рецессивным, когда один узел запрашивает данные у другого. Бит расширения идентификатора (IDE) является доминантным, когда отправляется стандартный кадр CAN, а не расширенный. Бит r0 зарезервирован и в настоящее время не используется. Кусок кода длины данных (DLC) показывает, сколько байтов данных содержится в этом сообщении.
Далее идут сами данные, представляющие собой столько байтов, сколько представлено в битах DLC. Циклическая проверка избыточности (CRC) – это 16-битная контрольная сумма для обнаружения ошибок в передаваемых данных. Если сообщение принято правильно, принимающий узел перезаписывает рецессивный бит подтверждения (ACK) доминантным битом. ACK также содержит бит-разделитель для синхронизации. Конец кадра (EOF) означает конец сообщения CAN и имеет ширину 7 бит для обнаружения ошибок вставки битов. Последняя часть сообщения CAN – это межкадровое пространство (IFS), используемое в качестве временной задержки. Эта временная задержка точно соответствует времени, необходимому контроллеру CAN для перемещения полученного сообщения в буфер для дальнейшей обработки.
Расширенный кадр CAN
Расширенный кадр сообщения CAN использует 29-битный идентификатор вместе с несколькими дополнительными битами.
Расширенное сообщение имеет заменяющий бит удаленного запроса (SRR) после 11-битного идентификатора, который действует как заполнитель для сохранения той же структуры, что и стандартный CAN. На этот раз расширение идентификатора (IDE) должно быть рецессивным, что указывает на то, что за ним следует расширенный идентификатор. Бит RTR находится после 18-битного идентификатора, за ним следует второй резервный бит r1. Остальная часть сообщения остается прежней.
Типы сообщений CAN
Теперь, когда вы знаете, как выглядит сообщение CAN, вам может быть интересно, какие сообщения передаются по шине. CAN допускает четыре разных типа сообщений. Это кадр данных, удаленный кадр, кадр перегрузки и кадр ошибок.
Стандартный кадр данных CAN использует идентификатор, данные и код длины данных, проверку циклическим избыточным кодом и биты подтверждения. Оба бита RTR и IDE являются доминирующими в кадрах данных. Если рецессивный бит подтверждения на принимающей стороне перезаписан доминантным битом, и передатчик, и приемник распознают это как успешную передачу.
Удаленный кадр CAN выглядит аналогично кадру данных, за исключением того факта, что он не содержит никаких данных. Он отправляется с битом RTR в рецессивном состоянии; это указывает на то, что это удаленный кадр. Удаленные кадры используются для запроса данных от узла.
Когда узел обнаруживает ошибку в сообщении на шине CAN, он передает кадр ошибки. Это приводит к тому, что все другие узлы отправляют кадр ошибки. После этого узел, где произошла ошибка, повторно передает сообщение. Кадр перегрузки работает аналогично, но используется, когда узел получает кадры быстрее, чем он может их обработать. Этот кадр обеспечивает временной буфер, чтобы узел мог догнать.
Арбитраж и сигналы на шине CAN
CAN – это протокол CSMA/CD, означающий, что каждый узел на шине может обнаруживать коллизии и откатываться на определенное время перед попыткой повторной передачи. Это обнаружение коллизий достигается посредством арбитража приоритетов на основе идентификаторов сообщений. Прежде чем обсудить арбитраж, давайте подробнее рассмотрим доминантные и рецессивные биты, используемые на шине CAN.
Интересным аспектом шины CAN является то, что она использует инвертированную форму логики с двумя состояниями: доминантным и рецессивным. На рисунке ниже показана упрощенная версия вывода и ввода CAN-трансивера. Поток битов '101' поступает с / идет на CAN-контроллер и / или микроконтроллер. Обратите внимание, что когда контроллер отправляет поток битов, они дополняются и помещаются в линию CANH. Линия CANL всегда является дополнением CANH. Чтобы арбитраж работал, устройство CAN должно отслеживать как то, что оно отправляет, так и то, что в данный момент находится на шине, то есть то, что оно получает.
На следующем рисунке показаны сигналы CANH и CANL одновременно, так что вы можете видеть шину CAN в действии. Под сигналами шины изображено дифференциальное напряжение, которое соответствует доминантному и рецессивному состояниям сигналов CAN. Первые три сегмента во времени, t1 – t3, нарисованы так, чтобы соответствовать трем битам, показанным на предыдущем рисунке. Мы рассмотрим это с точки зрения драйвера вывода. Ввод драйвера изначально видит «1» и дополняет его до нуля, который помещается в CANH. CANL видит дополнение CANH и переводится в высокое логическое состояние. Это показано как t1 на рисунке. Обратите внимание, что напряжения CANH и CANL смещены относительно друг друга. В течение времени t1 дифференциал CANH - CANL очень близок к нулю, так как CANH и CANL имеют почти одинаковое напряжение. Этот период, когда драйвер посылает логику «1», в результате чего CANH и CANL близки к одному и тому же напряжению, мы называем рецессивным состоянием CAN.
Следующий отправленный бит – «0». CANH получает свое дополнение, и CANL снова получает дополнение CANH. Обратите внимание, что на этот раз напряжения CANH и CANL не близки друг к другу. Следовательно, дифференциальное напряжение (VDIFF) больше. Это CAN-доминантное состояние. Мы говорим, что логика инвертирована, потому что «1» приводит к понижению логического уровня шины, а «0» - к повышению. Входной приемник работает аналогично.
Как упоминалось ранее, чем меньше 11-битный идентификатор, тем выше приоритет сообщения. Каждый бит, который передает узел, он контролирует. Таким образом, узел обнаруживает, что сообщение с более высоким приоритетом размещается на шине. В тот момент, когда узел отправляет рецессивный бит, но обнаруживает доминантный бит на шине, он «отступает». Это называется неразрушающим арбитражем, потому что «победившее» сообщение продолжает передаваться без каких-либо проблем. Обратите внимание, что рецессивная логика «1» проигрывает доминантной логике «0». Это имеет смысл, поскольку более низкое значение идентификатора представляет более высокий приоритет. Чтобы лучше понять, что это значит, взгляните на следующий рисунок, на котором показаны три узла на шине CAN, пытающиеся получить контроль. Важно помнить, что каждый раз, когда отображается рецессивный бит, контроллер отправляет «1», в то время как доминантные биты соответствуют отправке «0».
Узлы 1–3 все посылают поток битов. Этот поток битов представляет идентификаторы сообщений и их приоритет. Для начала все три узла отправляют «1», который представлен на шине CAN как рецессивный бит. Затем каждый узел отправляет «0» или доминанатный бит. Третий бит, помещенный в шину – это еще один бит «1» или рецессивный бит. На этом этапе ни один из узлов не обнаружил никакого конфликта с другим узлом на шине, поэтому они продолжают передавать.
Для четвертого бита узел 1 отправляет «0» или доминантный бит. Узел 2 передает рецессивный бит, но обнаруживает доминантный бит на шине. Он немедленно «отступает», зная, что в данный момент отправляется сообщение с более высоким приоритетом. Узел 3 продолжает передачу, поскольку он считывает тот же доминантный бит, который он передал. Когда пятый бит помещается в шину, узел 3 затем распознает, что он имеет более низкий приоритет, и прекращает передачу. И узел 2, и узел 3 ждут определенное количество времени, прежде чем пытаться снова. Это показано в правой части рисунка, где выиграл арбитраж узел 3. Как видите, логический бит «0», соответствующий младшему идентификатору сообщения, позволяет проводить арбитраж.
Заключение
В этой статье были представлены основные принципы работы шины CAN. CAN – это надежная шина последовательной связи, используемая в основном в автомобильной и промышленной среде. CAN использует дифференциальный сигнал, что делает ее более устойчивой к шуму, а также схему арбитража приоритетов для неразрушающей передачи сообщений. CAN отлично подходит для встраиваемых приложений, которые работают в опасных средах или областях с большим количеством электромагнитных помех.
© digitrode.ru