home castoo
chapitre electronique
Electronique carte Yunshan HW622

Découverte du bus CAN
et de la librairie ACAN2515

fevrier 2022

Partie 1

Mon intérêt pour l'électronique marine m'amène donc à m'intéresser au "bus CAN" qui est par ailleurs utilisé majoritairement en automobile.

structure bus can
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.

structure bus can

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.

mcp2515 bus can 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.


mcp2515 bus canSché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 CAN peut être standard ou étendue, un eb dans la deuxième zone de gestion permet de déterminer le type de trame. Dans les descriptions qui suivent les champs de gestion des trames ne sont pas décrits. Si ce type de détail vous intéresse, vous ne peinerez pas à trouver des sites détaillant ces champs. Dans le cadre de cette découverte ils ne sont pas primordiaux !
structure bus can trame standard

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.

Navigation
structure bus can trame etendue

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.


Fin d'initialisation et attente d'une trame.
structure bus can

Réception d'une trame.
structure bus can
structure bus can

Réception chaine de caractere.
structure bus can

Réception d'une valeur lue sur le potar.
structure bus can

Réception d'une autre valeur.
structure bus can

Dans une précédente version j'affichais la chaine reçue sous forme de code numérique et leur traduction en ASCII.
structure bus can


Le code pour l'emetteur :


Le code pour le récepteur :


Pour entrer dans les détails :
Un super site qui m'a permis de m'initier aux bases : locoduino => locoduino.
Un PDF qui donne de nombreux détails => PDF détails bus CAN.

accueil electronique

Bricolage Robotique Informatique Peinture Voyage
Téléc. portail Le robot "mécano" Astuces informatique Henri Bertrou Auvergne
Bat. Iphone 6S Le robot "solaire" Réseau couche app. Jean-Michel Castille Floride
Robot piscine Servo et IR" Réseau Les couches New York
Xiaomi M365 Le robot "thymio" Réseaux Outils L'Ouest américain
Mac Mini Le robot "Rovio" Unités grandeur inf. L'Ile Maurice
Putty SSH Windows L'Italie / Venise
Bases Raspberry Tunisie
Termius IPhone/IPad Grece
Le vieux ZX 81
...
Navigation La Rochelle CNC / Imp3D Electronique Programmation
Rencontre dauphins Les Minimes Construction CNC Alim. TPL 5110 Doc. programme
Analyse NMEA 0183 Le Vieux port CNC du commerce Carte ESP8266 Indent programme
graph. NMEA 0183 L'Ile de Ré Martyr CNC ESP8266 1 relai Prog. objet
Analyse trames AIS A visiter Réa. imp. 3D ESP8266 Alarme Prog. procédurale
Analyse AIS TCP-IP Cura impression 3D ESP8266 MQTT
Sortie en ketch Plateau CR10 ESP8266 Temp.
Echange GPS C80 Anémomètre.
HP Sun-Odyssey CNC / 3D en vrac MCP9808 Librairie
LCD yanmar Saisie Oled
Testeur nmea esp1 i2c