Описание шины CAN. CAN-шина в промышленных сетях

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

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

Канальный и физический уровни CAN

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

Структура узла сети CAN

Рассматриваемый нами узел сети CAN состоит из микроконтроллера, CAN контроллера и приемопередатчика (рисунок 1). Чаще всего мы используем микроконтроллеры с встроенным CAN контроллером для упрощения схемы, но иногда используется автономный контроллер CAN с интерфейсом SPI (MCP2510). Далее приемопередатчик подключается к витой паре, на концах которой размещены согласующие резисторы (терминатор) с сопротивлением 120 Ом.

Рисунок 1 – Узел сети CAN

Для формирования логической единицы в витой паре, или свободной шине, на оба провода подается напряжение, равное половине разности напряжения между 0 или Vcc. Логическому нулю соответствует подача на провода линии дифференциального напряжения (рисунок 2).




Рисунок 2 – Логические уровни на CAN-шине

Шина CAN позволяет передавать данные со скоростью 1 Мбит/c при длине кабеля не более 40 м. В обучающей литературе написано, что при снижении скорости передачи до 10кбит/с можно добиться длины сети в 1.5км.

Пакет сообщения CAN

Формат сообщения CAN показан на рисунке 3.




Рисунок 3 – Пакет сообщения CAN

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

Идентификатор сообщения используется для идентификации данных, отправленных в этом пакете. Каждое отправленное сообщение принимается всеми узлами сети и в данном случае идентификатор позволяет понять конкретному устройству, необходимо ли обрабатывать данное сообщение. Максимальная длина сообщения 8 байт, но можно уменьшить это значение для сохранения пропускной способности шины CAN. Для примера ниже по тексту есть несколько скриншотов CAN сообщений из автомобильной сети.

Арбитраж на шине CAN

Если без подробностей, то первым по шине CAN всегда передается сообщение с наименьшим идентификатором.

Настройка скорости передачи данных по шине CAN

Скорость передачи данных по CAN шине настраивается за счет формирования квантов времени, а не как во многих других протоколах последовательной передачи данных за счет делителя скорости. В большинстве случаев используются скорости 10Кбит/c, 20Кбит/c, 50Кбит/c, 100Кбит/c, 125Кбит/c, 500Кбит/c, 800Кбит/c, 1MBaud и настройки для этих скоростей уже посчитаны. На рисунке 4 изображено окно выбора скорости в программе PcanView.



Рисунок 4 – Выбор скорости передачи данных в программе PcanView

Как мы видим при установке стандартной скорости настройки проставляются автоматически, но бывают случаи когда необходимо использовать другую скорость передачи данных. Например бортовой CAN автомобиля может работать со скоростью 83Кбит/c. В этом случае придется провести расчет настроек самостоятельно или поискать специализированный калькулятор скорости в интернете. Для самостоятельного расчета скорости необходимо понимать, что для передачи одного бита сообщения используется несколько квантов, а интервал передачи состоит из трех сегментов (рисунок 5).




Рисунок 5 – Время передачи одного бита

Первый сегмент всегда фиксирован и равняется одному кванту. Далее идет два сегмента Tseg1 и Tseg2 и количество квантов в каждом сегменте определяется пользователем и может быть равно от 8 до 25. Точка выборки находится между Tseg1 и Tseg2, т.е. в конце первого и в начале второго сегмента. Так же пользователь может определить ширину скачка синхронизации (Synchronization Jump Width - SJW) для подстройки битовой скорости принимающего устройства, который может быть в диапазоне 1 – 4 квантов времени.

Теперь приведем формулу расчета скорости (Пример расчета скорости для CAN контроллера SJA1000):

BTR = Pclk/(BRP * (1 + Tseg1 + Tseg2))

BTR – скорость передачи данных,

Pclk – частота работы CAN контроллера,

BRP – значение предделителя частоты генератора скорости передачи

Tseg1 – первый сегмент

Tseg2 – Второй сегмент

Для проверки возьмем уже посчитанную скорость 125Кбит/c и попробуем получить настройки вручную. Pclk возьмем 16 МГц.

BRP = 16МГц /(125K * (1 + Tseg1 + Tseg2))

Затем подбираем интервал передачи бита находящийся в диапазоне от 8 до 25 квантов времени, так что бы получилось целое значение BRP. В нашем случае если взять (1 + Tseg1 + Tseg2) = 16, то BRP будет равен 30.

SP = ((1 + Tseg1 + Tseg2) * 70)/100

Подставляем значения и получаем 16 * 0.7 = 11.2, что соответствует соотношению Tseg1 = 10, Tseg2 = 5, т.е. 1 + 10 + 5 = 16. Далее смотрим если Tseg2 >= 5, то SJW = 4, если Tseg2 < 5, то SJW = (Tseg2 – 1). В нашем случае SJW = 4.

Итого для получения скорости 125Кбит/c необходимо в параметрах указать, BRP = 30, Tseg1 = 10, Tseg2 = 5, SJW = 4.

P.S. Конфигурирование baud rate значительно отличается между старыми модулями USB-CANmodul (GW-001 и GW-002) с контроллером SJA1000 и новыми модулями sysWORXX с контроллером AT91SAM7A3. В статье описывающей работу с бортовым CAN автомобиля на скорости 83кбит/c приведен расчет скорости для контроллера AT91SAM7A3.


