🛒
0 товар.
0 руб.
Логотип

Интернет-магазин «Неглупый Дом»

☰
ИИ-консультант Wildberries OZON Яндекс Маркет
Поиск по сайту
Гугл таблица с ассортиментом

🚗 Проект: смешанная CAN-сеть из модулей на разных чипах TJA1050(I2C) и MCP2515(SPI)

В другом проекте два одинаковых модуля MCP2515 обмениваются данными. Здесь — особенность CAN на практике: на одной шине CAN-H/CAN-L могут работать узлы на РАЗНЫХ чипах с разным интерфейсом к Arduino — один через SPI (MCP2515), другой через I2C (TJA1050-I2C).

Как это работает

CAN — стандарт физического и канального уровня: любой согласованный по электрическим параметрам узел участвует в шине независимо от внутреннего интерфейса (SPI/I2C) хост-контроллера. MCP2515 общается по SPI, как и в проекте с двумя одинаковыми узлами. Модуль TJA1050-I2C устроен иначе — I2C-интерфейс к CAN-контроллеру менее стандартизирован, точные имена функций уточняйте по документации вашей платы.

Логика кадра (идентификатор, приоритет, целостность) одинакова для обоих узлов — именно поэтому они могут обмениваться данными несмотря на разные внутренние интерфейсы.

Пошаговая сборка

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

  1. Узел 1 (MCP2515, SPI): CS → D10, SCK → D13, MOSI → D11, MISO → D12, VCC → 5V, GND → GND.
  2. Узел 2 (TJA1050, I2C): SDA → A4, SCL → A5, VCC → 5V или 3.3V по маркировке, GND → GND.
  3. CAN-H и CAN-L соединяют оба модуля напрямую, не перепутав полярность.
  4. Терминатор 120 Ом на каждом конце линии, если не встроен в модули.

Скетч (узел 1, MCP2515)

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить.

#include <SPI.h>
#include <mcp_can.h>

MCP_CAN CAN(10);

void setup() {
  Serial.begin(9600);
  while (CAN.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) delay(500);
  CAN.setMode(MCP_NORMAL);
}

void loop() {
  byte data[1] = {42};
  CAN.sendMsgBuf(0x100, 0, 1, data);
  delay(1000);
}
                

Скетч (узел 2, TJA1050 I2C)

// ВНИМАНИЕ: точные имена функций для вашего TJA1050-I2C модуля могут
// отличаться — менее стандартизированный интерфейс, чем MCP2515.
// Ниже ОБЩАЯ логика, не гарантированно точный API.

#include <Wire.h>
// #include <ваша_библиотека_TJA1050_I2C.h>

void setup() {
  Serial.begin(9600);
  Wire.begin();
  // инициализация по документации конкретной платы
}

void loop() {
  // псевдокод — замените на реальные вызовы библиотеки:
  // if (canMessageAvailable()) { ... }
  delay(100);
}
                

Библиотека mcp_can для MCP2515 — реальная и документированная. Для TJA1050-I2C используйте библиотеку из комплекта вашей платы — единого стандарта для таких мостов нет.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 🔊 простой усилитель звука на кла…🌆 автоматическое включение освещ… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу: 223 ₽ 201 ₽ (экономия 22 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина

Поиск


Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA