Comment construire un bus CAN avec une planche à pain et Arduino

Le bus CAN (Controller Area Network) est un protocole de communication robuste et fiable largement utilisé dans diverses applications industrielles, automobiles et aérospatiales. Il est conçu pour la transmission de données entre des microcontrôleurs et des appareils sur un réseau de bus CAN. Vous ne le savez peut-être pas encore, mais c’est ce qui se cache derrière les modifications folles du tableau de bord des voitures que vous voyez sur les médias sociaux.

Nous allons vous expliquer comment construire un bus CAN avec le module CAN MCP2515 à l’aide d’un Arduino et d’une planche à pain. Nous passerons également en revue la bibliothèque CAN Arduino et démontrerons comment envoyer et recevoir des données sur le bus CAN.

Qu’est-ce qu’un bus CAN ?

Le bus CAN est un protocole de communication série développé par Bosch dans les années 1980. Il est largement utilisé dans diverses applications en raison de sa grande fiabilité et de sa robustesse. Il permet la transmission de données entre des dispositifs à des vitesses élevées avec une latence minimale sur seulement deux lignes : CAN High et CAN Low.

En 1994, le bus CAN est devenu une norme internationale (ISO 11898) conçue spécifiquement pour l’échange rapide de données en série entre les contrôleurs électroniques dans les applications automobiles. Pour plus de détails, consultez notre guide complet sur ce qu’est un bus CAN et le rôle qu’il joue dans les systèmes automobiles.

L’une des raisons pour lesquelles le bus CAN est si populaire est sa capacité à détecter et à corriger les erreurs. Le protocole peut détecter et corriger les erreurs dans la transmission des données. Il est donc idéal pour les applications où l’intégrité des données est essentielle, comme dans l’automatisation industrielle.

Connaître le module CAN MCP2515

Le module contrôleur de bus CAN MCP2515 est un dispositif qui fournit un support exceptionnel pour le protocole CAN version 2.0B largement utilisé. Ce module est idéal pour la communication à des débits de données élevés allant jusqu’à 1Mbps.

Le circuit intégré MCP2515 est un contrôleur CAN indépendant doté d’une interface SPI qui permet de communiquer avec une large gamme de microcontrôleurs. Le circuit intégré TJA1050, quant à lui, fonctionne comme une interface entre le circuit intégré contrôleur CAN MCP2515 et le bus CAN physique.

Voir aussi :  Raspberry Pi Pico vs. Arduino Nano : Quelle est la meilleure solution pour votre projet ?

Pour plus de commodité, un cavalier vous permet de fixer une terminaison de 120 ohms, ce qui facilite encore plus la connexion de vos fils à l’interface CAN. CAN_H & CAN_L vis pour la communication avec d’autres modules CAN.

Fonction

Caractéristiques

Émetteur-récepteur

TJA1050

Interface microcontrôleur

SPI (permet l’intégration d’un bus Multi CAN)

Oscillateur à cristal

8MHz

Terminaison

120Ω

Vitesse

1Mbps

Consommation électrique

Fonctionnement en veille à faible courant

Dimension

40 x 28 mm

Capacité des nœuds

Supporte jusqu’à 112 nœuds

Vous pouvez obtenir des informations supplémentaires à partir de la page Fiche technique MCP2515 au cas où vous auriez besoin de ce module pour un projet plus avancé.

Structure des messages CAN

La structure du message CAN se compose de plusieurs segments, mais les segments les plus critiques pour ce projet sont l’identifiant et les données. L’identificateur, également connu sous le nom d’ID CAN ou de numéro de groupe de paramètres (PGN), identifie les dispositifs sur le réseau CAN, et la longueur de l’identificateur peut être de 11 ou 29 bits, en fonction du type de protocole CAN utilisé.

Les données, quant à elles, représentent les données réelles du capteur/de la commande qui sont transmises. Les données peuvent avoir une longueur comprise entre 0 et 8 octets, et le code de longueur de données (DLC) indique le nombre d’octets de données présents.

La bibliothèque de bus CAN Arduino MCP2515

Cette bibliothèque met en œuvre le bus CAN CAN V2.0B qui peut fonctionner à des vitesses allant jusqu’à 1Mbps. Elle fournit une interface SPI qui peut fonctionner à des vitesses allant jusqu’à 10 MHz tout en prenant en charge les données standard (11 bits) et étendues (29 bits). De plus, il est livré avec deux tampons de réception, ce qui permet de stocker les messages par ordre de priorité.

Initialisation du bus CAN

Voici le code de configuration dont vous aurez besoin pour initialiser le bus CAN :

Ceci initialise le MCP2515 avec un débit binaire CAN de 500Kbps et une fréquence d’oscillateur de 8MHz.

Modes opérationnels CAN du MCP2515

Trois modes opérationnels sont utilisés avec le contrôleur de bus CAN MCP2515 :

  • setNormalMode(): permet au contrôleur d’envoyer et de recevoir des messages.
  • setLoopbackMode(): configure le contrôleur pour qu’il envoie et reçoive des messages, mais les messages qu’il envoie seront également reçus par lui-même.
  • setListenOnlyMode() : configure le contrôleur pour qu’il ne reçoive que des messages.
