Si vous aimez la technologie et faites souvent des expériences avec Arduino, cet article vous fascinera. Aujourd'hui, nous allons voir comment configurer votre propre réseau CAN à l'aide du module MCP2515 et d'Arduino. Vous découvrirez comment communiquer de manière efficace et fiable entre différents appareils sur un réseau CAN. Ce type de réseau est largement utilisé dans l’automobile et d’autres applications industrielles.
Que vous réalisiez un projet automobile ou que vous ayez besoin d'une communication entre plusieurs microcontrôleurs, le bus CAN est parfait pour les applications où la fiabilité et les performances sont essentielles. Et avec le module MCP2515, il est très simple d'intégrer Arduino dans ce réseau. Alors préparez-vous à en apprendre davantage sur le protocole CAN, la configuration matérielle et la programmation nécessaire.
Qu’est-ce que le bus CAN ?
Le bus CAN (Controller Area Network) est un protocole de communication série qui permet à différents appareils de communiquer entre eux. Il a été développé en 1986 par Bosch et est conçu spécifiquement pour les applications automobiles, même si son utilisation s'est étendue à d'autres secteurs tels que l'automatisation industrielle. Dans ce type de réseau, les appareils connectés envoient et reçoivent des messages sans avoir besoin d'un hôte central ou d'un contrôleur, ce qui en fait un protocole très efficace pour les environnements où la communication et la fiabilité sont essentielles.
Une voiture moderne contient plus de 70 dispositifs de commande, appelés ECU (Electronic Control Units), connectés les uns aux autres via le bus CAN. Grâce à ce protocole, les calculateurs échangent des informations clés pour le fonctionnement de la voiture, telles que les données de vitesse du véhicule ou la position de l'accélérateur.
Topologie et signaux du bus CAN
La topologie du système CAN est de type multimaître, ce qui signifie que n'importe quel appareil connecté au réseau peut prendre le contrôle du bus pour envoyer des messages. Tous les nœuds écoutent ces messages et décident d'y répondre ou de les ignorer.
D'un point de vue physique, la communication s'effectue via deux câbles : CAN_H y PUIS-JE. Ces câbles sont tressés pour minimiser les interférences électromagnétiques. De plus, les extrémités du réseau doivent être terminées par des résistances de 120 ohms pour éviter les réflexions dans le signal.
Signalisation CAN
Le système CAN utilise deux états logiques pour la communication : dominant y récessif. A l'état dominant, CAN_H a une tension de 3.5 V et CAN_L a une tension de 1.5 V. Dans cet état, un « 0 » logique est transmis. Par contre, à l'état récessif, les deux fils ont une tension de 2.5V, ce qui indique que le bus est libre et qu'un '1' logique peut être transmis. C'est ce changement de tensions entre les deux câbles qui permet la transmission des données sur le réseau.
Le module MCP2515
El Module MCP2515 C'est une solution idéale pour ajouter une connectivité CAN à votre Arduino. Il est composé d'un contrôleur CAN (le MCP2515, qui suit la spécification CAN 2.0B) et d'un émetteur-récepteur CAN (le TJA1050, qui gère la communication physique). Ces deux puces fonctionnent ensemble afin que vous puissiez envoyer et recevoir des messages CAN avec votre Arduino via l'interface SPI.
Le MCP2515 prend en charge les messages standard (11 bits) et étendus (29 bits) et a la capacité de filtrer les messages indésirables grâce à l'utilisation de masques et de filtres, ce qui décharge le travail du microcontrôleur. C'est une excellente option pour les projets qui nécessitent des communications fiables, que ce soit dans des environnements bruyants ou sur de longues distances.
Composants du module MCP2515
Le module MCP2515 comprend les éléments suivants :
- Contrôleur CAN MCP2515: Responsable de l'exécution de toutes les fonctions du protocole CAN, telles que la transmission et la réception de messages.
- Émetteur-récepteur CAN TJA1050: Responsable de la conversion des données du contrôleur CAN en signaux pour le bus CAN physique et vice versa.
- Broches de communication SPI: Grâce aux broches SCK, MOSI, MISO et CS, le MCP2515 communique avec l'Arduino via son interface SPI.
- Bornes de bus CAN: Ce petit bornier à vis est marqué « H » et « L ». CAN_H et CAN_L doivent être connectés aux câbles réseau CAN.
Comment configurer un réseau CAN avec Arduino
Avec le module MCP2515, la mise en place d'un réseau CAN est relativement simple. Ci-dessous, j'explique comment connecter le module à votre carte Arduino et comment configurer le logiciel.
Connexions du module MCP2515
Pour commencer, connectez les broches SPI de votre Arduino comme suit :
- MISO (sortie du module) à la broche D12 de l'Arduino
- MOSI (entrée du module) à la broche D11 de l'Arduino
- SCK (Horloge) à la broche Arduino D13
- CS (Chip Select) à la broche Arduino D10
Vous devrez également connecter la broche INT du MCP2515 à une broche numérique Arduino, par exemple D2, car cette broche est utilisée pour gérer les interruptions lorsqu'un message valide est reçu.
N'oubliez pas d'alimenter votre module. La broche VCC doit être connectée au 5V et la broche GND à la terre.
Quant aux bornes du bus CAN, connectez CAN_H à CAN_H et CAN_L à CAN_L entre les différents nœuds que vous souhaitez interconnecter. N'oubliez pas que le bus CAN doit être terminé aux deux extrémités par une résistance de 120 ohms.
Programmation Arduino
Une fois que vous avez connecté les nœuds, il est temps de programmer votre Arduino pour qu'il communique avec le bus CAN via le module MCP2515. La meilleure façon d'y parvenir est d'utiliser une bibliothèque appropriée, telle que la bibliothèque 'mcp2515'.
Tout d'abord, vous devez installer cette bibliothèque. Si vous utilisez l'IDE Arduino, accédez à Sketch > Inclure la bibliothèque > Gérer les bibliothèques. Recherchez « mcp2515 » et sélectionnez l'option d'installation.
Une fois la bibliothèque installée, vous pouvez procéder à l'écriture du code de votre nœud émetteur et de votre nœud récepteur. Ci-dessous, je vous montre des exemples de base pour les deux.
Exemple de code pour le nœud émetteur
Ce code envoie un message « Hello World » sur le bus CAN chaque seconde.
#include void setup() { Serial.begin(9600); while (!Serial); Serial.println("Nodo transmisor CAN"); if (!CAN.begin(500E3)) { Serial.println("Error al iniciar CAN"); while (1); }}void loop() { Serial.print("Enviando mensaje... "); CAN.beginPacket(0x12); CAN.write('H'); CAN.write('o'); CAN.write('l'); CAN.write('a'); CAN.write(' '); CAN.write('M'); CAN.write('u'); CAN.write('n'); CAN.write('d'); CAN.write('o'); CAN.endPacket(); Serial.println("Mensaje enviado correctamente"); delay(1000);}
Exemple de code pour le nœud récepteur
Ce code reçoit les messages du bus CAN et les affiche sur le moniteur série.
#include void setup() { Serial.begin(9600); while (!Serial); Serial.println("Nodo receptor CAN"); if (!CAN.begin(500E3)) { Serial.println("Error al iniciar CAN"); while (1); } CAN.onReceive(onReceive);}void loop() {}void onReceive(int packetSize) { Serial.print("Mensaje recibido con ID: 0x"); Serial.print(CAN.packetId(), HEX); Serial.print(" | Tamaño: "); Serial.print(packetSize); Serial.print(" | Datos: "); while (CAN.available()) { Serial.print((char)CAN.read()); } Serial.println();}
Vitesses et distances dans un réseau CAN
Le bus CAN permet une communication à différentes vitesses. La vitesse maximale prise en charge par le MCP2515 est de 1 Mbit/s, mais la longueur du bus limite la vitesse de transmission. Par exemple, à 1 Mbit/s, la longueur maximale du bus est d'environ 40 mètres. Cependant, si vous devez parcourir de plus grandes distances, vous pouvez réduire votre vitesse. A 125 kbit/s, la longueur du bus peut atteindre 500 mètres.
Il est important de bien planifier le réseau et d'utiliser la vitesse appropriée à la longueur du bus et à l'environnement dans lequel il sera utilisé, car les environnements bruyants peuvent affecter la qualité de la communication.
Pensez également à utiliser des paires torsadées pour les câbles CAN_H et CAN_L, car cela permet de réduire les interférences électromagnétiques et d'améliorer la fiabilité du réseau.
Réseau CAN avec plusieurs nœuds
Si vous souhaitez former un réseau avec plusieurs nœuds, le processus est très similaire. La seule chose que vous devez faire est de vous assurer de connecter tous les nœuds en parallèle aux lignes CAN_H et CAN_L. Pensez également à placer les résistances de terminaison uniquement aux extrémités de la ligne principale, et non aux nœuds intermédiaires.
Dans un réseau plus complexe, vous pouvez avoir plusieurs nœuds qui agissent comme émetteurs et récepteurs. Chaque nœud ajoute une charge minimale au bus, permettant de connecter jusqu'à 112 nœuds sur un réseau CAN sans impact significatif sur les performances.
Que vous utilisiez un bus CAN dans une automobile pour lire les données du moteur ou dans un projet industriel pour communiquer plusieurs capteurs, le module MCP2515 rend l'ajout de cette fonctionnalité simple et efficace. Ce type de réseau est idéal pour les applications où une faible latence et la fiabilité de la transmission des données sont essentielles.