Sensor de temperatura usando interface CAN do microcontrolador PIC

RESUMO:

Este projeto ajuda na compreensão dos insights da interface do protocolo CAN com o microcontrolador PIC. Controller Area Network ou protocolo CAN é uma metodologia de comunicação entre dispositivos eletrônicos como sistemas de gerenciamento de motor, controle de marcha, suspensão ativa, ABS, airbags, controle de iluminação, ar condicionado, travamento central etc. Para mais aprendizados, consulte este artigo.

Aqui você terá uma ideia sobre a programação do Microcontrolador PIC para fazer interface com o Controlador CAN (MCP2515) para atuar como um transceptor. Aqui são utilizados dois microcontroladores PIC16f887, um para detecção de temperatura utilizando LM35 e outro para visualização dos valores recebidos através do CAN BUS.

DESCRIÇÃO:

Pré-requisitos e equipamentos:

Você vai precisar do seguinte:

  1. Dois microcontroladores PIC16F887.

  2. Programador de microcontrolador PIC.

  3. Sensor de temperatura LM35.

  4. MikroC para PIC para a programação.

  5. Dois PODEM Tranciever.

O protocolo CAN é baseado em uma topologia de barramento e apenas dois fios são necessários para comunicação através de um barramento CAN. O barramento possui uma estrutura multimaster onde cada dispositivo do barramento pode enviar ou receber dados. Apenas um dispositivo pode enviar dados por vez enquanto todos os outros ouvem. Se dois ou mais dispositivos tentarem enviar dados ao mesmo tempo, aquele com maior prioridade poderá enviar seus dados enquanto os outros retornarão ao modo de recepção.

A figura abaixo mostra um barramento CAN com três nós. O protocolo CAN é baseado no protocolo CSMA/CD+AMP (Carrier-Sense Multiple Access/Collision Detection with Arbitration on Message Priority), que é semelhante ao protocolo usado em LAN Ethernet. transmitindo e espere

Visão geral da interface CAN

Fig. 1: Visão geral da interface CAN

um período aleatório de tempo antes de tentar enviar novamente. O protocolo CAN, entretanto, resolve o problema de colisão usando o princípio da arbitragem, onde apenas o nó de maior prioridade tem o direito de enviar seus dados. Existem basicamente dois tipos de protocolos CAN: 2.0A e 2.0B. CAN 2.0A é o padrão anterior com 11 bits de identificador, enquanto CAN 2.0B é o novo padrão estendido com 29 bits de identificador. Os controladores 2.0B são totalmente compatíveis com versões anteriores dos controladores 2.0A e podem receber e transmitir mensagens em qualquer formato. Existem dois tipos de controladores 2.0A. O primeiro é capaz de enviar e receber apenas mensagens 2.0A, e a recepção de uma mensagem 2.0B sinalizará um erro. O segundo tipo de controlador 2.0A (conhecido como passivo 2.0B) envia e recebe mensagens 2.0A, mas também confirma o recebimento de mensagens 2.0B e depois as ignora.

TÉRMINO DO CAN BUS:

Um barramento CAN é terminado para minimizar reflexões de sinal no barramento. A ISO-11898 exige que o barramento tenha impedância característica de 120 ohms. O barramento pode ser encerrado por um dos seguintes métodos:

  1. Rescisão padrão

  2. Rescisão dividida

  3. Terminação dividida tendenciosa

Na terminação padrão, método de terminação mais comum, um resistor de 120 ohms é usado em cada extremidade do barramento, conforme mostrado na Figura abaixo. Na terminação dividida, as extremidades do barramento são divididas e um único resistor de 60 ohms é usado conforme mostrado na Figura abaixo. A terminação dividida permite redução de emissão, e este método está ganhando popularidade. A terminação dividida polarizada é semelhante à terminação dividida, exceto que um circuito divisor de tensão e um capacitor são usados ​​em cada extremidade do barramento. Este método aumenta o desempenho EMC do barramento.

Visão geral dos diferentes tipos de terminação de barramento CAN

Fig. 2: Visão geral dos diferentes tipos de terminação do barramento CAN

Interface do microcontrolador PIC CAN:

