Este artigo tem como objetivo fazer com que os leitores explorem como fazer a interface do CAN Bus com o Arduino, que é usado na comunicação de sensores, atuadores e controladores em um carro.
Este projeto ajuda a compreender os insights da interface do protocolo CAN com o Arduino. Controller Area Network ou protocolo CAN é uma metodologia de comunicação entre diversos dispositivos eletrônicos como sistemas de gerenciamento de motor, controle de marcha, suspensão ativa, ABS, controle de iluminação, ar condicionado, airbags, travamento central etc. Para mais aprendizados, consulte este artigo.
Aqui você terá uma ideia sobre a programação do Arduino para fazer interface com o Controlador CAN (MCP2515) para atuar como um transceptor.
DESCRIÇÃO:
Pré-requisitos e equipamentos:
Você precisará do seguinte:
-
Duas placas Arduino ou clone do Arduino (aqui está um guia se você precisar)
-
Um módulo Bluetooth 5v TTL-UART.
-
Arduino IDE para a programação.
-
Dois MCP2515 PODEm Tranciever.
Características MCP2515 PODE Transiever:
-
Implementa CAN V2.0B em até 1 Mb/s
-
Interface SPI de até 10 MHz
-
Dados padrão (11 bits) e estendidos (29 bits) e quadros remotos
-
Dois buffers de recebimento com armazenamento de mensagens priorizado
-
Dois indicadores LED
Demonstração:
Fig. 1: Protótipo de circuitos transmissores e receptores baseados em Arduino para comunicação pela interface CAN
1. Baixe o arquivo de código da biblioteca CAN-BUS para Arduino 1.0 e descompacte-o no diretório de bibliotecas da pasta Arduino IDE. Para a configuração do meu computador, está neste diretório
Bibliotecas XXXarduino-1.0.1
Depois de copiar os arquivos, o diretório
XXXarduino-1.0.1bibliotecasDHT
2. Abra o Arduino-1.0 e navegue até Exemplos onde você encontrará exemplos: recebe_blink, recebe_check, recebe_interrupção, Enviar, Send_blink. Aqui usaremos send e receiver_check para verificar nosso barramento CAN.
Fig. 2: Captura de tela da navegação para o código de exemplo do receptor CAN no Arduino IDE
3. Carregar Envie exemplos para uma placa Arduino. Escolha a placa navegando até: Ferramentas -> Porta serial -> COMX.
Nota: Lembre-se de qual placa você selecionou como nó de “envio” e qual placa você selecionou como nó de “recebimento”.
4. Abra o “Serial Monitor” selecionando a porta Com que você selecionou para o receptor, você receberá a mensagem predefinida “0 1 2 3 4 5 6 7” que é enviada do nó “send”. Isso pode ser visto na imagem a seguir.
Fig. 3: Captura de tela da porta serial do Arduino recebendo mensagens predefinidas pela interface CAN
Funções na biblioteca CAN:
1. Defina a taxa de transmissão
Para inicializar a taxa de transmissão do sistema CAN Bus, use as seguintes funções.
As taxas de transmissão disponíveis são:
CAN_5KBPS, CAN_10KBPS, CAN_20KBPS, CAN_40KBPS, CAN_50KBPS, CAN_80KBPS, CAN_100KBPS, CAN_125KBPS, CAN_200KBPS, CAN_250KBPS, CAN_500KBPS e CAN_1000KBPS
2. Verifique Receber
O MCP2515 possui dois modos de verificação de recebimento, um é Polling, onde o código verifica o quadro recebido e o outro modo é o modo de interrupção, onde o pino de interrupção separado é usado para notificar o quadro recebido.
A seguir está o método Polling para obter o quadro recebido.
INT8U MCP_CAN::checkReceive(void);
A função retornará 1 se um quadro for recebido e 0 se nada for recebido.
3. Obtenha o CAN ID
Se você quiser saber o CAN ID do nó remetente quando uma mensagem for recebida, você pode usar a seguinte função.
INT32U MCP_CAN::getCanId(void)
4. Enviar dados
A função abaixo é enviar dados para o barramento:
CAN.sendMsgBuf (ID INT8U, ramal INT8U, len INT8U, data_buf);
Onde,
“eu ia” fornece CAN ID dos nós emissores.
“ext” '0' significa quadro padrão. '1' significa quadro estendido.
“len” fornece o comprimento deste quadro.
“dados_buf” é o conteúdo principal desta mensagem.
Por exemplo, no exemplo 'enviar', temos:
caractere não assinado stmp(8) = {0, 1, 2, 3, 4, 5, 6, 7};
CAN.sendMsgBuf(0x00, 0, 8, stmp); //envia a mensagem 'stmp' para o barramento e informa aos outros dispositivos que este é um quadro padrão de 0x00.
5. Receba dados
A seguinte função é usada para receber dados do barramento:
CAN.readMsgBuf (unsigned char len, unsigned char buf);
“len” fornece o comprimento dos dados.
“bom” é o conteúdo principal desta mensagem.
Fig. 4: Protótipo de circuito transmissor CAN baseado em Arduino projetado em uma placa de ensaio
Fig. 5: Protótipo de circuito receptor CAN baseado em Arduino projetado em uma placa de ensaio
Diagramas de circuito
circuito_30 |
Vídeo do projeto