Como criar uma rede CAN Bus com módulos MCP2515 e Arduino

  • O protocolo CAN permite uma comunicação eficiente em ambientes industriais e automotivos.
  • O módulo MCP2515 é uma solução ideal para conectar o Arduino a uma rede CAN.
  • O barramento CAN usa dois cabos (CAN_H e CAN_L) para transferência confiável de dados de longa distância.
  • Este tutorial irá guiá-lo passo a passo na configuração e uso de uma rede CAN com Arduino.

carros conectados

Se você adora tecnologia e costuma fazer experimentos com Arduino, este artigo irá fasciná-lo. Hoje veremos como configurar sua própria rede CAN utilizando o módulo MCP2515 e Arduino. Você descobrirá como comunicar entre diferentes dispositivos em uma rede CAN de maneira eficiente e confiável. Este tipo de rede é amplamente utilizado em automóveis e outras aplicações industriais.

Esteja você realizando um projeto automotivo ou precisando de comunicação entre vários microcontroladores, o barramento CAN é perfeito para aplicações onde confiabilidade e desempenho são essenciais. E com o módulo MCP2515 é muito fácil integrar o Arduino nesta rede. Então, prepare-se para conhecer a fundo o protocolo CAN, configuração de hardware e a programação necessária.

O que é barramento CAN?

O barramento CAN (Controller Area Network) é um protocolo de comunicação serial que permite que diferentes dispositivos se comuniquem entre si. Foi desenvolvido em 1986 pela Bosch e foi projetado especificamente para aplicações automotivas, embora seu uso tenha se espalhado para outros setores, como a automação industrial. Neste tipo de rede, os dispositivos conectados enviam e recebem mensagens sem a necessidade de um host ou controlador central, tornando-o um protocolo muito eficiente para ambientes onde a comunicação e a confiabilidade são fundamentais.

Um carro moderno contém mais de 70 dispositivos de controle, conhecidos como ECUs (Unidades de Controle Eletrônico), conectados entre si através do barramento CAN. Graças a este protocolo, as ECUs trocam informações fundamentais para o funcionamento do automóvel, como dados de velocidade do veículo ou posição do acelerador.

Topologia e sinais do barramento CAN

A topologia do sistema CAN é do tipo multimestre, o que significa que qualquer dispositivo conectado à rede pode assumir o controle do barramento para enviar mensagens. Todos os nós ouvem essas mensagens e decidem se devem respondê-las ou ignorá-las.

Do ponto de vista físico, a comunicação é realizada através de dois cabos: CAN_H y EU POSSO. Esses cabos são trançados para minimizar a interferência eletromagnética. Além disso, as extremidades da rede devem ser terminadas com resistores de 120 ohms para evitar reflexões no sinal.

Sinalização CAN

O sistema CAN usa dois estados lógicos para comunicação: dominante y recessivo. No estado dominante, CAN_H tem uma tensão de 3.5V e CAN_L tem uma tensão de 1.5V. Neste estado, um '0' lógico é transmitido. Por outro lado, no estado recessivo, ambos os fios possuem tensão de 2.5V, indicando que o barramento está livre e um '1' lógico pode ser transmitido. É esta mudança de tensão entre os dois cabos que permite a transmissão de dados na rede.

O módulo MCP2515

El Módulo MCP2515 É uma solução ideal para adicionar conectividade CAN ao seu Arduino. É composto por um controlador CAN (o MCP2515, que segue a especificação CAN 2.0B) e um transceptor CAN (o TJA1050, que faz a comunicação física). Esses dois chips funcionam juntos para que você possa enviar e receber mensagens CAN com seu Arduino através da interface SPI.

O MCP2515 suporta mensagens padrão (11 bits) e estendidas (29 bits) e tem a capacidade de filtrar mensagens indesejadas por meio do uso de máscaras e filtros, o que descarrega o trabalho do microcontrolador. É uma excelente opção para projetos que necessitam de comunicações confiáveis, seja em ambientes ruidosos ou em longas distâncias.

Componentes do módulo MCP2515

O módulo MCP2515 inclui as seguintes peças:

  • Controlador CAN MCP2515: Responsável por executar todas as funções do protocolo CAN, como transmissão e recebimento de mensagens.
  • TJA1050 PODE Transceptor: Responsável por converter dados do controlador CAN em sinais para o barramento CAN físico e vice-versa.
  • Pinos de comunicação SPI: Utilizando os pinos SCK, MOSI, MISO e CS, o MCP2515 se comunica com o Arduino através de sua interface SPI.
  • Terminais de barramento CAN: Este pequeno bloco terminal de parafuso está marcado com 'H' e 'L'. CAN_H e CAN_L devem estar conectados aos cabos de rede CAN.

Como configurar uma rede CAN com Arduino

Com o módulo MCP2515, configurar uma rede CAN é relativamente simples. Abaixo explico como conectar o módulo à sua placa Arduino e como configurar o software.