Em geral, qualquer tipo de microcontrolador PIC pode ser usado em projetos baseados em barramento CAN, mas alguns microcontroladores PIC (por exemplo, PIC18F258) possuem módulos CAN integrados, o que pode simplificar o projeto de sistemas baseados em barramento CAN. Os microcontroladores sem módulos CAN integrados também podem ser usados ​​em aplicações de barramento CAN, mas são necessários hardware e software adicionais. A figura mostra o diagrama de blocos de uma aplicação de barramento CAN baseada em microcontrolador PIC, usando um microcontrolador tipo PIC16 ou PIC12 (por exemplo, PIC16F887) sem módulo CAN integrado. O microcontrolador é conectado ao barramento CAN usando um chip controlador CAN MCP2515 externo e um chip transceptor de barramento MCP2551 ou TJA1040CAN. Esta configuração é adequada para uma atualização rápida para um design existente usando qualquer microcontrolador PIC.

Para detalhes sobre microcontroladores PIC consulte este link e para detalhes sobre como usar MikroC para programar controladores pic consulte aqui.

Funções do MikroC CAN:

A linguagem mikroC fornece duas bibliotecas para aplicações de barramento CAN: a biblioteca para microcontroladores PIC com módulos CAN integrados e a biblioteca baseada no uso de um barramento SPI para microcontroladores PIC sem módulos CAN integrados.

As seguintes funções MikroC são fornecidas:

  • CANSetOperationMode

  • CANGetOperationMode

  • CANInicializar

  • CANSetBaudRAte

  • CANSetMask

  • Filtro CANSet

  • Pode ler

  • Pode escrever

Modo de operação CANSet:

A função CANSetOperationMode define o modo de operação CAN. O protótipo da função é:

voidCANSetOperationMode(modo char, char wait_flag)

O parâmetro wait_flag é 0 ou 0 x FF. Se for definido como 0 x FF, os blocos funcionais não retornarão até que o modo solicitado seja definido. Se for definido como 0, a função retornará como uma chamada sem bloqueio.

O modo pode ser um dos seguintes:

  • CAN_MODE_NORMAL Modo normal de operação

  • CAN_MODE_SLEEP Modo de operação de suspensão

  • CAN_MODE_LOOP Modo de operação de loopback

  • CAN_MODE_LISTEN Modo de operação somente escuta

  • CAN_MODE_CONFIG Modo de configuração de operação

CANGetOperationMode:

A função CANGetOperationMode retorna o modo de operação CAN atual. O protótipo da função é:

charCANGetOperationMode(void)

CANInicializar:

A função CANInitialize inicializa o módulo CAN. Todos os registros de máscara são redefinidos para 0 para permitir todas as mensagens. Após a execução desta função, o modo normal é definido. O protótipo da função é:

voidCANInitialize(char SJW, char BRP, char PHSEG1, char PHSEG2,

char PROPEG, char CAN_CONFIG_FLAGS)

onde,

SJW é a largura do salto de sincronização

BRP é o pré-escalador de taxa de transmissão

PHSEG1 é o parâmetro de temporização Phase_Seg1

PHSEG2 é o parâmetro de temporização Phase_Seg2

PROPSEG é o Prop_Seg

CAN_CONFIG_FLAGS pode ser um dos seguintes sinalizadores de configuração:

  • CAN_CONFIG_DEFAULT -Sinalizadores padrão

  • CAN_CONFIG_PHSEG2_PRG_ON -Use o valor PHSEG2 fornecido

  • CAN_CONFIG_PHSEG2_PRG_OFF-Use o máximo de PHSEG1 ou tempo de processamento de informações (IPT), o que for maior.

  • CAN_CONFIG_LINE_FILTER_ON -Use filtro de linha de barramento CAN para despertar

  • CAN_CONFIG_FILTER_OFF -Não use filtro de linha do barramento CAN

  • CAN_CONFIG_SAMPLE_ONCE -Barramento de amostra uma vez no ponto de amostragem

  • CAN_CONFIG_SAMPLE_THRICE – Barramento de amostra três vezes antes do ponto de amostragem

  • CAN_CONFIG_STD_MSG -Aceita apenas mensagens de identificador padrão

  • CAN_CONFIG_XTD_MSG -Aceita apenas mensagens de identificadores estendidos

  • CAN_CONFIG_DBL_BUFFER_ON -Use buffer duplo para receber dados

  • CAN_CONFIG_DBL_BUFFER_OFF -Não use buffer duplo

  • CAN_CONFIG_ALL_MSG -Aceite todas as mensagens, incluindo as inválidas

  • CAN_CONFIG_VALID_XTD_MSG -Aceita apenas mensagens válidas de identificador estendido

  • CAN_CONFIG_VALID_STD_MSG -Aceita apenas mensagens válidas de identificador padrão

  • CAN_CONFIG_ALL_VALID_MSG -Aceite todas as mensagens válidas, esses valores de configuração podem ser bit a bit AND'ed para formar valores de configuração complexos.

