O CAN Bus é um padrão de comunicação muito aplicado em sistemas veiculares e como em outros tipos de equipamentos, também existem projetos sendo desenvolvidos com Arduino e ESP32 para veículos.
A aplicação do CAN bus não está restrita a veículos, podendo ser aplicada onde for necessário.
Neste post queremos fazer um linha de comunicação entre CPB32 e CPBUno que poderá ser facilmente replicada com módulos de ESP32 e Arduinos Compatíveis.
Sumário
Existem muitos materiais explicando as aplicações, características físicas e de softwares, então vamos nos deter a fazer funcionar o CAN BUS neste artigo.
Abaixo temos um circuito comumente usado no mundo do Arduino para CAN Bus.
Temos 2 formas de encontrar este hardware no mercado, conforme figura abaixo:
Ambas funcionam bem, mas a primeira é mais simples de montar na CPB e também nos Arduinos Uno e Mega.
Um cuidado importante é que a esquerda tem cristal de 16MHz e a da direita de 8MHz e isto deve ser informado no momento da programação, sendo possível usar inclusive uma combinação entre elas, então sempre fique atento ao cristal das placas.
1. HARDWARE
A topologia que implementaremos tem...
Para este teste, usamos um cabo de 8 metros modelo: Cabo CCI 50 1 Par.
Um ponto importante também é que para alguns projetos, será importante usar a CPB32 que é baseada no ESP32 e usa 3,3 volts de alimentação, sendo limitada a 3,6 volts de máximo.
Teríamos 2 formas de compatibilizar um hardware alimentado por 5volts com um hardware de 3,3, a primeira é utilizar conversores de nível lógico nos pinos interconectados, e outra maneira e que será a opção da Crescer, já que o objetivo é prototipar um possível futuro produto e isto é o que faríamos, vamos estudar os CIs que compõem a placa e ver como eles podem ser alimentados.
Fazendo esta avaliação, encontramos que o MCP2515 pode ser alimentado em 3,3 e 5 Volts então não tem problema usar no ESP32, já o MCP2551 da placa preta assim como o TJA1050 da placa azul somente podem usar 5V.
Sendo assim, sempre que formos usar estas placas com a CPB32, faremos as seguintes adaptações, para esta:
Primeiro cortaremos a alimentação do MCP2551 ou TJA1050, sinalizado no traço vermelho...
Depois precisaremos ter um 5 volts disponível para colocar no ponto abaixo, podendo ser no pad do capacitor mesmo:
No caso da CPB32 utilizei o ponto Vin e GND da barra de pinos de Shields e liguei em um conversor que converte 12v para 5v, aí soldei um fio do 5v para o conversor CAN.
E se for esta:
Primeiro faça um corte conforme a linha vermelha abaixo e depois meça continuidade, já que não testei este corte ainda, não pode ter continuidade do 5v até o pino 3 do MCP2551 ou TJA1050.
Para depois também soldar os 5volts no capacitor abaixo:
E por fiz, ambas as placas tem uma estratégia para o resistor de 120 Ohm para os extremos da rede CAN, e neste teste deixamos ambos com o resistor ligado.
2. SOFTWARE
Estando com hardware pronto, vamos para o código, usamos a biblioteca do link https://github.com/autowp/arduino-mcp2515 tanto para CPBnano como a CPB32.
E partimos ambos os códigos do exemplo CAN_write, nossos códigos estão mais comentados e podem ser obtidos em nosso repositório de exemplos.
Neste link tem todos nossos códigos de exemplos:
Neste aqui tem o CAN da CPB Nano ou Uno:
Neste tem da CPB32:
Quais são os pontos de atenção nos códigos?
O primeiro é o pino que ativa o CAN, que na CPB Nano e Uno é o 10, já na CPB32 é o pino 5.
Depois temos que deixar a mesma velocidade de comunicação para os 2 mas temos que ter atenção no cristal que está na placa de CAN.
Se tudo foi feito corretamente, é para funcionar parecido como o nosso vídeo:
Avalie-nos no Google para que possamos alcançar e auxiliar cada vez mais pessoas a fazerem seus projetos e produtos! Contamos com você!