O que é procolo CAN?
O Protocolo CAN trata-se de um protocolo de comunicação serial e síncrono, sendo criado pela Robert Bosch GmbH, com intuito de interconectar e facilitar a comunicação entre os mais diversos sistemas presentes dentro dos veículos da Bosch, dispositivos tais quais controle de câmbio, ABS, airbag e gerenciamento do motor.
No início uma conexão ponto a ponto era feita entre esses dispositivos para que a comunicação ocorresse, porém, conforme o avanço da tecnologia, o uso cada vez maior da eletrônica nos sistemas automobilísticos e a necessidade de comunicação mais veloz e com dados cada vez maiores, cabos mais complexos, com maior extensão e com mais conectores passaram a ser necessários para a intercomunicação dos dispositivos dos automóveis. Assim, para evitar problemas de custo e confiabilidade, foi desenvolvida uma conexão por barramento serial, que continha especificidades próprias devido a seu uso em automóveis, nascendo então o protocolo CAN.
Como comentado anteriormente, o CAN é um protocolo de comunicação serial síncrono, sendo o sincronismo entre os dispositivos conectados feito em relação ao início de cada mensagem lançada ao barramento, comumente ocorrendo em intervalos de tempo predeterminados e fixos. Além do mais, é um protocolo que segue o conceito multi-mestre, podendo atuar tanto como mestre quanto como escravo, o que dependerá da aplicação e da mensagem atual, que segue o conceito multicast, ou seja, o envio das mensagens é feito para todos os módulos conectados ao CAN.
O CAN utiliza o protocolo CSMA/CD (Carrier-sense multiple access with collision detection), o que garante que o conflito de mensagens não aconteça, utilizando uma arbitragem bit a bit. A ligação elétrica é feita através de um par diferencial, e o barramento pode assumir dois estados distintos: dominante e recessivo . Um bit dominante equivale ao nível lógico 0, enquanto um recessivo equivale ao nível lógico 1, utilizando uma lógica Wired-AND. Esta lógica implica que os bits dominantes sobreponham os bits recessivos em qualquer ocasião.
Os dois fios são denominados CAN_H (CAN HIGH) e CAN_L (CAN LOW). Comumente utiliza-se um resistor de 120 Ohms ao fim do terminal de cada fio trançado para terminação do barramento. Como comentado, um sinal diferencial é utilizado para transmissão de mensagens, consequentemente, o CAN passa a ser resistente contra interferências eletromagnéticas, porém, para uma redução ainda maior desta interferência, pode-se proteger as linhas de comunicação com uma malha blindada, o que também reduzirá a irradiação eletromagnética proveniente do próprio barramento CAN, problema especialmente encontrado quando existem altas taxas de transmissão no sistema.
Frame CAN
Cada mensagem de dados (data frame) CAN Standard é composta por uma quantidade de bits de dados, de 0 a 64, e outros bits necessários para que a comunicação ocorra corretamente:
Campo | Tamanho | Função |
Início do frame | 1 bit | Indica o início de uma transmissão |
Identificador | 11 bits | Usado na arbitragem e identificação do destino da mensagem |
RTR (Remote Transmission Request) | 1 bit | Sempre 0 para data frames e 1 para remote request frames |
IDE (Identifier extension bit) | 1 bit | Sempre 0 no CAN Standard |
Bit reservado | 1 bit | Sempre 0 no CAN Standard |
DLC (Data Length Code) | 4 bits | Indica a quantidade de bytes transmitidos no campo de dados (0 a 8) |
Dados | 0 a 64 bits | Os dados que de fato serão transmitidos, separados em no máximo 8 grupos de 8 bits |
CRC (Verificação Cíclica de Redundância) | 16 bits | A CRC garante a integridade dos dados transmitidos |
Campo de ACK (acknowledgment) | 1 bit | O transmissor envia um bit recessivo e qualquer receptor pode enviar um bit dominante para confirmar a recepção. |
EOF (End of Frame) | 7 bits | Indica o final do frame, e é sempre 1 |
IFS (Inter-frame Spacing) | 3 bits | Bits para separar um frame do frame seguinte, sempre 1 |
Arbitragem do barramento
Devido ao funcionamento do protocolo e a lógica Wired-AND, mensagens com o identificador de valor mais baixo sempre terão prioridade na transmissão. Podemos exemplificar esse método de arbitragem com a situação representada abaixo:
Nesse exemplo, as mensagens têm seus IDs comparados bit a bit, iguais até o bit 3. No bit 4, a mensagem 2 tem o bit 0 (dominante) enquanto a mensagem 1 tem o bit 1 (recessivo). O resultado desse “conflito” é o bit dominante, e portanto nesse instante a placa que envia a mensagem 1 para a transmissão e aguarda a placa da mensagem 2 terminar o envio para tentar novamente.
Essa técnica de arbitragem garante a ordem de prioridade de envio das mensagens, sistemas de menor importância têm IDs mais altos e irão perder a arbitragem quando tentarem usar o barramento ao mesmo tempo que sistemas de alta prioridade. No Cheetah E-Racing a escolha dos IDs das mensagens é feita cuidadosamente para garantir certas operações cruciais mesmo quando o barramento está sendo muito utilizado.
Integração de sistemas
O projeto de sistemas embarcados do Cheetah E-Racing utiliza o CAN para garantir a comunicação entre os diversos componentes necessários para o funcionamento do veículo elétrico. O diagrama abaixo representa as ligações realizadas e os dados que trafegam pela rede construída:
O barramento é terminado com os resistores de 120 ohms na placa de telemetria frontal e no BMS, localizados em pontos opostos do carro. Todas as placas são conectadas ao barramento com um cabo de par trançado blindado para aumentar a resistência à interferência eletromagnética. A rede CAN do Cheetah E-Racing opera a uma taxa de 500kbps e interliga desde componentes essenciais como acelerador e sensor de pressão de freios até sensores de alto nível como GPS e acelerômetro.
Placas de aquisição de dados
Para conectar as placas desenvolvidas pela equipe no barramento é necessário hardware dedicado para o protocolo CAN. Alguns microcontroladores como o STM32F103C8T6 possuem um controlador CAN integrado, e necessitam apenas de um transceiver CAN para converter o sinal single-ended (CANRX, CANTX) que sai do microcontrolador para o par diferencial CANH, CANL usado no barramento. Todas as placas desenvolvidas utilizam o TJA1050 da NXP como transceiver. Já microcontroladores que não possuem o controlador CAN integrado, como o ATmega328p, precisam ser conectados a um controlador externo. Utilizamos o MCP2515 da Microchip, é um controlador bem documentado e com interface SPI que quando pareado a um transceiver (também usamos o TJA1050 para essa aplicação) fornece capabilidade CAN para quase qualquer microcontrolador com suporte ao protocolo SPI.
Inversor de tração elétrica
O inversor de tração elétrica usado para fornecer potência ao motor do veículo é um CVW300 fabricado pela empresa brasileira WEG. Esse inversor possui um controlador lógico programável integrado capaz de se comunicar via CAN com outros dispositivos, e usamos essa função para enviar a posição do pedal do acelerador, que é obtida diretamente dos sensores localizados na frente do veículo. Além dessa informação crucial, usamos a conexão CAN para enviar outros dados como o botão de ready to drive pressão na linha de freios traseira. O inversor também fornece dados de telemetria para o barramento, informações como a temperatura dos componentes internos, rotação, corrente e tensão na saída são coletadas pelas placas de aquisição do veículo e armazenadas ou transmitidas para acompanhamento em tempo real do status do carro.
Sistema de monitoramento das baterias
O sistema de monitoramento das baterias (BMS) utilizado pela equipe é um Orion BMS versão 1 fabricado pela empresa de mesmo nome. Sua principal função é garantir a integridade e segurança das células que compõem a bateria de tração do carro. Utilizamos o protocolo CAN para receber os dados coletados pelo BMS e tomar as ações apropriadas caso algo esteja fora do padrão.
Mensagens transmitidas
Todos os sensores do veículo transmitem seus dados em variáveis do tipo inteiro sem sinal de 16 bits (exceto a posição do GPS que precisa de um inteiro de 32 bits para representar a latitude e longitude corretamente). Portanto, cada frame CAN é capaz de transmitir dados de 4 sensores, agrupando 2 grupos de 8 bits da mensagem para representar um conjunto de 16 bits no formato Big-Endian. Esse formato também é utilizado pelo inversor CVW300 e pelo Orion BMS, o que garante a padronização das informações que trafegam pelo barramento CAN e facilita o código de interpretação dos dados nas placas de aquisição. A tabela abaixo lista todas as informações que o sistema de telemetria do Cheetah E-Racing envia através do CAN. assim como o ID que representa a ordem de prioridade definida pela equipe:
ID | Origem | Campo 1 | Campo 2 | Campo 3 | Campo 4 |
0x00 | Telemetria Frontal | TPS 1 (SA1) | TPS 2 (SA2) | Pressão dos freios (SA76) | Flags Inversor (Especial) |
0x01 | Roda Frontal Esquerda | Temperatura Roda (SA10) | Temperatura Roda (SA11) | Rotação (SA5) | N/A |
0x02 | Roda Frontal Direita | Temperatura Roda (SA8) | Temperatura Roda (SA9) | Rotação (SA4) | N/A |
0x03 | Roda Traseira Esquerda | Temperatura Roda (SA14) | Temperatura Roda (SA15) | Rotação (SA7) | N/A |
0x04 | Roda Traseira Direita | Temperatura Roda (SA12) | Temperatura Roda (SA13) | Rotação (SA6) | N/A |
0x05 | Telemetria Frontal | SD1 + SD2 + SD17 | Volante (SA16) | Pressão de freios (SA78) | Pressão de freios (SA79) |
0x06 | Circuito de Segurança | SD3 … SD10 | IMD PWM (SA71) | Setpoint Cebolinha (SA72) | Setpoint Hall (SA73) |
0x07 | Circuito de Segurança | Cebolinha (SA74) | Sensor Hall (SA75) | Estado do Self Test (SA77) | N/A |
0x08 | BMS | Corrente (SA31) | Tensão Instantânea (SA32) | Tensão de C.Aberto (SA33) | State of Charge (SA34) |
0x09 | BMS | S State of Charge (SA35) | Capacidade Restante (SA36) | Health (SA37) | Maior Temperatura (SA38) |
0xA | BMS | Menor Temperatura (SA39) | Temperatura Média (SA40) | Temperatura Interna (SA41) | Maior Tensão (SA42) |
0xB | BMS | Menor Tensão (SA43) | Tensão Média (SA44) | Maior Resistência (SA45) | Menor Resistência (SA46) |
0xC | BMS | Resistência Média (SA47) | IDs Temperatura (SA48) | IDs Tensão (SA49) | IDs Resistência (SA50) |
0xD | BMS | Fan Speed (SA51) | Tensão de entrada (SA52) | Isolamento (SA53) | ADC1 (SA54) |
0xE | Inversor | RPM (SA56) | Corrente (SA57) | Frequência (SA58) | Estado (SA59) |
0xF | Inversor | Tensão saída (SA60) | Velocidade (SA61) | Torque (SA62) | Temperatura FET1 (SA63) |
0x10 | Inversor | Temperatura FET2 (SA64) | Temperatura Interna (SA65) | Sobrecarga (SA66) | Alarme (SA67) |
0x11 | Inversor | Falha Atual (SA68) | Falha Anterior (SA69) | N/A | N/A |
Se você gostou desse conteúdo, confira nosso post anterior sobre o Sistema de Telemetria de um Fórmula Elétrico, onde mostramos como funciona a telemetria do protótipo CE-21.
Esse post é resultado da parceria da MakerHero com a Cheetah E-Racing. Curtiu o conteúdo? Então deixe seu comentário abaixo! E não esqueça de acompanhar a Cheetah E-Racing nas redes sociais.