Taxa CANSetBaud:

A função CANSetBaudRate é usada para definir a taxa de transmissão do barramento CAN. O protótipo da função é:

voidCANSetBaudRate(char SJW, char BRP, char PHSEG1, char PHSEG2,

char PROPSEG, char CAN_CONFIG_FLAGS)

Os argumentos da função são como na função CANInitialize.

Máscara CANSet:

A função CANSetMask define a máscara para filtrar mensagens. O protótipo da função é:

voidCANSetMask(char CAN_MASK, valor longo, char CAN_CONFIGFLAGS)

CAN_MASK pode ser um dos seguintes:

  • CAN_MASK_B1 Recebe valor da máscara do buffer 1

  • CAN_MASK_B2 Receber valor de máscara do buffer 2

value é o valor do registrador de máscara. CAN_CONFIG_FLAGS pode ser CAN_CONFIG_XTD (mensagem estendida) ou CAN_CONFIG_STD (mensagem padrão).

Filtro CANSet:

A função CANSetFilter define valores de filtro. O protótipo da função é:

voidCANSetFilter(char CAN_FILTER, valor longo, char CAN_CONFIG_FLAGS)

CAN_FILTER pode ser um dos seguintes:

  • CAN_FILTER_B1_F1 Filtro 1 para buffer 1

  • CAN_FILTER_B1_F2 Filtro 2 para buffer 1

  • CAN_FILTER_B2_F1 Filtro 1 para buffer 2

  • CAN_FILTER_B2_F2 Filtro 2 para buffer 2

  • CAN_FILTER_B2_F3 Filtro 3 para buffer 2

  • CAN_FILTER_B2_F4 Filtro 4 para buffer 2

CAN_CONFIG_FLAGS pode ser CAN_CONFIG_XTD (mensagem estendida) ou CAN_CONFIG_STD (mensagem padrão).

Pode ler:

A função CANRead é usada para ler mensagens do barramento CAN. Se nenhuma mensagem estiver disponível, 0 será retornado. O protótipo da função é:

charCANRead(longo *id, char *dados, char *datalen, char *CAN_RX_MSG_FLAGS)

id é o identificador da mensagem CAN. Apenas 11 ou 29 bits podem ser usados ​​dependendo do tipo de mensagem (padrão ou estendida). data é uma matriz de bytes de até 8 onde os dados recebidos são armazenados. datalen é o comprimento dos dados recebidos (1 a 8).

CAN_RX_MSG_FLAGS pode ser um dos seguintes:

  • CAN_RX_FILTER_1 O filtro de buffer de recebimento 1 aceitou esta mensagem

  • CAN_RX_FILTER_2 O filtro de buffer de recebimento 2 aceitou esta mensagem

  • CAN_RX_FILTER_3 O filtro de buffer de recebimento 3 aceitou esta mensagem

  • CAN_RX_FILTER_4 O filtro de buffer de recebimento 4 aceitou esta mensagem

  • CAN_RX_FILTER_5 O filtro de buffer de recebimento 5 aceitou esta mensagem

  • CAN_RX_FILTER_6 O filtro de buffer de recebimento 6 aceitou esta mensagem

  • CAN_RX_OVERFLOW Ocorreu estouro de buffer de recebimento

  • CAN_RX_INVALID_MSG Mensagem inválida recebida

  • CAN_RX_XTD_FRAME Mensagem de identificador estendido recebida

  • CAN_RX_RTR_FRAME Mensagem de quadro RTR recebida

  • CAN_RX_DBL_BUFFERED Esta mensagem foi armazenada em buffer duplo

Esses sinalizadores podem ser AND bit a bit, se desejado.

Pode escrever:

A função CANWrite é usada para enviar uma mensagem ao barramento CAN. Um zero será retornado se a mensagem não puder ser enfileirada (buffer cheio). O protótipo da função é:

charCANWrite(id longo, char *dados, char datalen, char CAN_TX_MSG_FLAGS)

id é o identificador da mensagem CAN. Apenas 11 ou 29 bits podem ser usados ​​dependendo do tipo de mensagem (padrão ou estendida). data é uma matriz de bytes de até 8 onde são armazenados os dados a serem enviados. datalen é o comprimento dos dados (1 a 8).

