MCP2515 CAN Module

Microchip (MCP2515; изготовитель платы не указан) · MCP2515; пример для модуля с кварцем 8 МГц и TJA1050 на 5 В

Подключение контроллера CAN 2.0 к микроконтроллеру через SPI.

Автор: SLDV LAB

Опубликовано · Обновлено

СложностьСредне
Проекты с компонентом

О МОДУЛЕ

Что делает MCP2515; пример для модуля с кварцем 8 МГц и TJA1050 на 5 В

MCP2515 выполняет функции контроллера CAN и обменивается данными с микроконтроллером по SPI. Для физической линии CANH/CANL ему нужен отдельный трансивер. В распространённых модулях это TJA1050, но существуют другие схемы, напряжения питания и кварцы.

Пример относится только к 5-вольтовой плате с кварцем 8 МГц. Частоту определяют по маркировке кварца и схеме: неверный выбор 8/16 МГц меняет реальную скорость CAN. Микросхема MCP2515 допускает иное питание, однако это не делает готовый модуль с TJA1050 модулем на 3,3 В. Размеры, порядок гребёнки и наличие 120-омного резистора проверяются у конкретной платы.

Первый запуск выполняется во внутреннем loopback без подключения CANH/CANL. Он проверяет обмен с контроллером, но не подтверждает исправность трансивера и проводки линии. Для реальной CAN-сети нужны совпадающая скорость, второй активный узел для ACK и терминация на концах. MCP2515 работает с классическим CAN, а не CAN FD.

Модуль HW-184 MCP2515: вариант 8 МГц с TJA1050 и питанием 5 В по описанию AJmaker. Фото AJmaker; фон удалён без реконструкции платы. Маркировка кварца на фото не читается; параметры подтверждает карточка продавца. Разрешение на повторное использование фото не подтверждено.

Источник изображения: ajmaker.pl, исходный файл. Условия повторного использования не установлены; открытая лицензия не заявляется. Фон отделён, выполнено равномерное масштабирование; реальные детали платы не перерисованы.

MCP2515/TJA1050 8 МГц: подключение к Uno R3 для внутреннего loopback. INT и обе CAN-клеммы не подключены. Авторская схема SLDV LAB.

Характеристики

Формат контроллера
CAN 2.0B; стандартные и расширенные идентификаторы
Максимальные данные классического кадра
8 байт
Кварц выбранного примера
8 МГц
Интерфейс
SPI
Питание модуля
В примере модуль MCP2515 + TJA1050 питается от 5 В и подключён к Uno R3 с логикой 5 В; напрямую к ESP32 этот вариант не подключать.

ПРАКТИКА

Подключение

Контакт модуляКонтакт платыНазначение
VCC5VArduino Uno R3; только описанное 5-вольтовое исполнение.
GNDGNDОбщая земля.
SCKD13SPI Uno R3.
SI / MOSID11Данные от Uno к модулю.
SO / MISOD12Данные от модуля к Uno; уровень 5 В.
CSD10Указан в конструкторе MCP2515.
INTНе подключатьПример опрашивает состояние по SPI.
CANH / CANLНе подключатьТолько внутренний loopback; не соединять CANH с CANL.

Подходит для Arduino. Выберите контакты по документации своей платы.

ВАШ ПРОЕКТ · ВАШ ДАТЧИК

Интегрируйте модуль с ChatGPT

Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.

Помоги интегрировать MCP2515 CAN Module. Сначала уточни точную плату модуля, контроллер, среду, питание и задачу. Проверь схему, логические уровни и маркировку контактов; затем дай согласованные подключение, зависимости и полный минимальный пример с обработкой ошибок. Объясни безопасную первичную проверку и ожидаемый результат. До примера запроси маркировку кварца и CAN-трансивера. Не переноси питание и уровни чипа MCP2515 на весь модуль.

Библиотеки

Установите библиотеку для своей среды и откройте пример из её документации.

Что именно прописать

Плата и ядро
Arduino Uno R3; Arduino AVR Boards 1.8.6

Распиновка относится к ATmega328P Uno R3; не Uno R4 и не ESP32.

Библиотека
autowp arduino-mcp2515 1.3.1

Заголовок mcp2515.h; SPI входит в ядро Arduino.

Кварц и скорость
CAN_125KBPS, MCP_8MHZ

8 МГц обязательно сверить на конкретном модуле.

Начальный режим
setLoopbackMode()

Не подключать к внешней CAN-сети для этого теста.

Arduino: полный внутренний loopback MCP2515

cpp
#include <SPI.h>
#include <mcp2515.h>
MCP2515 can(10);
void stop(const char *message) {
  Serial.println(message);
  while (true) delay(1000);
}
void setup() {
  Serial.begin(115200);
  SPI.begin();
  if (can.reset() != MCP2515::ERROR_OK) stop("Reset failed");
  if (can.setBitrate(CAN_125KBPS, MCP_8MHZ) != MCP2515::ERROR_OK)
    stop("Bitrate setup failed");
  if (can.setLoopbackMode() != MCP2515::ERROR_OK) stop("Loopback failed");
  can_frame sent = {};
  sent.can_id = 0x123;
  sent.can_dlc = 2;
  sent.data[0] = 0x55;
  sent.data[1] = 0xAA;
  if (can.sendMessage(&sent) != MCP2515::ERROR_OK) stop("Send failed");
  can_frame received = {};
  const uint32_t started = millis();
  while (millis() - started < 1000) {
    if (can.readMessage(&received) == MCP2515::ERROR_OK) {
      bool ok = received.can_id == sent.can_id && received.can_dlc == 2
        && received.data[0] == 0x55 && received.data[1] == 0xAA;
      stop(ok ? "Loopback OK" : "Unexpected frame");
    }
  }
  stop("Receive timeout");
}
void loop() {}

Полный скетч: Uno R3, Arduino AVR Boards 1.8.6, autowp arduino-mcp2515 1.3.1. Сверено по заголовку API; компиляция и аппаратный тест не выполнялись. Внешний трансивер этим режимом не проверяется.

Проекты с этим компонентом

Все проекты

Связанные проекты пока не опубликованы.

Связанные материалы и компоненты