1.
In questo lavoro è stata considerata la possibilità di utilizzare nel controllo di un
sistema gestito da un microprocessore l’utilizzo di un sistema di comunicazione , per
permettere il controllo dello stesso sistema con l’utilizzo di più microprocessori .
Nella maggior parte dei microprocessori esiste gia un’interfaccia di comunicazione
seriale, la quale però permette solo un collegamento tra due dispositivi , scopo del
lavoro è progettare un sistema che gestisca la comunicazione fra quanti più
dispositivi sia possibile .
Nel campo automobilistico , data la necessità di controllare svariati sensori in
un’unica automobile , viene utilizzato dalle maggiori case automobilistiche il sistema
di comunicazione chiamato CAN ( Controlled Area Network ) . Visto la crescita
della sua diffusione in campo industriale si è pensato di utilizzarlo per lo scopo
prefisso .
La scelta è dovuta pure alla sua facilità di connessione , dato che l’inserimento nella
linea fisica di componenti per la trasmissione è quanto di più semplice e immediato ,
inoltre permette un esteso range di velocità di trasmissione , arrivando come velocità
limite a 1 Mbit/s . Altre sue proprietà di indubbia utilità è l’utilizzo per la
trasmissione di una semplice linea bifilare in rame , corredata di un controllo
accurato sugli eventuali errori di trasmissione presenti nei messaggi che vengono
scambiati nella comunicazione .
Come materiale di consultazione e approfondimento sull’argomento si sono utilizzati
vari data sheet e note applicative dei componenti dedicati al CAN già presenti nel
mercato e si è trovato in Internet il sito della CIA ( CAN In Automation ) ,
un’associazione raggruppante un insieme di utenti e di fornitori di prodotti CAN
nella quale è presente molto materiale esplicativo sul protocollo .
Una volta quindi deciso il protocollo di comunicazione , trovato del materiale a
riguardo , si è passato al lavoro vero e proprio , che consiste nel progettare un
interfaccia hardware tra microprocessore e canale fisico di comunicazione CAN ,
scrivere un insieme di funzioni per la comunicazione e rendere quanto più semplice
l’utilizzo di tale progetto anche da parte di coloro che pur non conoscendo il CAN
vorrebberro utilizzarlo .
Per quanto concerne la parte fisica si sono utilizzati componenti già presenti nel
mercato e inglobati in un unico stampato lasciando per quanto fosse possibile
disponibile ogni possibilità di configurazione . La parte di gestione della
comunicazione è stata scritta in linguaggio C dato che oramai la maggior parte dei
microprocessori utilizza tale linguaggio , inoltre il programma è strutturato in
maniera tale da poter essere utilizzato da svariati microprocessori solo cambiando
qualche riga di codice specifica del componente utilizzato .
La parte di inizializzazione del sistema è stata affidata ad un programma in ambiente
Windows con un’interfaccia utente molto semplice , che segue l’inizializzazione
passo passo e descrive ampiamente i parametri da inserire nel sistema . Alla fine ci si
trova di fronte ad un pacchetto software per l’utilizzo immediato del sistema . Si è
poi sviluppato un insieme di funzioni , utilizzanti la comunicazione CAN , capaci di
gestire il controllo di un sistema con l’utilizzo di più microprocessori ; mentre le
funzioni di comunicazione CAN restano di valotre generale queste ultime dipendono
molto dal sistema che si sta utilizzando e possono servire come esempio di utilizzo .
Ma entrando nei particolari si descriva in maniera schematica la struttura dei vari
capitoli :
Nel primo capitolo vengono descritte le principali proprietà del CAN .
Nel secondo capitolo viene descritto il progetto vero e proprio dell’interfaccia tra
microprocessore e CAN bus , sia nella sua parte fisica che nella sua parte software ,
inoltre è descritto l'utilizzo del programma in ambiente Windows per
l’inizializzazione del sistema .
Nel terzo capitolo è descritto l’utilizzo dell’interfaccia nel controllo di due sistemi ,
confrontando il CAN con un altro sistema di comunicazione e con un controllo a
singolo microprocessore .
Nel quarto capitolo viene descritto in maniera approfondita e specifica il protocollo
CAN nela sua interezza .
Nelle appendici si trovano in esteso i programmi in linguaggio C sviluppati nel
progetto e qualche pagina dei data sheet dei componenti utilizzati nel progetto .
2.
2.1 CENNI SUL PROTOCOLLO CAN
Il CAN è un protocollo di comunicazione seriale sviluppato per la prima volta dalla
Bosch. La nascita e lo sviluppo del protocollo avviene nell’industria automobilistica
dalla necessità di collegare sempre più dispositivi di controllo in un'automobile ,
cercando però di non aumentare in maniera proporzionale il numero di cavi e
connessioni per non incidere sul peso totale dell’autoveicolo e sulla complessità del
sistema. Serviva inoltre un sistema di connessione molto flessibile così da introdurre
senza troppe fatiche la presenza di nuovi nodi di comunicazione e messaggi da
trasmettere, dato che l’impiego di sensori nel campo automobilistico è sempre più in
costante aumento. La scelta di una comunicazione su bus fisico seriale, vale a dire
con nodi collegati uno dopo l’altro su una stessa linea di trasmissione, è stata quindi
immediata.
Tabella 2.1 Elenco di dispositivi di controllo presenti in un’automobile
controllo delle sospensioni
airbag
ABS (Anti Block System)
ASC (Acceleration Skid Control)
gestione gas di scarico (regolazione della carburazione)
messa in fase del motore
scatola del cambio
regolazione automatica di sedili, specchietti, luci, ecc.
regolazione del ventilatore
chiusura porte
tensionatura delle cinture
comunicazione mobile (GSM, ...)
supporti alla navigazione (GPS, ...)
radio, tv, videoregistratori, ecc.
Oltre a tali necessità, legate alla possibilità di collegare un gran numero di
componenti e sensori, c’è da risolvere il problema “ ambientale “, difatti il sistema di
comunicazione è sistemato in un ambiente molto rumoroso come quello vicino ad un
motore a scoppio. Il CAN risolve la difficoltà con l’ausilio di una ridondanza nel
messaggio tale da ridurre la probabilità d'errore rispetto ad un messaggio senza alcun
controllo del 4.7e-11 e di individuare la presenza in un messaggio fino a cinque
errori di trasmissione.
Un ridotto esempio di quantità di dispositivi di controllo presenti su un'automobile di
media cilindrata è elencato nella tabella 2.1 .
Data la robustezza alle interferenze elettromagnetiche e la facilità di connessione, il
CAN bus viene sempre più usato anche nel campo industriale , sono nati difatti vari
protocolli di gestione derivanti dal CAN e specifici per un dato campo
d'applicazione.
Dato non trascurabile è il costo di tale struttura che deve essere contenuto e non
essere la parte preponderante di tutto l’autoveicolo. Fortunatamente il mercato è
ricco di componenti dedicati al CAN, portando una riduzione dei costi e una grande
scelta senza alcun problema d'incomunicabilità dato che il protocollo CAN risulta
unico e ben definito nella sua parte fondamentale. Il protocollo è stato codificato
nella normativa ISO11898.
Si veda nella tabella 2.2 un elenco parziale dei settori in cui il protocollo CAN è già
utilizzato :
Tabella 2.2 Elenco di settori in cui è utilizzato il protocollo CAN
Trasporto di persone o di cose
Controllo del trasporto pubblico
Macchinari mobili
Controllo di sistemi industriali
Sistemi automatici per la costruzione edile
Network embedded
Sistemi legati alla medicina
Simulatori di volo
Fisica delle altre energie
ecc.
Si vuole ora elencare brevemente un insieme delle proprietà principali del protocollo
CAN , seguite da una breve descrizione , informazioni più complete e specifiche si
trovano nel proseguio del capitolo .
1) Priorità nei messaggi : ogni messaggio ha un suo identificatore che stabilisce la
priorità nella trasmissione, dato che ogni nodo utilizza lo stesso bus fisico.
2) Flessibilità di configurazione : è permessa qualsiasi tipo di connessione al bus,
inoltre ogni oggetto può essere attaccato e staccato dal bus senza alcuna modifica del
sistema
3) Multicast : il messaggio arriva contemporaneamente a tutti i nodi, sta ad ognuno
di questi, leggendo ed interpretando l’identificatore, stabilire se leggere e sfruttare il
messaggio o non considerarlo.
4) Multimaster : il sistema non presenta un nodo master, mentre gli altri sono slave,
ma semplicemente di volta in volta diventa master il nodo che sta trasmettendo
qualche messaggio sul bus ( i messaggi a più alta priorità sono trasmessi prima )
5) Scoperta e segnalazione degli errori : la scoperta avviene essenzialmente
attraverso la ridondanza aggiunta al messaggio, la segnalazione di un errore avviene
attraverso il bus e subito dopo la scoperta dell’errore.
6) Ritrasmissione del messaggio con errore fino all'avvenuta ricezione da parte dei
nodi di un messaggio senza alcun errore rilevabile.
7) Distinzione tra errori : sono considerati in modo diverso gli errori dovuti a fatti
temporanei e gli errori permanenti. Nel caso d'errori permanenti dovuti a guasto di
un nodo, il protocollo toglie automaticamente il nodo dalla comunicazione senza
bisogno di mettere mano fisicamente al bus, viceversa nel caso di un errore
temporaneo il nodo può ancora trasmettere.
2.2 CONCETTI FONDAMENTALI SUL CAN
Per avere un’idea di base sulle funzionalità e sul meccanismo di funzionamento del
protocollo CAN si sono descritti i concetti fondamentali con l’ausilio di qualche
schema per la comprensione .Il tipo di comunicazione utilizzato dal CAN viene
denominato seriale , sia rispetto al messaggio sia rispetto alle connessioni fisiche dei
nodi interessati alla comunicazione.
Comunicazione seriale rispetto al messaggio significa che il messaggio non è
trasmesso tutto insieme ma bit per bit a catena sulla stessa linea di trasmissione.
Difatti il protocollo CAN utilizza un'unica linea di trasmissione composta nel caso
più semplice da due fili elettrici e quindi permette la trasmissione di un solo bit per
volta ; il messaggio diventa quindi una sequenza ordinata di bit . La comunicazione
seriale comporta una presenza ridotta al minimo delle connessioni fisiche tra nodo e
nodo, permettendo una riduzione del numero di cablaggi e di connessioni necessari
alla comunicazione. Difatti il CAN è nato in campo automobilistico dove è
importante ridurre al minimo l’ingombro e il peso totale di tutte le connessioni
utilizzate nella gestione del veicolo. Questa scelta comporta una ridotta velocità di
trasmissione dei dati ; difatti un canale costituito da n linee di trasmissione al posto
di una necessariamente riesce a trasmettere n volte più messaggi della linea unica
nello stesso tempo, ma la velocità massima del protocollo CAN, che è di 1 Mbit/s,
nella maggior parte degli utilizzi è più che sufficiente.
Il protocollo CAN è anche un tipo di comunicazione seriale rispetto alle
connessioni , significa che tutti i nodi sono attaccati ad un unico bus di
comunicazione, come se le connessioni avvenissero in maniera “seriale” lungo tale
bus. Solitamente negli altri tipi di comunicazione da un nodo principale denominato
host si diramano tutte le connessioni dirette a tutti gli altri nodi , mentre nel CAN
dall’unico bus fisico partono le connessioni verso tutti i nodi del sistema . Mentre nel
primo caso è permesso solo una comunicazioni dirette tra il nodo host e quelli slave e
solo una comunicazione indiretta tra due nodi qualsiasi , nel CAN ogni nodo può
comunicare ad un qualsiasi altro nodo in maniera diretta servendosi del bus di
comunicazione. Il pregio più evidente è la riduzione della lunghezza delle
connessioni del sistema, difatti non servono più tutte le connessioni tra l’host e i nodi
del sistema , ma solo un'unica linea di trasmissione (chiamata bus di comunicazione)
che parte da un nodo qualsiasi e colleghi in serie tutti gli altri nodi. Si veda nella
figura 1.1 una rappresentazione schematica della comunicazione seriale rispetto alle
connessioni . Il cambio di topologia porta però ad una complessità di gestione
dell’accesso dei vari nodi al bus di comunicazione ; se difatti può comunicare
sull’unico bus un solo nodo per volta occorre un insieme di regole per decidere quali
nodi ( o messaggi ) abbiano la priorità nell’utilizzo del bus per la comunicazione .
Solitamente questa gestione porta alla perdita di potere di trasmissione, vale a dire
che non è possibile che nel bus avvenga la trasmissione continua di messaggi ma una
parte del tempo è necessario sia persa per decidere quale nodo ha la priorità nella
trasmissione. Fortunatamente nel CAN non si ha perdita di tempo grazie al sistema di
trasmissione binario di bit “recessivi” e di bit “dominanti” come sarà descritto nel
proseguimento della descrizione .
•
Figura 2.1 Esempio di comunicazione seriale
Mentre nella maggior parte dei sistemi di comunicazione c’è la presenza di una linea
di comunicazione nella quale è trasmesso il sincronismo, chiamato per lo più
CLOCK, costituito da una sequenza di bit 0 e 1 trasmessi tutti ad una prefissata
frequenza , nel protocollo CAN tale sincronismo non esiste . Questo segnale serve
per sincronizzare il nodo che trasmette con il nodo che riceve, così che sia ben chiara
la durata dei bit trasmessi e il punto in cui il ricevitore deve decidere il valore del
segnale in arrivo.
Nel protocollo CAN ogni nodo ha un suo clock interno, uguale in frequenza per tutti
i nodi del sistema, che il trasmettitore utilizza durante la trasmissione di un
messaggio per avere bit della stessa durata temporale. Durante la ricezione il nodo
utilizza i passaggi dei bit costituenti il messaggio da alto a basso e viceversa per
sincronizzarsi sul messaggio , sfruttando l’inevitabile informazione di
sincronizzazione già presente nel messaggio in se.
Figura 2.2 Esempio di sincronizzazione sul messaggio
Si veda nella figura 2.2 un esempio di utilizzo dei passaggi da alto a basso per la
sincronizzazione sul messaggio . L’aspetto positivo risulta la mancanza della linea di
comunicazione del sincronismo ; inoltre il sistema, sincronizzandosi sul messaggio,
riesce ad evitare errori di lettura del messaggio dovuti a ritardi o compensazioni varie
introdotte dal canale fisico di comunicazione seguendo così non un suo clock, ma
quello del messaggio stesso. Tutto questo comporta però una complessità del sistema
di sincronizzazione dato che si basa solo sul messaggio ; per altre informazioni
sull’argomento si vedano i capitoli descrittivi del protocollo e in particolare quelli sul
sincronismo e sul Bit Timing.
Come visto prima se due o più nodi vogliono trasmettere contemporaneamente un
messaggio sul CAN bus, deve essere in grado di scegliere.Occorre quindi un
regolamento capace di decidere quale tra i messaggi deve essere trasmesso per primo
nel bus seriale. Quest'operazione è chiamata arbitrazione e nel caso specifico del
CAN bus è di tipo non distruttivo, vale a dire che la scelta del messaggio da
trasmettere avviene senza perdita né di messaggi né di tempo, dato che
l’arbitrazione avviene contemporaneamente alla trasmissione del messaggio
prescelto.
Tutto questo è possibile grazie al sistema di rappresentazione dei bit nel bus seriale ;
esistono due valori tra loro esclusivi del bit : “ dominante” e “ recessivo”.
Figura 2.3 Esempio di valori logici presenti nel bus
Quando due o più nodi stanno trasmettendo contemporaneamente la loro catena di
bit, sul bus seriale appare una catena di bit che dipende da tutte le altre catene di bit
nel seguente modo :
1) se almeno uno dei nodi trasmette un bit dominante , sul bus appare un bit
dominante
2) se tutti i nodi non trasmettono o trasmettono al massimo bit recessivi , sul bus
appare un bit recessivo.
Risulta evidente che il messaggio che appare nel bus è costituito da il risultato di una
funzione logica sui messaggi trasmessi dai nodi , ma per qualche esempio si veda le
situazioni descritte nella figura 2.3 .
Ma si passi a descrivere in maniera più specifica la gestione della comunicazione .
Non appena il bus è libero, ogni nodo che desidera mandare un messaggio inizia a
trasmetterlo, anche in contemporanea con altri nodi. La prima parte d'ogni messaggio
è costituita dall’identificatore, una catena di bit, se possibile, unica solo di quel
messaggio, ed è su questa che avviene l’arbitrazione. Ogni nodo, mentre sta
trasmettendo i suoi bit, contemporaneamente controlla se il valore presente nel bus
seriale corrisponde a quello trasmesso. Non appena si accorge di aver trasmesso un
bit recessivo e di aver letto un bit dominante (vedi sopra la regola 1), il nodo perde
l’arbitrazione e non trasmette più alcun bit. E’ successo che almeno un altro nodo
ha trasmesso contemporaneamente un bit dominante, portando il bus allo stesso
valore e implicitamente comunicando al nodo "recessivo" d'avere un livello di
priorità più basso e quindi di bloccare la trasmissione del suo messaggio.
Figura 2.4 Esempio d'arbitrazione fra tre nodi
Dato che, per regola del CAN, non esistono contemporaneamente due messaggi con
identificatore uguale , alla fine dei bit d'identificazione solo un nodo porta a termine
la trasmissione del messaggio ; si tratta del nodo che legge tutti i suoi bit Recessi
anche nel bus, ed è quindi o è l’unico che sta trasmettendo o è quello con più alta
priorità tra i nodi che tentano la trasmissione.
Gli altri nodi non devono far altro che aspettare il termine del messaggio e non
appena possibile ritentare la trasmissione, sperando di avere l’identificatore con più
alta priorità. Se si associa lo zero al valore dominante e l’uno al valore recessivo, i
nodi con identificatore di valore numerico minore possiedono la più alta priorità di
trasmissione. Per un’idea più strettamente legata alla rappresentazione fisica del
messaggio si veda la figura 2.4 in cui viene rappresentato un esempio di arbitrazione
tra tre nodi .
Per quanto concerne la sicurezza nella trasmissione il protocollo CAN prevede un
sistema di controllo sugli errori inevitabilmente presenti nel messaggio e dovuti al
rumore della linea di trasmissione. Nel messaggio è aggiunta una ridondanza di
quindici bit per controllare, al momento della ricezione, la presenza d'eventuali errori
dovuti alla trasmissione. Ridondanza significa che non viene trasmesso solo il
messaggio , ma che viene aggiunta dell’informazione ulteriore ( nel caso specifico
del CAN sono 15 bit ) che permette al ricevitore di accorgersi della presenza nel
messaggio di qualche errore . Il tipo di controllo si basa sui codici CRC (ciclic
redundancy code) che verranno descritti in maniera più approfondita nella parte
dedicata specificatamente al protocollo . Grazie a questo sistema di sicurezza si
riesce a ridurre la probabilità d'errore di un fattore uguale a 4.7*10
-11
rispetto allo
stesso messaggio privo della ridondanza e del controllo su di essa .
Ma tornando alla comunicazione , qunando il messaggio trasmesso sul bus di
comunicazione arriva ad un nodo, viene letto e sono eseguiti dei controlli per
accertare la correttezza dello stesso. Il nodo calcola, basandosi sul messaggio letto, il
codice CRC e lo confronta con la parte del messaggio contenente il codice CRC
calcolato alla partenza del messaggio. Se le due sequenze di bit corrispondono, la
ricezione da parte del nodo di un messaggio senza errori è comunicata al nodo di
partenza attraverso un messaggio di accettazione . Tale comunicazione avviene
sovrascrivendo un bit denominato ACK ( parte integrante del messaggio) ; difatti il
bit è mandato “ recessivo “ dal nodo che trasmette e viene sovrascritto “ dominante “
da tutti i nodi che hanno ricevuto correttamente il messaggio.
Il nodo che ha appena trasmesso deve quindi controllare se il bit ACK è “ dominante
“ così da essere sicuro d'avere avuto una trasmissione senza problemi ; in caso
contrario (bit letto “recessivo”, quindi messaggio corrotto da rumore o nessun nodo
presente sulla linea) il nodo, appena possibile, ritrasmette il messaggio fino ad un
buon fine.
Figura 2.5 Esempio d'accettazione di un messaggio
C’è differenza tra un nodo che legge un messaggio e un nodo che utilizza le
informazioni del messaggio : difatti tutti i nodi leggono i messaggi presenti nel bus,
controllano il CRC e mandano il bit d'ACK ; solo alcuni nodi invece utilizzano le
informazioni contenute nel messaggio (vedi identificazione). Si veda la figura 2.5 per
vedere come funziona il meccanismo di accettazione di un messaggio da parte degli
altri nodi .
Il messaggio che è presente nel bus, come visto , arriva contemporaneamente a tutti i
nodi, tutti i nodi lo leggono e controllano la presenza d'eventuali errori ; ma il nodo
deve essere in grado di capire se le informazioni presenti nel messaggio sono di sua
utilità (o meglio capire se il messaggio è stato indirizzato proprio a lui).
Quest'operazione di destinazione avviene attraverso l’uso dell'identificatore
presente nella prima parte del messaggio. L’identificatore è un insieme di bit che è
parte fondamentale del messaggio. Se l’identificatore del messaggio appartiene
all’insieme degli identificatori propri di quel nodo, allora il messaggio è di sua
competenza ; altrimenti il messaggio è diretto ad altri nodi. Indipendentemente dal
fatto che il messaggio sia di sua competenza o no, il nodo controlla se c’è la presenza
d'eventuali errori. L’identificatore ha anche un’altra funzione visto che la prima
catena di bit formanti il messaggio è quella dell’identificatore; l’operazione
d'arbitrazione avviene su tali bit. E' evidente la grande importanza portata
dall’identificatore : serve a definire le priorità di trasmissione tra messaggi e definire
quali siano i nodi cui il messaggio deve arrivare.
3.
Si desidera sviluppare un’interfaccia tra il bus fisico CAN e un qualunque
microprocessore, così da facilitare l’utilizzo della comunicazione CAN in sistemi già
dotati di controllo a microprocessore (magari anche già dotati di un altro sistema di
comunicazione). Nei paragrafi seguenti si vedrà una breve descrizione dei
componenti attualmente presenti nel mercato , la progettazione dell’interfaccia e la
creazione di un insieme di funzioni in linguaggio C per la gestione di tutta la
comunicazione .
3.1 PROGETTAZIONE DELLA PARTE
HARDWARE DELL’ INTERFACCIA
Nel mercato sono disponibili molti tipi di componenti specifici per la comunicazione
con il CAN, così è facilitato l’utilizzo di questo protocollo nei vari sistemi controllati
da microprocessore. Si veda di seguito un elenco dei principali componenti con una
breve descrizione del loro funzionamento ed utilizzo :
- Controllore CAN : si tratta di un componente che gestisce automaticamente il
protocollo CAN, ed è collegato attraverso una porta di tipo memoria esterna ad un
microprocessore dal quale riceve i comandi ; in uscita gestisce una doppia linea
seriale con il messaggio CAN da trasmettere .
- Trasmettitore CAN : si tratta semplicemente di un’interfaccia tra la linea seriale
che arriva dal controllore CAN e il bus fisico del CAN. Trasforma segnali seriali di
tipo seriali classici (PAM 0-5 V.) in segnali di tipo CAN (vedi paragrafo sui segnali
fisici del CAN per maggiori informazioni).
- SLIO (Serial Link I\O) : si tratta di un controllore CAN che non richiede alcun
microprocessore trattandosi di un nodo CAN gestito da un nodo dotato di