Integração de sistemas usando protocolo CAN Deixe um comentário

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:

Diagrama das ligações realizadas e os dados que trafegam pela rede construída
Diagrama das 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.

Faça seu comentário

Acesse sua conta e participe