Conexões do Módulo MCP2515

Para começar, conecte os pinos SPI do seu Arduino da seguinte forma:

  • MISO (saída do módulo) para o pino D12 do Arduino
  • MOSI (entrada do módulo) para pino D11 do Arduino
  • SCK (Relógio) para Arduino pino D13
  • CS (Seleção de chip) para Arduino pino D10

Você também precisará conectar o pino INT do MCP2515 a um pino digital do Arduino, por exemplo D2, pois esse pino é usado para lidar com interrupções quando uma mensagem válida é recebida.

Não se esqueça de alimentar seu módulo. O pino VCC deve ser conectado a 5V e o pino GND ao terra.

Quanto aos terminais do barramento CAN, conecte CAN_H a CAN_H e CAN_L a CAN_L entre os diferentes nós que deseja interligar. Lembre-se de que o barramento CAN deve terminar em ambas as extremidades com um resistor de 120 ohms.

Programação Arduino

Depois de conectar os nós, é hora de programar seu Arduino para se comunicar com o barramento CAN através do módulo MCP2515. A melhor maneira de fazer isso é usando uma biblioteca adequada, como a biblioteca 'mcp2515'.

Primeiro, você precisa instalar esta biblioteca. Se você estiver usando o Arduino IDE, vá para Sketch > Incluir Biblioteca > Gerenciar Bibliotecas. Procure por 'mcp2515' e selecione a opção de instalação.

Com a biblioteca instalada, você pode escrever o código para seu nó transmissor e seu nó receptor. Abaixo mostro exemplos básicos para ambos.

Exemplo de código para nó transmissor

Este código envia uma mensagem 'Hello World' pelo barramento CAN a cada segundo.

#include void setup() { Serial.begin(9600); while (!Serial); Serial.println("Nodo transmisor CAN"); if (!CAN.begin(500E3)) { Serial.println("Error al iniciar CAN"); while (1); }}void loop() { Serial.print("Enviando mensaje... "); CAN.beginPacket(0x12); CAN.write('H'); CAN.write('o'); CAN.write('l'); CAN.write('a'); CAN.write(' '); CAN.write('M'); CAN.write('u'); CAN.write('n'); CAN.write('d'); CAN.write('o'); CAN.endPacket(); Serial.println("Mensaje enviado correctamente"); delay(1000);}

Exemplo de código para nó receptor

Este código recebe mensagens do barramento CAN e as exibe no monitor serial.

#include void setup() { Serial.begin(9600); while (!Serial); Serial.println("Nodo receptor CAN"); if (!CAN.begin(500E3)) { Serial.println("Error al iniciar CAN"); while (1); } CAN.onReceive(onReceive);}void loop() {}void onReceive(int packetSize) { Serial.print("Mensaje recibido con ID: 0x"); Serial.print(CAN.packetId(), HEX); Serial.print(" | Tamaño: "); Serial.print(packetSize); Serial.print(" | Datos: "); while (CAN.available()) { Serial.print((char)CAN.read()); } Serial.println();}

Velocidades e distâncias em uma rede CAN

O barramento CAN permite comunicação em várias velocidades. A velocidade máxima suportada pelo MCP2515 é de 1 Mbit/s, mas o comprimento do barramento limita a velocidade de transmissão. Por exemplo, a 1 Mbit/s, o comprimento máximo do barramento é de aproximadamente 40 metros. Porém, se precisar percorrer distâncias maiores, você pode reduzir sua velocidade. A 125 kbit/s, o comprimento do barramento pode chegar a 500 metros.

É importante planejar bem a rede e utilizar a velocidade adequada ao comprimento do barramento e ao ambiente em que será utilizado, pois ambientes ruidosos podem afetar a qualidade da comunicação.

Lembre-se também de usar par trançado para cabos CAN_H e CAN_L, pois isso ajuda a reduzir a interferência eletromagnética e melhora a confiabilidade da rede.

Rede CAN com vários nós

Se você deseja formar uma rede com vários nós, o processo é muito semelhante. A única coisa que você precisa fazer é conectar todos os nós em paralelo às linhas CAN_H e CAN_L. Lembre-se também de colocar resistores de terminação somente nas extremidades da linha principal, e não nos nós intermediários.

Em uma rede mais complexa, você pode ter vários nós que atuam como transmissores e receptores. Cada nó adiciona carga mínima ao barramento, permitindo que até 112 nós sejam conectados em uma rede CAN sem impactar significativamente o desempenho.

Esteja você usando um barramento CAN em um automóvel para ler dados do motor ou em um projeto industrial para comunicar vários sensores, o módulo MCP2515 torna fácil e eficiente adicionar essa funcionalidade. Este tipo de rede é ideal para aplicações onde a baixa latência e a confiabilidade na transmissão de dados são essenciais.


Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.