Пример получения и передачи данных по CAN-интерфейсу

В примере будем использовать CAN-адаптер с программой PcanView от SYSTEC и подключимся к салонному CAN автомобиля, работающему со скоростью 125Кбит/с. Рассматриваемый нами автомобиль оснащен креслами с электроприводом и поэтому исследуем данные отвечающие за положение кресел и постараемся изменить положение спинки подменив пакет с помощью компьютера.

Для начала на схеме автомобиля находим наиболее удобно расположенный разъем с линиями CANH и CANL и подключаем к нему наш адаптер. Если разъем и провода найти не получилось, то можно подлезть к блоку управления кресла, найти там два скрученных между собой провода и аккуратно надрезав провода подключить адаптер. Если после подключения и настройки адаптера сообщения не приходят, то в первую очередь попробуйте поменять между собой CANH CANL и проверить включено ли зажигание.
Далее запускаем программу PcanView, в открывшемся окне настроек устанавливаем Baudrate = 125Кбит/c и нажимаем ОК (рисунок 4). В следующем окне устанавливаем Message filter = Standard, диапазон адресов от 000 до 7FF и нажимаем ОК (рисунок 6).



Рисунок 6 – Настройка CAN фильтра

Если все сделано правильно, то мы увидим сообщения от кресел (рисунок 7), а при нажатии кнопки наклона спинки на пульте управления мы увидим еще одно сообщение с адресом 1F4 идущее от пульта к креслу (рисунок 8).



Рисунок 7 – CAN сообщения от кресла с электроприводом


Рисунок 8 – CAN сообщения от кресла с электроприводом и сообщение от пульта управления к креслу

Теперь мы знаем какие должны быть адрес, длина и данные в CAN пакете для имитации нажатия кнопки изменения положения спинки. Во вкладке Transmit нажимаем NEW и в открывшемся окне создаем копию пакета 1F4, т.е. ID = 1F4, Length = 3, Data = 40 80 00. Period можно оставить 0 ms, тогда сообщения будут отправляться по факту нажатия кнопки пробел (рисунок 9).



Рисунок 9 – Создание CAN сообщения

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



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

Итог

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

Сетевой интерфейс CAN (Controller Area Network) был разработан в 1987г. (версия 1.0) фирмами BOSCH и INTEL для создания бортовых мультипроцессорных систем реального времени. Последняя спецификация интерфейса 2.0, разработанная фирмой BOSCH в 1992г., является дополнением предыдущей версии. В международной организации по стандартизации зарегистрирован ISO 11898 (для высокоскоростных приложений) и ISO 11519-2 (для низкоскоростных приложений).

Принцип работы

CAN является высокоинтегрированным сетевым интерфейсом передачи данных со скоростью до 1 Мбит/сек. Устройства в CAN-системе соединяются по шине, состоящей из 3-х проводов (2 сигнальных и один общий) (см. рис.).

Сообщения данных, передаваемые из любого узла по CAN-шине, могут содержать от 1 до 8 байт. Каждое сообщение помечено идентификатором, который в сети является уникальным (например: "Нагрев до 240", "Отказ нагрева","Бункер загружен", и т.д.). При передаче другие узлы сети получают сообщение и каждый из них проверяет идентификатор. Если сообщение имеет отношение к данному узлу, то оно обрабатывается, в противном случае - игнорируется. CAN-контроллер каждого из устройств может обрабатывать одновременно несколько идентификаторов (например, контроллеры SIEMENS и INTEL могут обрабатывать до 15). Таким образом, в каждом из устройств можно легко организовать несколько "виртуальных" каналов обмена информацией с различными устройствами, включая каналы одновременного получения сообщений.

Рис. 1. Соединение устройств по CAN-шине

Идентификаторы

Идентификатор определяет тип и приоритет сообщения. Более низкому числовому значению идентификатора соответствует более высокое значение приоритета. Сообщение, имеющее более высокий приоритет, передается раньше сообщения, имеющего более низкий приоритет. После сообщения с высоким приоритетом передается сообщение с более низким приоритетом, если во время передачи не появится сообщение с более высоким приоритетом, затем передается сообщение с еще более низким приоритетом и т. д.

Физическая шина

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

Высокая надёжность

Для обеспечения безотказной работы в тяжёлых условиях по стандарту ISO11898 CAN-контроллер обеспечивает работу в сети в следующих случаях:

  • любой из 3-х проводов в шине оборван,
  • любой провод - закорочен на питание,
  • любой провод - закорочен на общий провод.

При обрыве 2-х проводов часть функций основной системы может быть реализована в каждой из подсистем, созданных обрывом.

Сетевая гибкость и лёгкость расширения

Принятая в CAN-сети схема передачи сообщений обеспечивает большие возможности при создании, расширении и модернизации систем.

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

В CAN-сети имеется возможность одновременной передачи сообщений сразу нескольким устройствам. Эта особенность позволяет передавать по ней синхросигналы.

Арбитраж CAN-шины

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

Узлы CAN-сети являются равноправными при обмене, и каждый из них в любой момент времени может иметь сообщение, требующее безотлагательной передачи. Вероятность одновременного требования передачи от различных устройств не является чем-то необычайным, а случается регулярно. Для разрешения подобного конфликта требуется быстродействующий механизм распределения очередности передачи сообщений. Для этого в CAN-системе используется Неразрушающий Поразрядный Арбитраж .

