fundo
Estou desenvolvendo um projeto que exigirá as modestas especificações do microcontrolador de:
- 8 ADCs de 12 bits e 10kHz
- 1kB de RAM
- Tamanho de 48 QFN ou menor
- Protocolo de comunicação resistente a ruído e correção de erros de 20kbps, encadeado em série
Os requisitos de processamento de sinal são bastante baixos e a maioria pode ser exportada para o processador mestre no sistema. As três primeiras especificações são fáceis de atender e podem ser feitas por menos de US $ 2 em quantidade. No entanto, a comunicação estará acontecendo em um ambiente eletricamente barulhento, de modo que redes vulneráveis a ruído, como LIN e I2C, estão fora. Um argumento adicional contra o LIN é que eu gostaria de executar a coisa toda em 5V ou 3,3V, e os transceptores LIN exigem 12V e, portanto, exigiriam um regulador ou fio extra por placa de sensor. Inicialmente, escolhi o CAN para esta tarefa. No entanto, os controladores CAN adicionam um custo considerável, e estou curioso para saber se isso pode ser feito em software.
Camada física CAN
A especificação CAN define as camadas Data Link e Physical do modelo de referência de rede OSI. Existem muitos ICs baratos de 8 pinos, como o NXP TJA1040 / 50 , Maxim MAX3058 / 59 , Microchip MCP2551 e TI SN65HVD1050 para implementar a camada física. Implementar a camada física com conversores D / A ou amplificadores operacionais seria difícil, se não impossível, portanto esses ICs valem bem o valor de US $ 1 ou mais que custam.
Camada de protocolo / protocolo de dados CAN
Para a camada Data Link, alguns microcontroladores adicionam módulos de protocolo CAN às camadas básicas de comunicação UART, I2C e SPI. No entanto, estes são significativamente mais caros que os chips básicos.
Investigação do custo dos módulos do protocolo CAN
Para comprovar essa afirmação, aqui estão alguns micros populares nas versões CAN e não CAN, a partir de:
- ATmega16 - ATMEGA16M1 (com CAN): US $ 3,87, ATMEGA168A (sem CAN): US $ 3,23
- dsPIC - DSPIC33FJ64MC802 (com CAN): US $ 6,14, DSPIC33FJ64GP202 (sem CAN): US $ 5,48
- PIC18 - PIC18F2480 (com CAN): $ 6,80, PIC18F24J10 (sem CAN): $ 2,10
- Cortex-M3 - STM32F103C4T6A (com CAN): US $ 6,50, STM32F100C4T6B (sem CAN): US $ 2,73
Para ser justo, eu apenas comparei microcontroladores com tamanhos de memória equivalentes, no entanto, muitas das versões não CAN estão disponíveis com tamanhos de memória menores por menos. Controladores CAN externos, como o Microchip MCP2515 , custam quase US $ 2, portanto é obviamente mais econômico ter o CAN integrado ao microcontrolador, se você tiver a opção.
Curiosamente, a parte ATmega é de longe a parte mais barata equipada com CAN no inventário da Digikey.
Função da camada de protocolo CAN
O módulo CAN encontrado nos microcontroladores dsPIC faz o seguinte:
O módulo de barramento CAN consiste em um mecanismo de protocolo e buffer / controle de mensagem. O mecanismo do protocolo CAN gerencia todas as funções para receber e transmitir mensagens no barramento CAN. As mensagens são transmitidas carregando primeiro os registros de dados apropriados. Status e erros podem ser verificados lendo os registros apropriados. Qualquer mensagem detectada no barramento CAN é verificada quanto a erros e comparada com filtros para ver se deve ser recebida e armazenada em um dos registros de recebimento.
Isso parece bastante factível em software.
A questão
Uma camada de protocolo de software pode ser usada para implementar a especificação CAN apenas com um microcontrolador de baixo custo equipado com UART e um transceptor CAN? Em caso afirmativo, existem implementações de código aberto?
Como alternativa, os transceptores CAN podem ser usados com UARTs para implementar um protocolo personalizado? Eu estou bem com uma topologia de mestre único; Entendo que a arbitragem pode ser difícil de acertar em um protocolo personalizado.