Description
Module CAN-BUS MCP2515 + TJA1050 – Contrôleur CAN 2.0B via SPI
Le module MCP2515 associe le contrôleur CAN 2.0B MCP2515 à l’interface physique TJA1050, permettant d’ajouter facilement une communication CAN 1 Mb/s à vos projets Arduino, ESP32, Raspberry Pi, etc.
🔧 Caractéristiques techniques
- Protocole CAN : version 2.0B à 1 Mb/s Faranux Electronics
- Contrôleur : MCP2515 via interface SPI (CS, SCLK, SI, SO) et interruption INT Faranux Electronics
- Transceiver : TJA1050 (niveau CAN H/CAN L) Faranux Electronics
- Alimentation : 5 V DC (typ. 5 mA en fonctionnement, 1 µA en veille) Faranux Electronics
- Résistance de terminaison : 120 Ω (pont soudable pour activation) Faranux Electronics
- Indicateurs LED : TX (émission) et RX (réception) Faranux Electronics
- Température de fonctionnement : –40 °C à +85 °C Faranux Electronics
- Dimensions : 44 × 28 mm, entraxe des fixations 23 × 38 mm Faranux Electronics
💡 Applications typiques
- Réseaux CAN automobiles et industrialisés
- Systèmes de télémétrie et de capteurs distribués
- Contrôle de moteurs, actionneurs et automatisation
- Projets IoT embarqués nécessitant un bus robuste
- Ponts de données entre microcontrôleurs et équipements CAN
Exemple de code Arduino (utilisant la bibliothèque mcp_can)
#include <SPI.h>
#include <mcp_can.h>
const int SPI_CS_PIN = 10;
MCP_CAN CAN(SPI_CS_PIN);
void setup() {
Serial.begin(115200);
while (CAN_OK != CAN.begin(CAN_500KBPS)) {
Serial.println("Initialisation CAN échouée");
delay(100);
}
Serial.println("CAN initialisé à 500 kbps");
}
void loop() {
// Envoi d'un message CAN 11-bit ID 0x100, 8 octets
byte data[8] = {0xDE,0xAD,0xBE,0xEF,0x00,0x11,0x22,0x33};
CAN.sendMsgBuf(0x100, 0, 8, data);
delay(1000);
// Lecture
if (CAN_MSGAVAIL == CAN.checkReceive()) {
unsigned long id;
byte len;
byte buf[8];
CAN.readMsgBuf(&len, buf);
id = CAN.getCanId();
Serial.print("Reçu ID 0x"); Serial.print(id, HEX);
for (byte i = 0; i < len; i++) {
Serial.print(" "); Serial.print(buf[i], HEX);
}
Serial.println();
}
}
Explication du code
-
On initialise la liaison SPI et le module MCP2515 à 500 kbps via
CAN.begin(...). -
Dans
loop(), on envoie un trame CAN de 8 octets à l’ID 0x100 avecsendMsgBuf(). -
Ensuite, on vérifie la disponibilité d’un message avec
checkReceive(), puis on lit l’ID et les données viareadMsgBuf()etgetCanId(), et on affiche tout dans le moniteur série.
🛠️ Brochage / Wiring
| Broche module | Fonction | Arduino UNO |
|---|---|---|
| VCC | Alimentation +5 V DC | 5 V |
| GND | Masse commune | GND |
| CS | Chip Select SPI (actif bas) | D10 |
| SO (MISO) | SPI Master In Slave Out | D12 |
| SCLK | SPI Clock | D13 |
| SI (MOSI) | SPI Master Out Slave In | D11 |
| INT | Interruption (message CAN reçu) | D2 |
| CANH / CANL | Broches bus CAN (screw terminals) | Branchez au bus |
Note : activez la terminaison 120 Ω en soudant le pont prévu si votre module est aux extrémités du bus.