Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Arduino и MCP2515 – интерфейс CAN для Arduino
Arduino и MCP2515: принцип работы, подключение, схема, код
CAN (Controlled Area Network) – это стандарт шины, который позволяет микроконтроллеру и его периферийным устройствам обмениваться данными без необходимости использования хост-устройства или компьютера. Протокол CAN, разработанный Robert Bosch GmbH, в основном используется в автомобилях для связи между блоком управления и его компонентами.
Например, блок управления двигателем является основным средством управления, используемым в автомобиле. Этот блок подключен ко многим датчикам и исполнительным механизмам, таким как механизмы контроля потока воздуха, давления, температуры, управления клапанами, двигатели для контроля воздуха и т. д. Связь между этими модулями и блоком управления осуществляется через шину CAN. В этом проекте мы узнаем о модуле контроллера CAN MCP2515, о том, как связать контроллер шины CAN MCP2515 с Arduino, и, наконец, о том, как обеспечить связь между двумя платами Arduino с помощью двух контроллеров CAN MCP2515 и самого протокола CAN.
Модуль MCP2515
Контроллер шины CAN MCP2515 – это простой модуль, который поддерживает протокол CAN версии 2.0B и может использоваться для связи со скоростью 1 Мбит/с. Для того, чтобы настроить полную систему связи, вам потребуется два модуля шины CAN. Модуль, используемый в проекте, показан на рисунке ниже.
Этот конкретный модуль основан на ИС контроллера CAN MCP2515 и ИС приемопередатчика TJA1050. Микросхема MCP2515 представляет собой автономный контроллер CAN и имеет встроенный интерфейс SPI для связи с микроконтроллерами. Что касается микросхемы TJA1050, она действует как интерфейс между ИС контроллера MCP2515 и физической шиной CAN.
MCP2515 – это основной контроллер, который состоит из трех основных подкомпонентов: модуля CAN, логики управления и блока SPI. Модуль CAN отвечает за передачу и прием сообщений на шине CAN. Логика управления управляет настройкой и работой MCP2515, взаимодействуя со всеми блоками. Блок SPI отвечает за интерфейс связи SPI.
На следующем рисунке показана схема CAN-модуля MCP2515, а также показано, как микросхема MCP2515 и TJA1050 подключены к модулю.
Схема подключения Arduino и MCP2515
На следующем рисунке показана принципиальная схема подключения модуля CAN MCP2515 с Arduino и связь между двумя Arduino по протоколу CAN.
Код программы для взаимодействия Arduino и MCP2515
Прежде чем углубляться в код, вам необходимо скачать библиотеку для модуля MCP2515. Есть много библиотек, но здесь мы использовали эту: https://github.com/Seeed-Studio/CAN_BUS_Shield. Загрузите ее и поместите извлеченное содержимое в каталог библиотек Arduino. Поскольку сеть CAN включает в себя модуль передатчика и модуль приемника, код также делится на код передатчика и код приемника.
Код передатчика CAN
Код приемника CAN
Работа этого проекта очень проста, так как вся работа выполняется библиотеками (SPI и CAN). Поскольку CAN является связью на основе сообщений, вам необходимо отправить сообщение в диапазоне от 0 до 8 байтов.
В этом проекте передатчик отправляет сообщение 1 1 2 3 0 5 6 7. Это сообщение передается по шине CAN, и получатель получает это сообщение, что отображается на его последовательном мониторе. Кроме того, 0-й и 4-й биты, то есть 1 и 0 в вышеуказанной последовательности, извлекаются приемником отдельно и включают и выключают светодиод, подключенный к контакту 2 платы Arduino.
Подключение модуля MCP2515 к Arduino
Модуль MCP2515 — это контроллер шины CAN, который позволяет обмениваться данными между периферийными устройствами и микроконтроллером без подключений к компьютеру. Прежде чем обратиться к сборке аппаратных компонентов, мы рассмотрим основные моменты, связанные с этой технологией.
Controlled Area Network — стандарт интерфейса. Он часто используется в электронных системах диагностики современных автомобилей для передачи информации от блока управления к другим цифровым датчикам и механизмам (контроля температуры, давления и т.п.). Такая его особенность позволяет активно применять устройство во многих как простых, так и более сложных проектах (например, моделирование системы «умный дом») – все это без задействования ПК.
Модуль MCP2515 представляет собой компактный автономный контроллер с 3 подкомпонентами и интегрированным интерфейсом SPI.
- напряжение питания: 5V;
- интерфейс: высокоскоростной SPI;
- частота: 40 МГц;
- тип шины: CAN;
- max скорость шины: 1МБ/сек.;
- рабочий ток: 5 мА (в режиме ожидания — 1uA);
- диапазон рабочих температур: -40 … +85 C;
- габариты: 4х2.8 см.
Контроллер оснащен держателем Micro SD-карты, кнопкой сброса, разъемом для последовательного LCD, 2-мя LED-индикаторами. При желании возможно управление с помощью джойстика.
Кроме всего вышеперечисленного, устройство имеет неплохие дополнительные (опциональные) возможности: эффективная фильтрация сведений, высокая производительность и коммерческая доступность.
Подключение MCP2515 к Arduino
Давайте рассмотрим принципиальную схему подключения.
Для реализации несложного проекта нам понадобится такое «железо»:
- CAN контроллер MCP2515 – 2 шт.
- Плата Arduino (Uno, Nano или Mega) – 2шт.
- Макетная плата.
- Соединительные провода.
Еще более простая схема сборки:
Для прошивки и облегчения процесса программирования рекомендуем использовать специализированное ПО — CAN_BUS_Shield. Эту библиотеку необходимо скачать и инсталлировать, а именно разархивировать содержимое следует в каталог библиотек среды Arduino IDE.
Еще один популярный (альтернативный) вариант — MCP_CAN_lib
Зальем 2 скетча (под код передатчика и приемника CAN):
Как вы наверняка успели отметить, мы использовали еще один софт – библиотеку SPI (уже для управления интерфейсом). Проверьте ее наличие у себя в приложении!
Изучайте Arduino, выбирайте интересные проекты и развивайтесь в этом направлении. До скорой встречи!
Beirdo/Arduino-MCP2515
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
This branch is 1 commit ahead of autowp:master.
Open a pull request to contribute your changes upstream.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Arduino MCP2515 CAN interface library
- Download the ZIP file from https://github.com/autowp/arduino-mcp2515/archive/master.zip
- From the Arduino IDE: Sketch -> Include Library. -> Add .ZIP Library.
- Restart the Arduino IDE to see the new «mcp2515» library with examples
To create connection with MCP2515 provide pin number where SPI CS is connected (10 by default), baudrate and mode
The available modes are listed as follows:
The available baudrates are listed as follows:
Example of initialization
You can also set oscillator frequency for module when setting bitrate:
Default value is MCP_16MHZ
Note: To transfer data on high speed of CAN interface via UART dont forget to update UART baudrate as necessary.
2. Frame data format
Library uses Linux-like structure to store can frames;
For additional information see SocketCAN
This is a function to send data onto the bus.
For example, In the ‘send’ example, we have:
The following function is used to receive data on the ‘receive’ node:
In conditions that masks and filters have been set. This function can only get frames that meet the requirements of masks and filters.
You can choise one of two method to receive: interrupt-based and polling
Example of poll read
Example of interrupt based read
5. Set Receive Mask and Filter
There are 2 receive mask registers and 5 filter registers on the controller chip that guarantee you get data from the target device. They are useful especially in a large network consisting of numerous nodes.
We provide two functions for you to utilize these mask and filter registers. They are:
MASK mask represents one of two mask MCP2515::MASK0 or MCP2515::MASK1
RXF num represents one of six acceptance filters registers from MCP2515::RXF0 to MCP2515::RXF5
ext represents the status of the frame. false means it’s a mask or filter for a standard frame. true means it’s for a extended frame.
ulData represents the content of the mask of filter.
Example implementation of CanHacker (lawicel) protocol based device: https://github.com/autowp/can-usb
For more information, please refer to wiki page .
This software is written by loovee (luweicong@seeed.cc) for seeed studio,
Updated by Dmitry (https://github.com/autowp)
and is licensed under The MIT License. Check LICENSE.md for more information.
Contributing to this software is warmly welcomed. You can do this basically by
forking, committing modifications and then pulling requests (follow the links above
for operating guide). Adding change log and your contact into file header is encouraged.
Thanks for your contribution.
Seeed Studio is an open hardware facilitation company based in Shenzhen, China.
Benefiting from local manufacture power and convenient global logistic system,
we integrate resources to serve new era of innovation. Seeed also works with
global distributors and partners to push open hardware movement.
Подключение MCP2515 к Arduino
Автор: Сергей · Опубликовано 30.07.2022 · Обновлено 29.07.2022
Сегодня расскажу как реализовать связь по CAN шине используя Arduino UNO и модуль MCP2515. CAN шина является основным протоколом связи в автомобилях, например блок управления двигателя, ABS и другими блоки. В качестве примера будем передавать данные с одного модуля MCP2515 на другой.
Технические параметры:
► Микросхема: MCP2515;
► Напряжение питания: от 2.7 до 5.5 В;
► Потребляемый ток: 5 мА (1 мкА в режиме ожидания);
► Максимальная скорость передачи данных: 1 Мбит/с;
► Интерфейс: SPI;
► Сопротивление: 120 Ом;
► Габариты: 40 × 18 × 14 мм;
► Вес: 7 грамм.
Общие сведенья
CAN (Controller Area Network) был разработан компанией BOSCH и выпущено в середине 80-х годов. Сначала применялась в автобусах и грузовиках, но сейчас можно встретить в автомобилях, кораблях, промышленности, тракторов и так далее. Кто хочет почитать больше информации о CAN протоколу, можно ознакомится с этой статьей.
Так как контроллеры Arduino не содержит внутренний CAN, поэтому используется внешний контроллер MCP2515 (самая большая микросхема на модуле), для работы которого необходим кварц на 8 МГц и небольшая обвязка. Микросхема MCP2515 способна получать и передавать данные с CAN шины на микроконтроллер, через SPI наоборот. Так же, на модуле установлен трансивер TJA1050, которая физически соединяет MCP2515 с CAN шиной.
Для заметки, некоторые контроллеры, такие как ESP32, уже содержат внутреннюю периферию CAN, но им все равно нужен трансивер TJA1050 или MCP2551.
Модуль MCP2515 содержит три разъема, самый большой, это вывода интерфейса SPI, который состоит из 7 контактов, шагом 2.54 мм. Второй и третий, дублируются, и являются выводами шины CAN
Назначение контактов SPI:
► VCC и GND — выводы питания 5В;
► CS — вывод выбора ведомого устройства;
► SO — вывод SPI;
► SI — вывод SPI;
► SCL — тактовый вывод SPI;
► INT — вывод прерывания MCP2515.
Назначение контактов CAN:
► H — вывод CAN;
► L — вывод CAN.
Подключение MCP2515 к Arduino UNO
Необходимые детали:
► Arduino UNO R3 x 2 шт;
► Модуль MCP2515 x 2 шт:
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт:
► Кабель USB 2.0 A-B x 2 шт;
► Светодиод 5 мм x 1 шт;
► Тактовая кнопка х 1 шт;
► Резистор 330.
Описание:
В примере покажу, как реализовать связь между двумя контроллерами Arduino UNO, через CAN шину используя модуль MCP2515.
Подключение:
Сначала подключаем модуль MCP2515 и Arduino UNO, для этого вывода INT, SCK, SI, SO, CS, GND, VCC с MCP2515 подключаем к выводам 2, 13, 11, 12, 10, GND, 5B, аналогично для второй сборки Arduino UNO и MCP2515. Далее соединяем два модуля MCP2515, для этого вывод H и L, соединяем к H и L. Светодиод и кнопку подключаем по схеме показанной ниже.
Установка библиотек:
Для работы программы, необходимо дополнительно установить библиотеку «mcp2515«, скачать ее можно в конце статьи.
Программа №1 (передатчик):
Первый скетч, необходимо загрузить на Arduino UNO с кнопкой, она будет передавать данные ко второй Arduino UNO.