Acest curs explorează protocolul CAN Bus, utilizat în comunicația dintre microcontrolere și sisteme embedded din industria auto și automatizări industriale.
CAN (Controller Area Network) este un protocol de comunicație serială utilizat pentru schimbul de date între dispozitive embedded fără a necesita un computer central. Este optimizat pentru fiabilitate și rezistență la zgomot.
- Transmisie diferențială: Utilizează două linii (CAN_H și CAN_L) pentru a reduce interferențele.
- Detectarea erorilor: Integrează mecanisme avansate pentru detectarea și corectarea erorilor.
- Arbitraj pe bază de prioritate: Permite ca mesajele critice să fie transmise primele fără coliziuni.
- ID (Identifier): Identifică mesajul și prioritatea acestuia.
- DLC (Data Length Code): Specifică lungimea datelor transmise.
- CRC (Cyclic Redundancy Check): Verificare a erorilor pentru integritatea datelor.
STM32 include controlere CAN integrate care pot fi configurate pentru transmiterea și recepția mesajelor.
CAN_TxHeaderTypeDef TxHeader;
uint8_t TxData[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
TxHeader.StdId = 0x321;
TxHeader.DLC = 8;
HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox);
MCP2515 este un controller CAN extern utilizat pe microcontrolere care nu au suport nativ pentru CAN Bus.
SPI.transfer(0x02); // Comandă pentru transmitere
SPI.transfer(0x00); // Selectează bufferul de date
SPI.transfer(dataByte); // Trimite datele CAN
- Automotive: Controlul unităților ECU în vehicule.
- Sisteme industriale: Comunicație între senzori și actuatoare.
- Medicină: Controlul echipamentelor medicale integrate.
CAN FD extinde standardul CAN prin suportul pentru viteze mai mari de transfer și mesaje de până la 64 de bytes.
Creează un sistem de comunicare CAN între două microcontrolere STM32 care schimbă mesaje despre starea unui senzor de temperatură.