Приоритет CAN-сообщения определяется двоичным значением его идентификатора.

Числовое значение каждого идентификатора сообщения назначается в начальной фазе проектирования системы. Идентификатор с самым низким числовым значением идентификатора имеет самый высокий приоритет. Передача логического нуля по CAN-шине осуществляется токовой посылкой, а состояние логической единицы определяется по отсутствию тока. В процессе передачи каждый из источников сообщений, который имеет необходимость в передаче, начинает передавать свой идентификатор, одновременно проверяя его на линии. Если в процессе передачи обнаруживается несовпадение (т.е. "лишний" ноль), то передатчик, обнаруживший это несоответствие, прекращает передачу своего идентификатора и переключается на прием. Конфликта на шине при этом нет, так как значение бита с уровнем логической единицы фактически не передается, и в результате сообщение с наивысшим приоритетом проходит по шине так, как будто оно единственное. В следующем цикле шины будет передано сообщение с более низким приоритетом, и т.д. Таким образом достигается максимальная пропускная способность шины и минимальная задержка для "горячих" сообщений.

Рис. 2. Соединение устройств по CAN-шине

Обнаружение Ошибок

CAN содержит 5-ступенчатый механизм обнаружения ошибок:

  • циклический контроль по избыточности (CRC),
  • контроль передаваемого поля битов,
  • контроль сигнала "Подтверждение Приема",
  • текущий контроль логического уровня битов,
  • контроль заполнения битов.

Циклический контроль по избыточности (CRC)

Каждое переданное сообщение содержит контрольный код (CRC), вычисленный передатчиком на основе содержания передаваемого сообщения. Приёмные узлы выполняют аналогичную операцию, помечают обнаруженные ошибки и устанавливают соответствующие флаги.

Текущий контроль логического уровня битов

Любой передатчик автоматически контролирует и сравнивает фактический логический уровень битов на шине с уровнем, который он передает. Если уровни не совпадают, помечается ошибка логического уровня битов.

(Примечание: этот механизм также используется при арбитраже шины для определения приоритета сообщения, однако ошибка в этом случае, естественно, не возникает).

Контроль передаваемого поля битов

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

Контроль заполнения битов

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

Контроль сигнала "Подтверждение Приема"

Каждое переданное сообщение подтверждается приемником, и если этого не произошло, тогда устанавливается флаг ошибки подтверждения приема.

Флаг ошибки

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

С учетом действия всех механизмов контроля, реальное значение возникновения необнаруженной ошибки в CAN-системе - 10-11 .

Формат CAN-сообщения

Стандартный CAN-протокол (версия 2.0A) поддерживает формат сообщения с 11-разрядными идентификаторами (Стандартное сообщение).

Расширенный CAN-протокол (версия 2.0B) поддерживает 11-битовый и 29-битовый форматы идентификаторов (Расширенное сообщение).

Большинство контроллеров версии 2.0A передают и принимают только сообщения стандартного формата, хотя часть из них могут только получать сообщения расширенного формата.

Контроллеры версии 2.0B могут посылать и получать сообщения в обоих форматах.

Различия форматов

В версии 2.0B поле битов идентификатора состоит из двух частей.

Первая часть (основная часть идентификатора) имеет длину одиннадцать битов для совместимости с версией 2.0A, вторая часть - восемнадцать битов (расширение идентификатора), что дает общую длину идентификатора в двадцать девять бит.

Для различения форматов используются биты Identifier Extension (IDE) и Substitute Remote Request (SRR) в Поле Арбитража.

Интерфейс CAN был разработан в конце 80-х годов фирмой Bosch для связи электронных устройств, применяемых в автомобилях.

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

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

На рис. приведена структура CAN-сети. Обычно в качестве контроллера используется микроконтроллер, имеющий CAN-модуль, который имеет выход передатчика TxD последовательного кода и вход приемника RxD кода. Трансивер преобразует логические сигналы, то есть логические 0 и 1, в дифференциальное напряжение, поступающее на два провода шины, обозначенные CAN_H и CAN_L.

Согласно стандарту линия должна иметь волновое сопротивление в пределах 108-132 Ом. Для уменьшения отражений сигналов на каждом конце шины должны быть подключены согласующие резисторы RС сопротивлением 120 Ом. Для повышения надежности передачи и повышения помехоустойчивости иногда используют третий провод – общий, обозначаемый как GND. Питающее напряжение UCC (или UDD) по стандарту равно +5 В относительно GND.

Для абстрагирования от физической среды передачи спецификация CAN определяет два логических состояния (то есть логические 0 и 1) как рецессивное (recessive) и доминантное (dominant). При этом предполагается, что при передаче одним узлом сети рецессивного бита, а другим доминантного, принят будет доминантный бит.

В рецессивном состоянии (то есть логическая 1 на входе TxD трансивера) дифференциальное напряжение UDIFF =UCANH – UCANL меньше минимального порога (0,5 В на входе приемника или 0,05 В на выходе передатчика).

В доминантном состоянии (то есть логический 0 на входе TxD трансивера) дифференциальное напряжение UDIFF больше минимального порога (0,9 В на входе приемника или 1,5 В на выходе передатчика).