Voir aussi :  7 raisons d'acheter le Raspberry Pi Zero 2 W

Il s’agit d’appels de fonction utilisés pour définir le mode opérationnel du contrôleur de bus CAN MCP2515.

mcp2515.setLoopbackMode() ;

mcp2515.setListenOnlyMode() ;

Envoi de données sur le bus CAN

Pour envoyer un message sur le bus CAN, utilisez la commande sendMsgBuf() pour envoyer un message sur le bus CAN :

Cette méthode envoie un message avec l’ID 0x01 et une charge utile de données de 0x01, 0x02, 0x03, 0x04. Le premier paramètre est l’ID CAN, le deuxième est la priorité du message, le troisième est la longueur de la charge utile de données et le quatrième est la charge utile de données elle-même.

Les sendMsgBuf() renvoie une valeur indiquant si le message a été envoyé avec succès ou non. Vous pouvez vérifier cette valeur en appelant la méthode checkError() pour vérifier cette valeur :

Cette méthode vérifie si une erreur s’est produite lors de la transmission du message et imprime un message d’erreur si nécessaire.

Réception de données du bus CAN

Pour recevoir un message sur le bus CAN, vous pouvez utiliser la fonction readMsgBuf() méthode :

Cette opération vérifie si un message est disponible sur le bus CAN et lit ensuite le message dans le fichier buf dans le tableau buf . La longueur du message est stockée dans le tableau len et l’identifiant du message est stocké dans la variable canID .

Une fois que vous avez reçu un message, vous pouvez traiter les données utiles comme vous le souhaitez. Par exemple, vous pouvez imprimer la charge utile de données sur le moniteur série :

Ceci imprime l’ID du message reçu et les données utiles sur le moniteur série.

Comment connecter un émetteur-récepteur de bus CAN à une planche à pain ?

Pour construire un bus CAN afin de connecter deux appareils dans cet exemple de projet, vous aurez besoin de :

  • Deux microcontrôleurs (deux cartes Arduino Nano pour cet exemple).
  • Deux modules CAN MCP2515
  • Une planche à pain
  • Des fils de connexion
  • Un module d’écran LCD I2C 16×2
  • Un capteur ultrasonique HC-SR04

Pour cet exemple de projet, quatre bibliothèques sont utilisées dans le sketch Arduino. Il y a la bibliothèque NewPing qui fournit une interface facile à utiliser pour le capteur ultrasonique, ainsi que la bibliothèque bibliothèque SPI qui facilite la communication entre la carte Arduino et le contrôleur de bus CAN MCP2515. La bibliothèque LiquidCrystal_I2C est utilisée pour le module d’affichage.

Voir aussi :  10 projets pour utiliser votre écran tactile Raspberry Pi

Enfin, il y a la bibliothèque bibliothèque mcp2515 pour s’interfacer avec la puce MCP2515, ce qui nous permet de transmettre facilement des données sur le réseau de bus CAN.

Configuration du matériel (exemple HC-SR04)

Dans ce projet utilisant un capteur HC-SR04 et un écran LCD, une carte Arduino Nano agira en tant que récepteur, tandis que l’autre Arduino agira en tant qu’émetteur. Connectez les composants de votre émetteur conformément au schéma de câblage ci-dessous :

Voici le schéma du circuit du récepteur :

Enfin, connectez les deux nœuds ensemble à l’aide du câble CAN_H et CAN_L comme indiqué :

Lors du branchement des modules, il est important de s’assurer que la tension d’alimentation se situe dans la plage spécifiée et que les lignes CAN H et CAN L sont correctement connectées au bus.

Programmation du module de bus CAN MCP2515

Notez que lors de la programmation du module MCP2515, il est important d’utiliser le débit binaire correct pour assurer une communication réussie avec les autres dispositifs CAN sur le réseau.

Code de l’expéditeur :

Code récepteur :

Faites passer vos projets Arduino au niveau supérieur

La combinaison du bus CAN et d’Arduino constitue une plateforme puissante pour construire ou apprendre des réseaux de communication sophistiqués utilisés dans diverses applications. Bien que la courbe d’apprentissage puisse sembler raide, avoir votre propre configuration sur une planche à pain est un moyen assez pratique d’apprendre les ficelles de l’utilisation d’un réseau de bus CAN dans des projets de bricolage complexes.

S’abonner à notre lettre d’information

Arduino supporte-t-il le protocole CAN ?

L’Arduino Portenta Machine Control dispose de l’émetteur-récepteur CAN TJA1049T qui permet d’utiliser le protocole de communication Controller Area Network (CAN).

L’ESP32 dispose-t-il d’un bus CAN ?

Le microcontrôleur ESP32 d’Espressif dispose également d’un contrôleur de bus CAN intégré.

Comment connecter le MCP2515 à Arduino ?

Conception du circuit Connectez donc les broches SPI, c’est-à-dire SCK, MOSI (SI), MISO (SO) et CS du module MCP2515 aux broches SPI correspondantes de l’Arduino (voir le schéma du circuit). Réalisez deux connexions de ce type : une paire sert d’émetteur et l’autre de récepteur.

Cliquez pour évaluer cet article !
[Total: Moyenne : ]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *