Protocollo bus CAN.
CAN (Controller Area Network) - è uno standard industriale che consente di combinare vari nodi, meccanismi, sensori, ecc. in un'unica rete. Il protocollo è broadcast, il che significa che tutti i dispositivi nella rete CAN ricevono tutti i segnali trasmessi sul bus. La modalità di trasferimento dei dati è sequenziale, mentre i byte dei messaggi formano frame di un certo tipo. Lo standard è stato originariamente sviluppato per l'industria automobilistica. L'idea principale era quella di evitare di utilizzare un numero enorme di cavi che collegano i numerosi componenti dell'auto. E il protocollo CAN ha permesso di raggiungere questo obiettivo. Da allora, CAN è stato il meccanismo principale per l'interconnessione di dispositivi, nodi e sensori del veicolo. Inoltre, l'interfaccia CAN viene utilizzata attivamente nei sistemi di automazione industriale e domotica.
Le principali caratteristiche del protocollo CAN:
- Affidabilità e sicurezza molto elevate.
- Ogni messaggio ha la sua priorità.
- Meccanismo di rilevamento degli errori implementato.
- Invio automatico di messaggi recapitati con un errore.
- La già menzionata natura broadcast della trasmissione dei dati.
- La possibilità della presenza di più dispositivi master nella stessa rete.
- Ampia gamma di velocità operative.
- Elevata resistenza dell'interfaccia alle interferenze.
- Inoltre, esiste un meccanismo per rilevare i nodi "guasti" con la successiva rimozione di tali nodi dalla rete.
Livello fisico del protocollo.
Lo standard CAN di Bosch non regola il livello fisico della trasmissione dei dati, quindi è possibile utilizzare opzioni completamente diverse, ad esempio la fibra ottica. In pratica, il collegamento più utilizzato è una linea differenziale a due fili (twisted pair). La lunghezza massima approssimativa della linea per diverse velocità dati è:
Velocità Lunghezza della linea
Una condizione importante per il funzionamento del bus è la presenza di resistenze di terminazione alle estremità del twisted pair, chiamate anche terminatori, con una resistenza di 120ohm (Figura 1).

Figura 1
A differenza di molti altri protocolli, CAN non consiglia di descrivere i bit di dati come "zero logico" e "uno logico". Qui vengono utilizzati i concetti di bit dominanti e recessivi.
I segnali che vengono trasmessi sul twisted pair sono chiamati CAN_H e CAN_L (High e Low). Lo stato dominante corrisponde al caso in cui il potenziale del segnale CAN_H è superiore al potenziale CAN_L. Recessivo - quando i potenziali sono uguali (la differenza di potenziale non supera la deviazione consentita 0,5V). Ad esempio, quando il bus CAN è in modalità inattiva, entrambe le linee portano 2,5 V. Quando i bit di dati vengono trasmessi, la linea CAN_H va a 3,75 V e la linea CAN_L scende a 1,25 V, generando così un differenziale di 2,5 V tra le linee. Il bus CAN è collegato a tutti i componenti di rete tramite questi due fili. Ogni nodo di rete ha un identificatore univoco. Tutti i CAN nodi sul bus sono effettivamente in parallelo, motivo per cui tutti i nodi vedono tutti i dati, sempre. Un nodo risponde solo quando rileva il proprio identificatore. I singoli nodi possono essere rimossi dalla rete senza influire sugli altri nodi.
L'alimentazione CAN può essere fornita tramite il bus CAN. Oppure è possibile predisporre separatamente un alimentatore per i moduli bus CAN. Il cablaggio di alimentazione può essere completamente separato dalle linee CAN bus, con il risultato di utilizzare due cavi a 2 fili per la rete, oppure può essere integrato nello stesso cavo delle linee CAN bus, ottenendo un unico cavo a 4 fili.
La natura delle comunicazioni del bus CAN consente a tutti i moduli di trasmettere e ricevere dati sul bus. Qualsiasi modulo può trasmettere dati, che tutti gli altri moduli ricevono. È molto importante che la larghezza di banda del bus CAN sia assegnata prima ai sistemi più critici per la sicurezza. Ai nodi viene in genere assegnato uno dei diversi livelli di priorità. Un processo noto come arbitrato decide la priorità di qualsiasi messaggio.
Per maggiori informazioni fare riferimento alla scheda tecnica MCP2515 che contiene anche una guida dettagliata.
Modulo controller bus CAN MCP2515.

Caratteristiche di alimentazione:
- Tensione di alimentazione: 5V DC
- Corrente di funzionamento: 5mA
- Corrente di standby: 1μΑ
Pinout.
- INT - il pin INT sul MCP2515 è collegato al pin di interrupt del controller. Ogni volta che appare un nuovo frame, il pin INT MCP2515 genera un impulso BASSO, che viene catturato dal pin di interrupt del controller, dopodiché i dati vengono ricevuti, elaborati e visualizzati sul display.
- SCK - SPI clock pin.
- SI(MOSI) - SPI Serial data In pin.
- SO(MISO) - SPI Serial data Out pin.
- CS - Chip select pin.
- GND - è il pin commune.
- VCC - è il pin di alimentazione. Collegalo solo all'alimentazione a 5V.
Uno, Nano, Mini, altri basati su controller 328 - 2,3.
Mega, Mega2560, MegaADK - 2, 3, 18, 19, 20, 21 ( i pin 20 e 21 non sono disponibili per l'uso per gli interrupt mentre sono usati per la comunicazione I2C).
Micro, Leonardo, altri basati su controller 32u4 - 0, 1, 2, 3, 7.
Zero - tutti i pin digitali, tranne pin 4.
Schede della famiglia MKR - 0, 1, 4, 5, 6, 7, 8, 9, A1, A2.
Nano 33IoT - 2, 3, 9, 10, 11, 13, A1, A5, A7.
Nano 33 BLE, Nano 33 BLE Sense - tutti i pin.
Due - tutti i pin digitali.
101 - tutti i pin digitali.
Per altri tipi di controllori consultare la scheda tecnica.
Questo particolare modulo si basa su MCP2515 CAN Controller IC (U1) e TJA1050 CAN Transceiver IC (U2). IC MCP2515 è un controller CAN autonomo e dispone di un'interfaccia SPI integrata per la comunicazione con i microcontrollori (J4). Venendo al IC TJA1050, funge da interfaccia tra IC del controller CAN MCP2515 e il bus CAN fisico. La scheda ha un oscillatore da 8 MHz. È disponibile anche la versione a 16 MHz. È possibile collegare un ponticello (J1) che fornirà una terminazione da 120ohm. Il ponticello si collega al primo e all'ultimo dispositivo connesso al bus CAN. P2(J3) e il connettore dove possono essere fissati i fili per comunicare con altri moduli CAN.
Di seguito è riportato lo schema del modulo CAN MCP2515 (Figura 3).

Figura 3
Utilizzare il modulo CAN Bus MCP2515 con un controller.
Interfacciamo il modulo CAN Bus MCP2515 con il controller e testiamo il protocollo di comunicazione CAN nel programma FLProg. Trasmetteremo i dati del sensore DS18B20 su un bus CAN con l'aiuto di una coppia di scheda Arduino UNO e modulo CAN MCP2515.
Schema di collegamento (Figura 4).

Figura 4
File FLProg.