Сообщения в CAN. Интерфейс использует короткие сообщения: максимальный размер – 94 бита. Содержимое данных в CAN-сообщении как бы неявно определяет адрес источника этого сообщения и адреса приемников, кому эта информация необходима.

Например. один CAN-узел выдает на шину сообщение «Температура масла двигателя 80». Все другие узлы принимают это сообщение, но используют эту информацию только те узлы, кому она необходима.

Сообщения, передаваемые по CAN-шине, именуются кадрами или фреймами. В зависимости от инициатора передачи и ее цели существуют 4 типа кадров:

1) кадр данных, используется для передачи данных;

2) кадр запроса данных, используется для дистанционного запроса данных от удаленного узла;

3) кадр ошибки, когда обнаруживаются ошибки на шине;

4) кадр перегрузки, передается для задержки передачи пакетов кадр данных и кадр запроса, например, при неготовности приемника.

Вид стандартного формата сообщения кадр данных приведен на рис. Он состоит из семи различных битовых полей:

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

    Поле арбитража содержит 11-битный идентификатор ID и бит RTR – (запрос передачи данных). Для кадра данных этот бит должен иметь доминантный уровень.

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

    Поле данных содержит от нуля до восьми байтов данных.

    Поле контрольной суммы включает в себя контрольную сумму сообщения (15 бит) и бит-разделитель рецессивного уровня.

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

    Поле конца кадра состоит из семи битов рецессивного уровня.

После конца кадра (EOF) следует поле промежутка, состоящее из трех битов рецессивного уровня. После этого промежутка шина считается свободной.

Многие сетевые протоколы описываются с помощью семиуровневой модели взаимодействия открытых систем OSI (Open System Interconnection ), как показано на Рис. 1 . Протокол CAN (Controller Area Network - контроллерная локальная сеть ) определяет канальный уровень (Data Link Layer ) и часть физического уровня (Physical Layer ). Оставшаяся часть физического уровня и все остальные вышележащие уровни не входят в спецификацию CAN и могут либо определяться разработчиком системы, либо реализовываться с помощью существующих высокоуровневых протоколов (Higher Layer Protocols - HLPs ) и физических уровней.

Как сказано выше, канальный уровень определяется спецификацией CAN. Подуровень управления логической связью (Logical Link Control - LLC ) обеспечивает управление перегрузкой и уведомление о ней, фильтрацию сообщений и функции управления восстановлением. Подуровень управления доступом к среде (Medium Access Control - MAC ) выполняет инкапсуляцию/декапсуляцию (расформирование) данных, обнаружение ошибок и защиту от них, битстаффинг/дестаффинг (битовое наполнение/удаление наполняющего бита), функции преобразования в последовательную форму и обратно.

Подуровни соединения с физической средой (Physical Medium Attachment - PMA ) и среда-зависимого интерфейса (Medium Dependent Interface - MDI ) - две части физического уровня, не определённые в CAN. Подуровень физической сигнализации (Physical Signaling - PS ), наоборот, определён в спецификации CAN. Разработчик может выбрать любой драйвер/приёмник и среду передачи, если они соответствуют требованиям PS-подуровня.

Международная организация по стандартизации (International Standards Organization - ISO ) определила стандарт, который включает спецификацию CAN в качестве физического уровня. Стандарт ISO-11898 изначально был создан для высокоскоростной связи в транспортных средствах, использующей CAN. ISO-11898 определяет физический уровень для обеспечения совместимости между приёмопередатчиками CAN.

Контроллер CAN обычно реализует всю спецификацию CAN аппаратно, как показано на Рис. 1 . PMA-подуровень не определяется CAN, однако, он определён в ISO-11898. Данный пример применения рассматривает приёмопередатчик CAN MCP2551 и то, насколько он удовлетворяет требованиям спецификации ISO-11898.

Рис. 1. CAN и модель OSI

Краткий обзор ISO11898-2

ISO11898 - международный стандарт для высокоскоростной связи CAN, применяемой в транспортных средствах. ISO-11898-2 определяет PMA и MDI подуровни физического уровня. Общее представления узлов и шины CAN, описанное в ISO-11898 приведено на Рис. 3 .

Уровни шины

CAN определяет два логических состояния: рецессивное (recessive ) и доминантное (dominant ). ISO-11898 определяет дифференциальное напряжение для представления рецессивного и доминантного состояний (или битов), как показано на Рис. 2 .

В рецессивном состоянии (то есть логическая "1" на входе TXD MCP2551) дифференциальное напряжение на CANH и CANL меньше минимального порог (Рис. 4).

В доминантном состоянии (то есть логический "0" на входе TXD MCP2551) дифференциальное напряжение на CANH и CANL больше минимального порога. Доминантный бит перекрывает рецессивный бит на шине для достижения неразрушающего поразрядного арбитража.

Рис. 2. Дифференциальная шина

Разъёмы и провода

В ISO-11898-2 не определены механические провода и разъёмы. Однако спецификация требует, чтобы провода и разъёмы соответствовали электротехническим требованиям.

Спецификация также требует наличие резисторов-терминаторов номиналом 120 Ом на каждом конце шины. На Рис. 3 показан пример шины CAN, основанной на ISO-11898.

Рис. 3. Шина CAN

Рис. 4. Номинальные уровни шины по ISO-11898

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

Спецификация ISO11898-2 требует, чтобы приёмопередатчик, соответствующий спецификации или совместимый с ней, соответствовал ряду электротехнических требований. Некоторые из этих требований предусмотрены, чтобы гарантировать, что приёмопередатчик сможет выдержать жёсткие электрические условия, таким образом защищая узел CAN. Входы приёмопередатчика должны выдерживать напряжение от -3 В до +32 В и кратковременное воздействие напряжения от -150 В до +100 В. Таблица 1 показывает главные электрические требования ISO11898-2 в сравнении со спецификацией MCP2551.

Таблица 1. Сравнение спецификаций MCP2551 и ISO11898-2.

Параметр ISO-11898-4 MCP2551 Единица измерения Комментарии
минимум максимум минимум максимум
Постоянное напряжение на CANH и CANL -3 +32 -40 +40 В Превышает ISO-11898
Кратковременное воздействие напряжений на CANH и CANL -150 +100 -250 +250 В Превышает ISO-11898
Напряжение синфазного сигнала шины -2.0 +7.0 -12 +12 В Превышает ISO-11898
Выходное напряжение шины в рецессивном состоянии +2.0 +3.0 +2.0 +3.0 В Соответствует ISO-11898
Дифференциальное выходное напряжение рецессивного состояния -500 +50 -500 +50 мВ Соответствует ISO-11898
Внутреннее сопротивление 10 100 20 100 кОм Соответствует ISO-11898
Входное сопротивление 5.0 50 5.0 50 кОм Соответствует ISO-11898
Дифференциальное выходное напряжение доминантного состояния +1.5 +3.0 +1.5 +3.0 В Соответствует ISO-11898
Выходное напряжение доминантного состояния на CANH +2.75 +4.50 +2.75 +4.50 В Соответствует ISO-11898
Выходное напряжение доминантного состояния на CANL +0.50 +2.25 +0.50 +2.25 В Соответствует ISO-11898
Обнаружение постоянного доминанта (драйвер) Не требуется 1.25 - мс
Сброс при включении питания (POR) и обнаружение кратковременного падения напряжения (BOD) Не требуется Да -

Длина шины

ISO11898 определяет, что приёмопередатчик должен быть способен управлять шиной длиной 40 м на скорости 1 Мбит/с. Большая длина шины достигается при уменьшении скорости передачи данных. Самое большое ограничение на длину шины накладывает задержка распространения приёмопередатчика.

Задержка распространения

Протокол CAN определяет рецессивное (логическая "1") и доминантное (логический "0") состояния для реализации схемы поразрядного неразрушающего арбитража. Именно на эту методологию арбитража больше всего воздействуют задержки распространения. Каждый узел, вовлечённый в арбитраж, должен быть способен осуществлять выборку уровня каждого бита в пределах одного и того же времени передачи бита. Например, если два узла на противоположных концах шины начали передавать сообщения в одно и то же время, они должны выполнить арбитраж для захвата управления шиной. Арбитраж будет эффективен, только если оба узла способны сделать выборку в течение одного и того же времени передачи бита. На Рис. 5 показана односторонняя задержка распространения между двумя узлами. Чрезмерные задержки распространения (вне точки выборки) приведут к ошибочному арбитражу. Это означает, что длина шины ограничена для заданной скорости передачи данных.

Задержка распространения в системе CAN вычисляется как удвоенная сумма времени прохождения сигнала по физической шине туда и обратно (t BUS ), выходной задержки драйвера (t DRV ) и входной задержки компаратора (t CMP ). Приняв, что все узлы в системе имеют одинаковые задержки компонентов, получим задержку распространения:

t PROP = 2·(t BUS + t CMP + t DRV ).

Рис. 5. Односторонняя задержка распространения

MCP2551 - приёмопередатчик CAN

Микросхема MCP2551 - приёмопередатчик CAN, который реализует физический уровень, описанный в спецификации ISO-11898-2. Он поддерживает скорость передачи данных до 1 Мбит/с и подходит для систем с напряжениями питания 12 В и 24 В. MCP2551 обеспечивает защиту от короткого замыкания до ±40 В и защиту от кратковременных напряжений до ±250 В.

Дополнительно, будучи совместим с ISO-11898-2, MCP2551 обеспечивает сброс при включении питания (power-on reset - POR ) и защиту от кратковременного падения напряжения (brown-out protection ), а также обнаружение постоянного доминанта (permanent dominant detection ), чтобы гарантировать, что обесточенный или неисправный узел не будет мешать работе шины. Устройство реализует настраиваемую наклонную регулировку усиления (slope control ) на выводах шины для уменьшения излучения радиопомех (RFI ). На Рис. 6 представлена блок-схема MCP2551.

Рис. 6. Блок-схема MCP2551

Основная работа MCP2551

Передача

Контроллер протокола CAN выдаёт поток последовательных данных на логический вход TXD MCP2551. Соответствующее рецессивное или доминантное состояние выдаётся на выводы CANH и CANL.

Приём

MCP2551 принимает доминантное или рецессивное состояния на те же выводы CANH и CANL, с которых осуществляется передача. Эти состояния выдаются в виде соответствующих логических уровней на вывод RXD, чтобы контроллер протокола CAN принял кадр CAN.

Рецессивное состояние

Логическая "1" на входе TXD отключает драйверы от вводов CANH и CANL, и выводы "подтягиваются" к номиналу 2.5 В через резисторы смещения.

