домой     карта сайта   

CAN Devices 

                               Оборудование для работы с CAN, LIN и другими сетями автомобиля 

                                           CAN-HACKER, AVR, STM32, Arduino, печатные платы

CAN-HACKER  /  Как подключиться к CAN  /  Arduino CAN шина

forsmartcar.ru

Arduino CAN шина

 Один из самых простых способов начать работать с CAN шиной - это использование Arduino совместно со специальным CAN bus шилдом. Ниже я опишу как макисмально быстро запустить CAN на Arduino.
Для этого примера я взял недорогой китайский клон Arduino  и такой же недорогой CANbus шилд

    

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

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

Важный момент:
В качестве сигнала CS (chip select) текущая версия библиотеки использует на плате Arduino цифровой вывод  D9 а первые ревизии CAN шилда используют D10, поэтому нужно будет на CAN шилде дорожку ведущую на порт D10 отрезать, и перепаять на D9.


Библиотека устанавливается стандартным для Arduino IDE методом, в меню Файл->Примеры->CAN bus shield master появятся отлаженные, готовые к употреблению примеры.
Выберем пример "send"

// demo: CAN-BUS Shield, send data
#include <mcp_can.h>
#include <SPI.h>

// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 9;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

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

    while (CAN_OK != CAN.begin(CAN_500KBPS))              // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");
}

unsigned char stmp[8] = {0, 1, 2, 3, 4, 5, 6, 7};
void loop()
{
    // send data:  id = 0x123, standrad frame, data len = 8, stmp: data buf
    CAN.sendMsgBuf(0x123, 0, 8, stmp);
    delay(100);                       // send data per 100ms
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

В этом примере мы  с интервалом 100мс отправляем пакет с постоянным ID=123 и восемью байтами данных 0,1,2,3,4,5,6,7
Все готово, компилируем и заливаем.
Код начинает работать сразу. Если посылки по CAN шине не летят, то на самой Arduino будет мигать светодиод а по RS232 будем передаваться сообщение об ошибке (нога TX Arduino)/

 

ВебСтолица.РУ: создай свой бесплатный сайт!  | Пожаловаться  
Движок: Amiro CMS