CAN-шина: немного теории и практика

mcp2510

Уже сегодня CAN интерфейс уверенно вытесняет UART-производные интерфейсы (rs485, rs232) как более функциональная шина с большей производительностью, и на это есть причины. Но до сих пор не так много разработчиков знает как и с чем "есть" этот интерфейс. Попытаемся рассмотреть немного примеров и поделиться собственным опытом использования этого интерфейса, а также  общую теорию, примеры применения и практические рекомендации по использованию.

Что же такое CAN-bus, в общих словах это подобный ethernet интерфейс, описывающий логику работы шины, при этом не привязан ни к какому физическому уровню, ну и конечно ни к какому протоколу. Интерфейс очень продуман, он исключает коллизии, ошибки на линии и гарантирует доставку, при этом в нем нет архитектуры master-slave, тут каждое устройство просто "выкидывает" на линию данные и все устройства могут просматривать полученные данные, как-будто все master'ы. Скорость на кан-шине - до 1 Мбит. Да да, такое даже и не снилось rs485, на смену которого пришел CAN.

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

    Если же процессор не имеет на борту CAN-контроллера, это не так страшно. Многие используют микросхемы типа mcp2510, это контроллер, подключаемый по SPI. Его используют многие производители электроники, embedded linux имеет даже поддержку этого чипа в некоторых BSP, так что подключить кан-контроллер к устройство с маленьким линуксом может не составить труда.

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

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

      Про структуру сообщений можно почитать в другой статье на этом сайте.