Доминантное состояние

Логический "0" на входе TXD включает драйверы выводов CANH и CANL. На CANH подаётся на ~1 В больше, чем номинал рецессивного состояния 2.5 В, таким образом увеличивая напряжение до ~3.5 В. На CANL подаётся на ~1 В меньше, чем номинал рецессивного состояния, таким образом уменьшая напряжение до ~1.5 В.

Режимы работы

Существует три режима работы, которые управляются извне через вывод RS:
1. Высокоскоростной режим.
2. Режим наклонной регулировки усиления.
3. Режим ожидания (Standby )

Высокоскоростной режим

Высокоскоростной режим выбирается подключением вывода RS к V SS . В этом режиме выходные драйверы имеют быстрое время нарастания и спада, что обеспечивает наивысшие скорости передачи до 1 Мбита/с и/или максимальную длину шины, а также обеспечивая минимальные циклические задержки приёмопередатчика.

Режим наклонной регулировки усиления

Если требуется уменьшить излучаемые драйвером электромагнитные помехи, MCP2551 можно установить в режим наклонной регулировки усиления подключением резистора (R EXT) от вывода RS на общий минус. В режиме наклонной регулировки усиления скорость нарастания выходного напряжения на одном проводе (на CANH или CANL) в основном пропорциональна выходному току на выводе RS. Ток должен быть в диапазоне от 10 мкА Уменьшение скорости нарастания выходного напряжения приводит к уменьшению скорости передачи данных CAN при заданной длине шины, либо к сокращению длины шины при заданной скорости передачи данных.

Режим ожидания

Режим ожидания (или спящий режим (sleep )) устанавливается подключением вывода RS к V DD . В спящем режиме передатчик отключен, а приёмник работает в режиме пониженного энергопотребления. Принимающий вывод (RXD) по-прежнему функционирует, но на более низкой скорости.

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

Обнаружение постоянного доминанта на передатчике

Если на передатчике обнаруживается состояние постоянного доминанта, MCP2551 отключает передатчик от CANH и CANL. Эта возможность предотвращает постоянное разрушение шины CAN неисправным узлом (контроллером CAN или самим MCP2551).

Драйверы отключаются, если низкий уровень присутствует на TXD в течение более чем ~1.25 мс (минимум) (см. Рис. 7).

Драйверы остаются отключенными всё время, пока на TXD остаётся низкий уровень. Появление нарастающего фронта на TXD сбросит логику таймера и включит драйвер.

Рис. 7. Обнаружение постоянного доминанта на TXD

Сброс при включении питания и защита от кратковременного снижения питания

MCP2551 имеет способность сброса при включении питания (Power-On Reset - POR ) и обнаружения кратковременного снижения напряжения питания (Brown-Out Detection - BOD ) (см. Рис. 8 ).

Сброс при включении питания (POR)

Когда на MCP2551 подаётся питание, выводы CANH и CANL остаются в высокоимпедансном состоянии до тех пор, пока VDD не достигнет высокого напряжения POR (POR high voltage - VPORH ). Кроме того, если при включении питания на выводе TXD низкий уровень, выводы CANH и CANL остаются в высокоимпедансном состоянии до тех пор, пока на TXD не установится высокий уровень. После чего драйвер будет функционировать нормально.

Обнаружение кратковременного снижения напряжения питания (BOD)

BOD происходит, когда VDD опускается ниже низкого напряжения сброса при включении питания (power-on reset low voltage - VPORL ). В этой точке выводы CANH и CANL входят в высокоимпедансное состояние и остаются в нем, пока не будет достигнуто напряжение VPORH.

Рис. 8. Сброс при включении питания и обнаружение кратковременного снижения напряжения питания

Смещения земли

Поскольку не требуется обеспечивать общую землю между узлами, то возможно возникновение смещений земли между ними. То есть каждый узел может наблюдать разные однопроводные напряжения шины (напряжения синфазного сигнала шины), в то же время поддерживая одинаковое дифференциальное напряжение. В то время как MCP2551 предусмотрен для управления смещениями земли от -12 В до +12 В, спецификация ISO-11898 требует только от -2 В до +7 В. На Рис. 9 и 10 показано, как между узлами возникают смещения земли.

Рис. 9 показывает передающий узел с положительным смещением земли относительно принимающего узла. Приёмник MCP2551 может работать с CANH = +12 В. Максимальное выходное напряжение доминанта CAN (V O(CANH)) от передающего узла составляет 4.5 В. Вычитание этого максимума даёт смещение земли (относительно принимающего узла) в 7.5 В для передающего узла. В рецессивном состоянии каждый узел пытается притянуть выводы CANH и CANL к их основным уровням (обычно 2.5 В). Однако результирующее напряжение синфазного сигнала в рецессивном состоянии принимает значение 6.25 В для принимающего узла и -1.25 В для передающего.

Рис. 10 показывает передающий узел с отрицательным смещением земли относительно принимающего узла. Приёмник MCP2551 может работать с CANL = -12 В. Минимальное выходное напряжение доминанта CAN (V O(CANL)) из передающего узла составляет 0.5 В. Вычитание этого минимума даёт фактическое смещение земли относительно принимающего узла в -12.5 В. Напряжение синфазного сигнала для рецессивного состояния составляет -6.25 В для принимающего узла и 6.25 В для передающего.

