Como usar o módulo de barramento MCP2515 CAN com Arduino

How to Use the MCP2515 CAN Bus Module with Arduino

O MCP2515 é um módulo de barramento CAN (Rede de Área do Controlador) amplamente utilizada para comunicação automotiva e industrial. Ele permite que o Arduino interage com os sistemas baseados em CAN para enviar e receber dados com eficiência. Este tutorial o guiará através da configuração e usando o módulo MCP2515 com Arduino.

O que você precisará

  1. Módulo de barramento de lata mcp2515
  2. Board Arduino (por exemplo, Uno, Mega, Nano)
  3. Dispositivo compatível com BUS ou outro módulo MCP2515
  4. Fios de jumper
  5. Pão de pão (opcional)
  6. Um computador com o Arduino IDE instalado

Etapa 1: Compreendendo o módulo MCP2515

O módulo MCP2515 usa o controlador CAN MCP2515 e o TJA1050 pode transceptor. O módulo se comunica com o Arduino através da interface SPI.

MCP2515 PILOUT

Alfinete Função
VCC Fonte de alimentação (5V)
Gnd Chão
Cs CHIP SELECT
ENTÃO Saída de dados SPI
SI Entrada de dados SPI
Sck Relógio SPI
Int Saída de interrupção

Etapa 2: Fiação do MCP2515 para Arduino

Abaixo está o guia de fiação para conectar o módulo MCP2515 a um Arduino Uno:

MCP2515 PIN Pino Arduino
VCC 5V
Gnd Gnd
Cs Pino 10
ENTÃO Pino 12
SI Pino 11
Sck Pino 13
Int Pino 2

Observação: Para outras placas do Arduino, verifique se os pinos do SPI correspondem à pinalização da sua placa específica.

Etapa 3: Instale a biblioteca necessária

O MCP_CAN A biblioteca simplifica a interação com o módulo MCP2515.

Etapas para instalar a biblioteca MCP_Can:

  1. Abra o Arduino IDE.
  2. Vá para Esboço > Inclua biblioteca > Gerenciar bibliotecas.
  3. Pesquise "MCP_CAN" no gerente da biblioteca.
  4. Clique Instalar.

Etapa 4: Faça o upload do código

Código do transmissor (enviando dados no barramento CAN):

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

#define CAN_CS 10
MCP_CAN CAN(CAN_CS); // Set CS pin for MCP2515

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

  if (CAN.begin(MCP_ANY, 500000, MCP_8MHZ) == CAN_OK) {
    Serial.println("CAN Bus Initialized Successfully");
  } else {
    Serial.println("CAN Bus Initialization Failed");
    while (1);
  }

  CAN.setMode(MCP_NORMAL);
  Serial.println("CAN Bus set to Normal Mode");
}

void loop() {
  unsigned char data[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};

  if (CAN.sendMsgBuf(0x100, 0, 8, data) == CAN_OK) {
    Serial.println("Message Sent Successfully");
  } else {
    Serial.println("Error Sending Message");
  }

  delay(1000); // Send data every second
}

Código do receptor (Lendo dados do barramento CAN):

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

#define CAN_CS 10
MCP_CAN CAN(CAN_CS); // Set CS pin for MCP2515

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

  if (CAN.begin(MCP_ANY, 500000, MCP_8MHZ) == CAN_OK) {
    Serial.println("CAN Bus Initialized Successfully");
  } else {
    Serial.println("CAN Bus Initialization Failed");
    while (1);
  }

  CAN.setMode(MCP_NORMAL);
  Serial.println("CAN Bus set to Normal Mode");
}

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

  if (CAN.checkReceive() == CAN_MSGAVAIL) {
    CAN.readMsgBuf(&len, buf);
    unsigned long id = CAN.getCanId();

    Serial.print("Message ID: 0x");
    Serial.println(id, HEX);

    Serial.print("Data: ");
    for (int i = 0; i < len; i++) {
      Serial.print(buf[i], HEX);
      Serial.print(" ");
    }
    Serial.println();
  }
}

Etapa 5: teste a configuração

  1. Conecte o módulo MCP2515 ao seu Arduino, conforme descrito na Etapa 2.
  2. Carregue o código do transmissor para um Arduino e o código do receptor para outro Arduino.
  3. Conecte os pinos CAN_H e CAN_L de ambos os módulos MCP2515 para estabelecer o barramento CAN.
  4. Abra o monitor serial em ambos os arduinos e defina a taxa de transmissão para 115200.
  5. No receptor Arduino, você deve ver as mensagens enviadas pelo transmissor Arduino.

Solução de problemas

  • Nenhum dado recebido: Verifique as conexões CAN_H e CAN_L entre os módulos.
  • Falha na inicialização: Verifique se as conexões SPI e o CS PIN correspondem à sua configuração.
  • Comunicação irregular: Verifique se os dois módulos usam a mesma taxa de transmissão (500 kbps neste exemplo).

Aplicações do módulo de barramento MCP2515 CAN

  1. Diagnóstico do veículo (OBD-II)
  2. Sistemas de automação industrial
  3. Comunicação de robótica
  4. Dispositivos IoT com redes de barramento CAN

Conclusão

Você configurou com sucesso o módulo de barramento MCP2515 CAN com Arduino para enviar e receber dados. Este módulo é incrivelmente versátil para aplicações que exigem comunicação confiável em um barramento CAN. Experimente diferentes IDs de mensagem e cargas de dados para explorar todo o seu potencial!

Deixe um comentário

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.