Будет ли работать сеть CAN Bus с 2 узлами Arduino/MCP2515?

Я хотел бы настроить сеть CAN из нескольких узлов, используя карты Arduino Pro Minis и MCP2515. Но я не могу заставить Receive работать.

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

long unsigned int  rxId;
unsigned char      len = 0;
unsigned char      rxBuf[8];
char               msgString[128];
#define  CAN0_INT  2                    // Set INT to pin 2
MCP_CAN            CAN0(10);            // Set CS to pin 10

void setup() {
    Serial.begin(115200);       
    //  Initialize MCP2515 running at 8MHz with a baudrate of 125kb/s
    //  and the masks and filters disabled.
    while (CAN_OK != CAN0.begin(MCP_ANY, CAN_125KBPS, MCP_8MHZ)) {
        Serial.println("CAN BUS Module Failed to Initialize.");
    } 
    Serial.println("MCP2515 Initialized Successfully!");
    CAN0.setMode(MCP_NORMAL);
    pinMode(CAN0_INT, INPUT);        // Configuring pin for /INT input
}

void loop() {
    if(!digitalRead(CAN0_INT)) {  // If CAN0_INT is low, read receive buffer
        CAN0.readMsgBuf(&rxId, &len, rxBuf);   // Read data: len = data length, buf = data byte(s)

        if((rxId & 0x80000000) == 0x80000000)  // Is ID standard (11 bits) or extended (29 bits)?
            sprintf(msgString, "Extended ID: 0x%.8lX  DLC: %1d  Data:", (rxId & 0x1FFFFFFF), len);
        else
            sprintf(msgString, "Standard ID: 0x%.3lX   DLC: %1d  Data:", rxId, len);
        Serial.print(msgString);

        if((rxId & 0x40000000) == 0x40000000) {    // Is message a remote request frame?
            sprintf(msgString, " REMOTE REQUEST FRAME");
            Serial.print(msgString);
        } else {
            for(byte i = 0; i<len; i++) {
                sprintf(msgString, " 0x%.2X", rxBuf[i]);
                Serial.print(msgString);
            }
        }        
        Serial.println();
    }
}

Однако все, что я получаю, это сообщения об ошибках, в том числе это:

Entering Configuration Mode Failure

Что мне здесь не хватает?


person Rick_CBR929RR    schedule 19.11.2017    source источник
comment
Что конкретно вы подразумеваете под сетью CAN? Обычное использование означает сеть кампуса, хотя я слышал, что это означает сеть с контролируемым доступом, но это не имеет смысла с вашим вопросом.   -  person Ron Maupin    schedule 19.11.2017
comment
Согласно Википедии, шина Controller Area Network (CAN) — это «стандарт автомобильной шины, позволяющий микроконтроллерам и устройствам взаимодействовать друг с другом внутри транспортного средства без главного компьютера». Эти устройства также можно назвать электронными блоками управления (ЭБУ). По сути, шина CAN представляет собой группу связанных ЭБУ в автомобиле, которые обмениваются данными с каждым на основе широковещательной передачи. Каждый ЭБУ перехватывает каждую трансляцию, но индивидуально решает, реагировать на нее или нет. (instructables.com/id/ )   -  person Rick_CBR929RR    schedule 19.11.2017
comment
ХОРОШО. Я хочу сказать, что вам нужно быть более конкретным, когда есть несколько значений. Вы должны отредактировать свой вопрос, чтобы сделать его более понятным.   -  person Ron Maupin    schedule 19.11.2017


Ответы (1)


Я заставил схему работать. 2-узловая шина CAN обменивается данными.
Я нашел этот сайт и внес пару изменений:

  1. Контакты MISI, MISO моего Arduino ProMini не были выровнены с выводами SI, SO на MCP2515.
  2. Я использовал библиотеку CAN_BUS_Shield.
person Rick_CBR929RR    schedule 20.11.2017