Поскольку все узлы работают как передатчики для части каждого сообщения (то есть каждый приёмник должен подтверждать (ACK) правильные сообщения в течение временного интервала ACK), наибольшее смещение земли, допускаемое между узлами составляет 7.5 В, как показано на Рис. 9 .

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

Рис. 9. Земля принимающего узла ниже земли передающего

Рис. 10. Земля принимающего узла выше земли передающего

Оконечная нагрузка шины

) используется для минимизации отражения сигнала в шине. ISO-11898 требует, чтобы шина CAN имела номинальную характеристику входного полного сопротивления линии передачи в 120 Ом. Поэтому обычное значение согласующего резистора для каждого конца шины составляет 120 Ом. Есть несколько различных способов реализации оконечной нагрузки, используемых для увеличения электромагнитной совместимости (EMC ) (см. Рис. 11 ):

1. Стандартная оконечная нагрузка.
2. Разделённая оконечная нагрузка.
3. Смещённая разделённая оконечная нагрузка.

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

Стандартная оконечная нагрузка

Как подразумевает название, эта оконечная нагрузка состоит из одинарных резисторов номиналом в 120 Ом на каждом конце шины. Этот метод приемлем во многих системах CAN.

Разделённая оконечная нагрузка

Разделённая оконечная нагрузка приобретает всё большую популярность, так как позволяет легко добиваться снижения излучения. Разделённая оконечная нагрузка - модификация стандартной оконечной нагрузки, в которой один резистор номиналом 120 Ом на каждом конце шины разделяется на два резистора по 60 Ом с развязывающим конденсатором, присоединенным между резисторами и подключенным к земле. Номиналы этих резисторов должны как можно меньше отличаться друг от друга.

Смещённая разделённая оконечная нагрузка

Этот метод оконечной нагрузки используется для поддержания синфазного напряжения рецессивного сигнала на постоянном значении, таким образом увеличивая EMC. Эта схема аналогична схеме разделённой оконечной нагрузки, но добавлена дополнительная схема делителя напряжения для достижения напряжения V DD /2 между двумя резисторами по 60 Ом (см. Рис. 11 ).

Примечание : Номиналы резисторов смещения на Рис. 11 , также как и резисторов разделённой оконечной нагрузки, должны как можно меньше отличаться друг от друга.

Рис. 11. Схемы оконечной нагрузки

CAN (Controller Area Network - "область, охваченная сетью контроллеров") представляет собой комплекс стандартов для построения распределенных промышленных сетей, который использует последовательную передачу данных в реальном времени с очень высокой степенью надежности и защищенности. Центральное место в CAN занимает протокол канального уровня модели OSI. Первоначально CAN был разработан для автомобильной промышленности, но в настоящее время быстро внедряется в область промышленной автоматизации. Это хорошо продуманный, современный и многообещающий сетевой протокол. Начало развития CAN было положено компанией Bosch в 1983 г., первые микросхемы CANконтроллеров были выпущены фирмами Intel и Philipsв 1987 году, в настоящее время контроллеры и трансиверы CANвыпускаются многими фирмами, в том числе Analog Devices, Inc., Atmel Corp. Cast, Dallas Semiconductor, Freescale, Infineon, Inicore Inc., Intel, Linear Technology, Maxim Integrated Products, Melexis, Microchip, National Semiconductor, NXP, OKI, Renesas Technology Corp., STMicroelectronics, Yamar Electronics, Texas Instruments.

В России интерес к CAN за последние годы сильно возрос, однако контроллерного оборудования для CAN в России крайне мало, в десятки или сотни раз меньше, чем для Modbus или Profibus. Среди протоколов прикладного уровня для работы с CAN наибольшее распространение в России получили CANopen и DeviceNet.

В настоящее время CAN поддерживается 11-ю стандартами ISO, в том числе [ISO - Diagnostics ].

CAN охватывает два style="color:red"> уровня модели OSI: физический и канальный (табл. 2.7). Стандарт не предусматривает никакого протокола прикладного (7-го) уровня модели OSI. Поэтому для его воплощения в жизнь различные фирмы разработали несколько таких протоколов: CANopen (организации CiA), SDS (фирмы Honeywell Micro Switch Division), CAN Kingdom (фирмы Kvaser), DeviceNet (фирмы Allen-Bradley, ставший Европейским стандартом в 2002 г.) и ряд других [Грибанов - Третьяков ].

CAN характеризуется следующими основными свойствами:

  • каждому сообщению (а не устройству) устанавливается свой приоритет ;
  • гарантированная величина паузы между двумя актами обмена;
  • гибкость конфигурирования и возможность модернизации системы;
  • широковещательный прием сообщений с синхронизацией времени;
  • непротиворечивость данных на уровне всей системы;
  • допустимость нескольких ведущих устройств в сети ("многомастерная сеть");
  • способность к обнаружению ошибок и сигнализации об их наличии;
  • автоматический повтор передачи сообщений, доставленных с ошибкой, сразу, как только сеть станет свободной;
  • автоматическое различение сбоев и отказов с возможностью автоматического отключения отказавших модулей.

К недостаткам можно отнести сравнительно высокую стоимость CAN-устройств, отсутствие единого протокола прикладного уровня, а также чрезмерную сложность и запутанность протоколов канального и прикладного уровня, изложенных в стандартах организации CAN in Automation (CiA).

2.6.1. Физический уровень

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

Выводы "земли" всех передатчиков сети должны быть соединены (если интерфейсы гальванически не изолированы). При этом разность потенциалов между выводами заземлений не должна превышать 2 В. Гальваническая изоляция рекомендуется при длине линии более 200 м, но не является обязательным требованием стандарта.

Для электрического соединения устройств с CAN интерфейсом стандарт предусматривает два варианта. Первый вариант состоит в применении Т-образных разветвителей, которые состоят из трех 9-штырьковых разъемов D-sub, расположенных в одном корпусе, одноименные контакты которых соединены между собой. Разветвители имеют один разъем со штырьками и два - с гнездами.

Второй вариант требует наличия в каждом CAN-устройстве двух разъемов. Для включения устройства в сеть кабель разрезают и на его концах устанавливают ответные части разъемов. Устройство включается буквально в разрыв линии передачи. Такой подход позволяет наращивать количество устройств и изменять топологию сети путем добавления в разрыв кабеля новых устройств и кабеля с разъемами на концах. Один из разъемов должен быть со штырьками, второй - с гнездами. Подключение устройств к шине без разъемов не допускается. Согласующий резистор должен располагаться внутри разъема, который подключается к концу кабеля. Для присоединения модулей к CAN-шине должен использоваться 9-штырьковый разъем типа D- Sub. На модуле устанавливается разъем с гнездами, на соединяющем кабеле - со штырьками. Цоколевка разъемов показана в табл. 2.8 .

Применение разъемов со штырьками или гнездами определяется следующим правилом: при "горячей" замене модулей питание должно оставаться только на разъемах с гнездами; это позволяет избежать случайного короткого замыкания.

Отметим, что в основанном на CAN стандарте CANopen предусмотрено гораздо большее разнообразие вариантов разъемов, в том числе для плоского кабеля, RJ-10, RJ45, разъемный винтовой клеммник, и еще около десяти вариантов специальной конструкции [Cabling ]. Допускается применение и других разъемов.

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

Вывод на рис. 2.20 позволяет установить пороговое напряжение для входа и уровень синфазного напряжения в линии, когда она находится в рецессивном состоянии. Обычно = 2,5 В. Чтобы установить уровень синфазного напряжения на линии, терминальные сопротивления делят на два по 60 Ом, соединяют их последовательно, а к точке соединения подключают вывод . При симметричной форме импульсов и относительно рецессивного состояния уменьшается уровень излучаемых помех, поскольку приращения токов в каждом из проводов витой пары при переключении логических уровней (см. рис. 2.21) оказываются равными по величине, но обратными по знаку и поэтому компенсируют друг-друга.

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

Рис. 2.21. Пояснение понятий рецессивного и доминантного состояния

Если сигнал является доминирующим слишком долго (более 1 мс), генератор импульса таймаута (на рис. 2.20 обозначен прямоугольником с импульсом) временно отключает передатчик, поскольку в противном случае модуль может быть навсегда блокирован средствами канального уровня как отказавший.

Стандартом предусмотрена возможность подключения к CAN сети любого количества устройств, однако практически оно ограничивается нагрузочной способностью передатчиков (100...200) или задержкой в повторителях.

В CAN-трансивере имеется генератор синхроимпульсов с частотой 16 МГц ±0,1%. Ширина одного бита программно устанавливается величиной от 8 до 25 импульсов синхрогенератора, обычно 8 импульсов при скорости передачи 1 Мбит/с и 16 импульсов при 20 кбит/с. Синхронизация всех узлов сети происходит в течение первого такта синхронизации. Процедура обработки битов в приемнике обеспечивает программируемую задержку импульсов синхронизации, необходимую для компенсации времени задержки прохождения сигнала в линии связи и сдвига фазы вследствие дрейфа частоты тактового генератора.

Различают два типа синхронизации: жесткую синхронизацию с помощью стартового бита в начале сообщения и ресинхронизацию во время передачи сообщения. С помощью ресинхронизации можно подстроить интервал времени от начала синхронизации до момента, в который измеряется логический уровень принимаемого импульса данных. Интервал подстройки может быть изменен на 1...4 такта.

Для определения логического состояния шины уровни принимаемых сигналов измеряются на расстоянии 6-ти тактов синхрогенератора от переднего фронта импульса (бита) при скорости 1 Мбит/с и на расстоянии 14-ти тактов при скорости 20 кбит/с [CAN ] (для сравнения укажем, что в стандартных UART отсчеты берутся посередине импульса). Количество отсчетов может быть 1 или 3 (устанавливается программно). CAN использует синхронную передачу битов. Это повышает пропускную способность канала связи, но требует усложненного процесса синхронизации.

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

Рассмотрим наиболее распространенный стандарт прикладного уровня CANopen [CANopen ]. Для упрощения применения стандарта вводятся несколько специфических для CANopen понятий. Все функциональные возможности прикладного уровня делятся между так называемыми сервисами (элементами услуг). Программные приложения взаимодействуют между собой путем вызова соответствующих сервисов прикладного уровня. Сервисы обмениваются данными с равными им (одноранговыми) сервисами через CAN-сеть с помощью определенного протокола. Этот протокол описывается в спецификации протокола сервиса.

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

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