Как создать сеть CAN Bus с модулями MCP2515 и Arduino

  • Протокол CAN обеспечивает эффективную связь в промышленных и автомобильных средах.
  • Модуль MCP2515 — оптимальное решение для подключения Arduino к сети CAN.
  • Шина CAN использует два кабеля (CAN_H и CAN_L) для надежной передачи данных на большие расстояния.
  • Это руководство шаг за шагом проведет вас через настройку и использование сети CAN с Arduino.

подключенные автомобили

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

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

Что такое CAN-шина?

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

Современный автомобиль содержит более 70 устройств управления, известных как ЭБУ (электронные блоки управления), подключенных друг к другу через шину CAN. Благодаря этому протоколу ЭБУ обмениваются ключевой информацией для работы автомобиля, такой как данные о скорости автомобиля или положении акселератора.

Топология и сигналы CAN-шины

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

С физической точки зрения связь осуществляется по двум кабелям: CAN_H y МОГУ ЛИ Я. Эти кабели имеют оплетку для минимизации электромагнитных помех. Кроме того, концы сети должны быть оконцованы резисторами сопротивлением 120 Ом, чтобы избежать отражений в сигнале.

CAN-сигнализация

Система CAN использует два логических состояния для связи: доминирующий y рецессивный. В доминирующем состоянии CAN_H имеет напряжение 3.5 В, а CAN_L — 1.5 В. В этом состоянии передается логический «0». С другой стороны, в рецессивном состоянии оба провода имеют напряжение 2.5 В, что указывает на то, что шина свободна и может передаваться логическая «1». Именно это изменение напряжения между двумя кабелями обеспечивает передачу данных по сети.

Модуль MCP2515

El Модуль MCP2515 Это идеальное решение для добавления CAN-подключения к вашему Arduino. Он состоит из контроллера CAN (MCP2515, который соответствует спецификации CAN 2.0B) и приемопередатчика CAN (TJA1050, который обеспечивает физическую связь). Эти два чипа работают вместе, поэтому вы можете отправлять и получать сообщения CAN с помощью Arduino через интерфейс SPI.

MCP2515 поддерживает как стандартные (11-битные), так и расширенные (29-битные) сообщения и имеет возможность отфильтровывать нежелательные сообщения с помощью масок и фильтров, что разгружает работу микроконтроллера. Это отличный вариант для проектов, требующих надежной связи, будь то в шумной обстановке или на больших расстояниях.

Компоненты модуля MCP2515

Модуль MCP2515 включает в себя следующие части:

  • CAN-контроллер MCP2515: отвечает за выполнение всех функций протокола CAN, таких как передача и получение сообщений.
  • CAN-трансивер TJA1050: Отвечает за преобразование данных от контроллера CAN в сигналы для физической шины CAN и наоборот.
  • Контакты связи SPI: Используя контакты SCK, MOSI, MISO и CS, MCP2515 связывается с Arduino через интерфейс SPI.
  • Клеммы CAN-шины: Эта небольшая винтовая клеммная колодка имеет маркировку «H» и «L». CAN_H и CAN_L должны быть подключены к сетевым кабелям CAN.

Как настроить сеть CAN с помощью Arduino

С модулем MCP2515 настройка сети CAN относительно проста. Ниже я объясню, как подключить модуль к плате Arduino и как настроить программное обеспечение.

Соединения модуля MCP2515

Для начала подключите контакты SPI вашего Arduino следующим образом:

  • МИСО (выход модуля) к контакту D12 Arduino
  • MOSI (вход модуля) к контакту D11 Arduino
  • SCK (Часы) к контакту D13 Arduino.
  • CS (Выбор микросхемы) к контакту D10 Arduino

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

Не забудьте включить питание вашего модуля. Вывод VCC должен быть подключен к 5 В, а вывод GND — к земле.

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

Программирование Arduino

После того, как вы подключили узлы, пришло время запрограммировать Arduino для связи с шиной CAN через модуль MCP2515. Лучший способ сделать это — использовать подходящую библиотеку, например библиотеку 'mcp2515'.

Во-первых, вам нужно установить эту библиотеку. Если вы используете Arduino IDE, выберите «Скетч» > «Включить библиотеку» > «Управление библиотеками». Найдите «mcp2515» и выберите вариант установки.

Установив библиотеку, вы можете приступить к написанию кода для узла передатчика и узла приемника. Ниже я покажу вам основные примеры для обоих.

Пример кода для узла передатчика

Этот код отправляет сообщение «Hello World» по шине CAN каждую секунду.

#include void setup() { Serial.begin(9600); while (!Serial); Serial.println("Nodo transmisor CAN"); if (!CAN.begin(500E3)) { Serial.println("Error al iniciar CAN"); while (1); }}void loop() { Serial.print("Enviando mensaje... "); CAN.beginPacket(0x12); CAN.write('H'); CAN.write('o'); CAN.write('l'); CAN.write('a'); CAN.write(' '); CAN.write('M'); CAN.write('u'); CAN.write('n'); CAN.write('d'); CAN.write('o'); CAN.endPacket(); Serial.println("Mensaje enviado correctamente"); delay(1000);}

Пример кода для принимающего узла

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

#include void setup() { Serial.begin(9600); while (!Serial); Serial.println("Nodo receptor CAN"); if (!CAN.begin(500E3)) { Serial.println("Error al iniciar CAN"); while (1); } CAN.onReceive(onReceive);}void loop() {}void onReceive(int packetSize) { Serial.print("Mensaje recibido con ID: 0x"); Serial.print(CAN.packetId(), HEX); Serial.print(" | Tamaño: "); Serial.print(packetSize); Serial.print(" | Datos: "); while (CAN.available()) { Serial.print((char)CAN.read()); } Serial.println();}

Скорости и расстояния в сети CAN

CAN-шина обеспечивает связь на различных скоростях. Максимальная скорость, поддерживаемая MCP2515, составляет 1 Мбит/с, но длина шины ограничивает скорость передачи. Например, при скорости 1 Мбит/с максимальная длина шины составляет примерно 40 метров. Однако если вам нужно преодолеть большие расстояния, вы можете снизить скорость. При скорости 125 кбит/с длина шины может достигать 500 метров.

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

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

CAN-сеть с несколькими узлами

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

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

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


Будьте первым, чтобы комментировать

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.