![]() |
Découverte du bus CAN |
fevrier 2022 |
Mon approche sera progressive : Commençons par utiliser l'Arduino UNO avec le module MCP2515, même si je ne vous cache
pas que je m'intéresse plus particulièrement aux modules MCU2551 et VD230 avec un ESP32...
Un bus CAN peut comporter de nombreux terminaux (noeuds)(nombre variable suivant la longueur du réseau) mais les deux extrémités doivent
être fermées par une résistance de 120 ohms.
Je ne vais pas me lancer dans des explications que je ne maitrise pas mais plutôt essayer de rassembler tous les éléments qui m'ont semblé important lors de mes premiers pas avec ce bus. Ceci est donc pour moi un "mémo" de mes trouvailles sur divers sites et une illustration de mes premiers tests.
J'ai préféré commencé avec l'UNO et le module MCP2515 car si l'on utilise un esp32 une grande partie de la gestion du bus CAN est déjà intégrée dans le processeur ESP32. Avec le MCP2515 de nombreux aspects de la gestion du bus can ont dû être intégré dans la librairie ACAM2515 (auteur Pierre Molinaro) et il est très intéressant d'aller voir comment cette librairie traite la gestion du bus. Il est à noter que l'auteur de la librairie l'a fait évoluer de façon à prendre les nouvelles configurations en compte.
Le module MCP2515 communique avec l'Arduino avec le bus SPI (sur l'UNO il n'y a qu'un SPI les broches sont donc standard et il n'est pas utile de les déclarer
explicitement, par contre si vous réalisez les tests proposés ci-dessous avec un autre type de carte Arduino, il faut indiquer le numéro de bus SPI utilisé et les broches concernées).
Le module MCP2515 communique avec le bus CAN par deux fils (H et L). Les deux extrémités du bus CAN doivent être fermées par une résistance de 120 ohms.
Sur le module MCP2515 il suffit de mettre un cavalier sur le strap J1. Comme dans les exemples ci-dessous nous n'aurons que deux terminaux (noeuds), il faut donc mettre en place le cavalier J1 sur les deux modules.
Schéma :
Pour visualiser les échanges sur le bus ce petit montage bien que simpliste va faire l'affaire ! Les deux Arduino UNO sont reliés aux modules MCP2515 par bus SPI.
Un potar est installé sur l'émetteur pour simuler une valeur numérique qui pourrait être générée par un capteur dans la vraie vie.
Le récepteur est équipé d'un afficheur LCD 4 lignes de 20 caractères (en I2C, c'est plus simple) pour visualiser les datas reçues des trames du bus CAN.
La trame standard utilise les 11 bits d'identification de message et un champ de 0 à 8 octets de données. Dans le code qui suit vous verrez qu'il est possible d'allonger la taille de l'identifiant en ajoutant jusquà deux des premiers octets de donnée.
Dans le cas d'une trame étendue l'identifiant est composé de deux champs ceci peut par exemple permettre d'identifier un fournisseur avec le premier bloc et un des produits de celui-ci avec le deuxième champ.