Подключение модуля MCP2515 к Arduino

27-02-2020, 18:42 1 комментариев

Модуль 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

Давайте рассмотрим принципиальную схему подключения.

Для реализации несложного проекта нам понадобится такое «железо»:

  1. CAN контроллер MCP2515 – 2 шт.
  2. Плата Arduino (Uno, Nano или Mega) – 2шт.
  3. Макетная плата.
  4. Соединительные провода.

Подключение двух плат

Еще более простая схема сборки:

Подключение одной платы

Для прошивки и облегчения процесса программирования рекомендуем использовать специализированное ПО - CAN_BUS_Shield. Эту библиотеку необходимо скачать и инсталлировать, а именно разархивировать содержимое следует в каталог библиотек среды Arduino IDE.

https://github.com/Seeed-Studio/CAN_BUS_Shield

Еще один популярный (альтернативный) вариант - MCP_CAN_lib

https://github.com/coryjfowler/MCP_CAN_lib

Зальем 2 скетча (под код передатчика и приемника CAN):

Первый скетч:


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

const int spiCSPin = 10;
int ledHIGH    = 1;
int ledLOW     = 0;

MCP_CAN CAN(spiCSPin);

void setup()
{
    Serial.begin(115200);

    while (CAN_OK != CAN.begin(CAN_500KBPS))
    {
        Serial.println("CAN BUS init Failed");
        delay(100);
    }
    Serial.println("CAN BUS Shield Init OK!");
}

unsigned char stmp[8] = {ledHIGH, 1, 2, 3, ledLOW, 5, 6, 7};
    
void loop()
{   
  Serial.println("In loop");
  CAN.sendMsgBuf(0x43, 0, 8, stmp);
  delay(1000);
}

Второй скетч:


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

const int spiCSPin = 10;
const int ledPin = 2;
boolean ledON = 1;

MCP_CAN CAN(spiCSPin);

void setup()
{
    Serial.begin(115200);
    pinMode(ledPin,OUTPUT);

    while (CAN_OK != CAN.begin(CAN_500KBPS))
    {
        Serial.println("CAN BUS Init Failed");
        delay(100);
    }
    Serial.println("CAN BUS  Init OK!");
}


void loop()
{
    unsigned char len = 0;
    unsigned char buf[8];

    if(CAN_MSGAVAIL == CAN.checkReceive())
    {
        CAN.readMsgBuf(&len, buf);

        unsigned long canId = CAN.getCanId();

        Serial.println("-----------------------------");
        Serial.print("Data from ID: 0x");
        Serial.println(canId, HEX);

        for(int i = 0; i<len; i++)
        {
            Serial.print(buf[i]);
            Serial.print("\t");
            if(ledON && i==0)
            {

                digitalWrite(ledPin, buf[i]);
                ledON = 0;
                delay(500);
            }
            else if((!(ledON)) && i==4)
            {

                digitalWrite(ledPin, buf[i]);
                ledON = 1;
            }
        }
        Serial.println();
    }
}

Как вы наверняка успели отметить, мы использовали еще один софт – библиотеку SPI (уже для управления интерфейсом). Проверьте ее наличие у себя в приложении!

Изучайте Arduino, выбирайте интересные проекты и развивайтесь в этом направлении. До скорой встречи!

Поделись в социальных сетях:
О авторе
Калугин Антон

Программист микроконтроллеров с 8-ми летним стажем, работал в таких компаниях как IBM, ASUS, Microsoft.

В комментариях с радостью отвечу на ваши вопросы.

Все статьи автора
Похожие новости

GSM модуль NEOWAY M590 – один из самых простых и бюджетных контроллеров, с помощью которого можно совершать звонки, принимать ∕ отправлять SMS-сообщения, а...

Сегодня поговорим о том, как воплотить в жизнь подключение FPM10A к Arduino, что это за модуль, где используется, каковы параметры его работы и т.д. Речь идет...

Модуль энкодер KY-040 является электромеханическим устройством, а точнее - датчиком угла поворота и вращения оси различных девайсов. Непосредственно сам прибор...

Подключение джойстика к Arduino позволит просто и эффективно обмениваться информацией между человеком и электронными устройствами (компьютером, ноутбуком, тем...

Дисплейно-клавиатурный модуль на микросхеме TM1638 – очень полезная покупка для любителей конструирования, проектирования и робототехники на базе Arduino....

1 комментария
  1. thcc
    7 декабря 2021 19:32 thcc

    Некоторые не всем очевидные вещи не упомянуты - например, требовательность к напряжению питания 1050-ки https://www.youtube.com/watch?v=4dpo_MQQDVg

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