OK! Aveţi nevoie de un … CAN Bus

Deseori este necesar să existe integrate într-un sistem câteva microcon­tro­lere care să execute diverse operaţii pentru a funcţiona ca un întreg. În acest articol se prezintă modul de conectare a trei microcontrolere la un CAN şi cum se utilizează filtre în nodurile CAN în scopul filtrării mesajelor.


de Zoran Ristic, Mikroelektronika - Departamentul Software

Trei sisteme de dezvoltare EasyPIC5 conectate la un bus CAN prin module CAN-SPI
De fiecare dată când câteva unităţi periferice împart acelaşi bus de date, este necesar să se definească modul de accesare al acestuia.
Protocolul CAN descrie cu precizie toate detaliile despre conectarea a câteva dispozitive la o reţea şi ca atare este des utilizat în industrie. Protocolul defineşte în principal pre­cedenţa implementării bus şi rezolvă pro­blema “coliziunii” în interiorul hardware-ului în cazul în care încep să comunice simultan câteva unităţi periferice.

Hardware
În acest exemplu, un bus CAN va fi configurat astfel încât primul dispozitiv transmite mesaje constând din 0×10 şi 0×11 ca ID, în timp ce al doilea şi al treilea dispozitiv transmit respectiv mesaje constând din ID-urile 0×12 şi 0×13. De asemenea se vor

Figura 1: Filtrarea mesajelor
configura nodurile CAN astfel încât al doilea nod să răspundă la mesajele primite conţinând numai ID-ul 0×10, în timp ce al treilea răspunde numai la acelea conţinând ID-ul 0×11. Corespunzător, primul dispozitiv este configurat să recepţioneze mesaje conţi­nând un ID 0×12 şi 0×13 (Figura 1). Filtrarea mesajelor este uşor implementată prin ape­larea rutinei CANSPISetFilter care va gestiona de asemenea configuraţia necesară a regis­tre­lor microcontrolerului şi a plăcii SPI CAN.
În general, protocolul CAN nu necesită ca un dispozitiv Master să fie prezent pe bus.
Totuşi, pentru a uşura înţelegerea acestui exem­plu, menţinând-ul în acelaşi timp de uz general, se va configura primul dispozitiv să răspundă la apeluri individuale.

Software
Când se transmite un mesaj, nodul Master lasă timp suficient pentru ca nodul apelat să răspundă. În cazul în care un nod distanţat nu răspunde în perioada de timp impusă, Master-ul raportează o eroare la mesajul curent şi trece la apelarea altor noduri (Figura 2).

Figura 2: Exemplu de comunicaţie
În cazul în care un nod CAN periferic răspunde în acelaşi timp ca un alt nod, va avea loc o “coli­ziune” pe bus-ul CAN. Totuşi, numai prioritatea adresei dispozitivului recomandă ca în acest caz nodul care transmite mesajul cu cea mai mică prioritate se retrage din bus, astfel permiţând nodului să transmită mesaje de prioritate ridicată şi să continue imediat transmisia.
Cum a fost menţionat anterior, se va folosi un modul SPI intern al microcontrolerului pentru a transfera date pe bus-ul CAN. Unele avantaje ale utilizării modulului SPI intern al microcontrolerului sunt: posibilitatea de generare a unei întreruperi când se transmit şi se recepţionează date; modulul SPI operează independent de alte periferice şi are o configuraţie simplă.

Schema 1: Conectarea modulului SPI-CAN la un PIC16F887
Biblioteca SPI CAN permite setarea modului de operare al CAN şi filtrele nodului, citirea datelor de la buffer-ul plăcii CAN SPI etc.
Acest exemplu include de asemenea LED-uri pe pinii microcontrolerului care să indice că reţeaua operează corespunzător. Când nodul 2 răspunde la apelul nodului 1, LED-urile PORTB vor fi aprinse automat. Dacă nodul 3 răspunde apelului, LED-urile PORTD vor fi aprinse. Codul sursă al tuturor acestor noduri din reţea este asigurat de acest exemplu. Pentru a crea fişierul HEX pentru fiecare dintre aceste noduri individual, este necesar să se scrie numai o directivă DEFINE în antetul exemplului.

Editorul de biblioteci mikroC PRO for PIC® cu biblioteci pre-definite cum sunt: CAN_SPI, GLCD, Ethernet etc.
Ca rezumat, a fost descrisă o metodă de conectare a microcontrolerelor la bus-ul CAN. A fost de asemenea descrisă metoda de detectare a erorilor cu ajutorul unui protocol de comunicaţie în cazul în care un nod îndepărtat nu răspunde cum se aşteaptă, cum se filtrează mesaje utilizând filtre CAN, dar şi cum se realizează comunicaţii în general pe bus-ul CAN.

Funcţii utilizate în program
CANSPIGetOperationMode() Modulul de operare curent
CANSPIInitialize()* Iniţializarea modulului CANSPI
CANIRead()* Citirea mesajului
CANSPISetBaudRate() Setarea ratei baud CANSPI
CANSPISetFilter()* Configurarea filtrului de mesaje
CANSPISetMask()* Configurarea avansată a filtrelor
CANSPISet OperationMode()* Modul de lucru curent
CANSPIWrite()* Scrierea mesajului

* Funcţiile bibliotecii CANSPI utilizate în program

Alte funcţii mikroC PRO for PIC utilizate în program:
Delay_us()
SPI1_init()
SPI1_read()


Programul pentru acest exemplu scris pentru microcontrolere PIC® în C, Basic şi Pascal, precum şi programe scrise pentru microcontrolere dsPIC® şi AVR® pot fi găsite pe pagina web: www.mikroe.com/en/article/