CAN_TX_MSG_FLAGS pode ser um dos seguintes:

  • CAN_TX_PRIORITY_0 Prioridade de transmissão 0

  • CAN_TX_PRIORITY_1 Prioridade de transmissão 1

  • CAN_TX_PRIORITY_2 Prioridade de transmissão 2

  • CAN_TX_PRIORITY_3 Prioridade de transmissão 3

  • CAN_TX_STD_FRAME Mensagem de identificador padrão

  • CAN_TX_XTD_FRAME Mensagem de identificador estendido

  • CAN_TX_NO_RTR_FRAME Mensagem não RTR

  • Mensagem CAN_TX_RTR_FRAME RTR

Esses sinalizadores podem ser AND bit a bit, se desejado.

Programação do barramento CAN:

Para operar o microcontrolador PIC18F258 no barramento CAN, execute os seguintes passos:

  • Configure as direções das portas de E/S do barramento CAN (RB2 e RB3)

  • Inicialize o módulo CAN (CANInitialize)

  • Defina o módulo CAN para o modo CONFIG (CANSetOperationMode)

  • Defina os registros de máscara (CANSetMask)

  • Defina os registros de filtro (CANSetFilter)

  • Defina o módulo CAN para o modo normal (CANSetOperationMode)

  • Gravar/ler dados (CANWrite/CANRead)

Implementação do barramento CAN do sensor de temperatura:

A seguir está um projeto simples baseado em barramento CAN de dois nós. O diagrama de blocos do projeto é mostrado na Figura. O sistema é composto por dois nós CAN. Nó DISPLAY que lê a temperatura do barramento CAN e a exibe em um LCD. Este processo é repetido continuamente. O outro nó denominado nó COLLECTOR lê a temperatura de um sensor de temperatura LM35.

Representação em bloco da interface do microcontrolador PIC16F887 no barramento CAN

Fig. 3: Representação em bloco da interface do microcontrolador PIC16F887 no barramento CAN

Processador de exibição:

O processador DISPLAY consiste em um microcontrolador PIC18F887 com um módulo CAN MCP2515 e um chip transceptor TJA1040. O PIC18F887 é operado a partir de um cristal de 8MHz. A entrada MCLR está conectada a um botão de reset externo. E o MCP2515 possui interface SPI que é usada para conectar usando pinos SPI no PIC16f887. Os pinos CANH e CANL do chip transceptor estão conectados ao barramento CAN. O LCD está conectado ao PORTB do PIC18F887 para exibir os valores de temperatura.

Processador COLETOR:

O processador COLLECTOR consiste em um microcontrolador PIC18F887 com um módulo CAN MCP2515 e um chip transceptor TJA1040. O PIC18F887 é operado a partir de um cristal de 8MHz. A entrada MCLR está conectada a um botão de reset externo. O sensor de temperatura semicondutor tipo LM35DZ é conectado à entrada analógica AN0 do microcontrolador. O sensor gera uma tensão analógica diretamente proporcional à temperatura medida, a saída é de 10mV/C. Por exemplo, a 20 graus Celsius a tensão de saída é 200mV. As saídas CANH e CANL deste chip são conectadas diretamente a um cabo trançado que termina no barramento CAN. O TJA1040 é um chip de 8 pinos que suporta taxas de dados de até 1Mb/s. O chip pode controlar até 112 nós. Uma tensão de referência igual a VDD/2 é emitida pelo pino 5 do chip.

A listagem de programas está dividida em duas partes: o programa DISPLAY e o programa COLLECTOR.

Para obter detalhes sobre como usar o MikroC para programar controladores pic, consulte aqui.

O funcionamento do sistema é o seguinte:

  • O processador DISPLAY que aguarda o envio da mensagem de temperatura atual do processador COLLECTOR através do barramento CAN.

  • O processador COLLECTOR mede a temperatura, formata-a e envia para o processador DISPLAY através do barramento CAN.

  • O processador DISPLAY lê a mensagem do barramento CAN e a exibe no LCD que se repete a cada segundo.

Montagem de ferragens:

Imagem do circuito receptor baseado em microcontrolador PIC16F887 em um lado do barramento CAN

Fig. 4: Imagem do circuito receptor baseado em microcontrolador PIC16F887 em um lado do barramento CAN

Protótipo de comunicação PIC16F887 para PIC16F887 via barramento CAN

Fig. 5: Protótipo de Comunicação PIC16F887 para PIC16F887 via CAN Bus

Diagramas de circuito

Diagrama de circuito-PIC16F887-PIC16F887-Microcontrolador-Protótipo de comunicação sobre barramento CAN

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.