sfondo
Sto sviluppando un progetto che richiederà le modeste specifiche del microcontrollore di:
- 8 ADC a 12 bit, 10 kHz
- 1kB di RAM
- 48-QFN o ingombro ridotto
- Protocollo di comunicazione resistente al rumore e agli errori daisy chain a 20 kbps
I requisiti di elaborazione del segnale sono piuttosto bassi e la maggior parte può essere esportata nel processore principale del sistema. Le prime tre specifiche sono facili da soddisfare e possono essere eseguite per meno di $ 2 in quantità. Tuttavia, la comunicazione avverrà in un ambiente molto elettricamente rumoroso, quindi le reti vulnerabili al rumore come LIN e I2C sono fuori. Un ulteriore argomento contro LIN è che mi piacerebbe far funzionare il tutto a 5 V o 3,3 V e che i ricetrasmettitori LIN richiedano 12 V e quindi richiederebbero un regolatore o un filo extra per ogni scheda sensore. Inizialmente ho scelto CAN per questo compito. Tuttavia, i controller CAN aggiungono costi considerevoli e sono curioso di sapere se ciò può essere fatto nel software.
CAN Livello fisico
La specifica CAN definisce i livelli Data Link e Physical del modello di riferimento della rete OSI. Per implementare il livello fisico esistono molti circuiti integrati a 8 pin economici, come NXP TJA1040 / 50 , Maxim MAX3058 / 59 , Microchip MCP2551 e TI SN65HVD1050 . L'implementazione del livello fisico con convertitori D / A o amplificatori operazionali sarebbe difficile, se non impossibile, quindi questi circuiti integrati valgono $ 1 o meno e costano.
CAN Data Link / Protocol Layer
Per il livello Data Link, alcuni microcontrollori aggiungono i moduli del protocollo CAN ai livelli di comunicazione UART, I2C e SPI di base. Tuttavia, questi sono significativamente più costosi dei chip di base.
Studio del costo dei moduli del protocollo CAN
A sostegno di questa affermazione, ecco alcuni micro popolari nelle versioni CAN e non CAN, dal:
- ATmega16 - ATMEGA16M1 (con CAN): $ 3,87, ATMEGA168A (senza CAN): $ 3,23
- dsPIC - DSPIC33FJ64MC802 (con CAN): $ 6,14, DSPIC33FJ64GP202 (no CAN): $ 5,48
- PIC18 - PIC18F2480 (con CAN): $ 6,80, PIC18F24J10 (senza CAN): $ 2,10
- Cortex-M3 - STM32F103C4T6A (con CAN): $ 6,50, STM32F100C4T6B (no CAN): $ 2,73
Per essere onesti, ho confrontato solo microcontrollori con dimensioni di memoria equivalenti, tuttavia, molte delle versioni non CAN sono disponibili con dimensioni di memoria inferiori a un prezzo inferiore. I controller CAN esterni, come il Microchip MCP2515 , costano quasi $ 2, quindi è ovviamente più conveniente avere la CAN integrata nel microcontrollore se ne hai l'opzione.
È interessante notare che la parte ATmega è di gran lunga la parte equipaggiata con CAN più economica nell'inventario di Digikey.
Funzione del livello del protocollo CAN
Il modulo CAN presente nei microcontrollori dsPIC procede come segue:
Il modulo CAN bus è costituito da un motore di protocollo e da buffering / controllo dei messaggi. Il motore del protocollo CAN gestisce tutte le funzioni per la ricezione e la trasmissione di messaggi sul bus CAN. I messaggi vengono trasmessi caricando prima i registri dati appropriati. Lo stato e gli errori possono essere verificati leggendo i registri appropriati. Qualsiasi messaggio rilevato sul bus CAN viene verificato per errori e quindi confrontato con i filtri per vedere se deve essere ricevuto e memorizzato in uno dei registri di ricezione.
Questo sembra abbastanza fattibile nel software.
La domanda
È possibile utilizzare un livello di protocollo software per implementare le specifiche CAN solo con un microcontrollore UART economico e un ricetrasmettitore CAN? In tal caso, esistono implementazioni open source?
In alternativa, i ricetrasmettitori CAN possono essere utilizzati con UART per implementare un protocollo personalizzato? Sto bene con una topologia a master singolo; Capisco che l'arbitrato può essere difficile da ottenere in un protocollo personalizzato.