Beaucoup de données ont circulé par les passerelles depuis la publication par Bosch de la spécification du bus CAN (Controller Area Network) en 1986 et de sa première utilisation par Mercedes-Benz dans son modèle Classe S en 1991. Depuis, la notion de réseau CAN fait partie intégrante du développement et de la conception des automobiles. Le bus CAN est robuste, d’où son utilité dans de nombreux autres domaines d'application. Un module de bus CAN mobile est utile pour analyser les communications, diagnostiquer les problèmes et commander des dispositifs. Le HAT PiCAN examiné ici fait parfaitement l'affaire et se branche sur la toute dernière version du Raspberry Pi. Voyons cela de plus près.

Les systèmes électriques des véhicules sont des environnements hostiles pour les appareils électroniques délicats. J’ai le souvenir de nombreuses interventions de recherche de pannes consistant à poser des câbles de 40 m de long pour alimenter des oscilloscopes et des équipements de test fonctionnant dans une voiture. Si la simple évaluation des données du bus CAN vous intéresse, le PiCAN 3 offre une autre ressource de diagnostic avantageuse et portable.

Pourquoi utiliser un Raspberry Pi ?

Lorsque vous expérimentez un système de communication par bus (I2C, SPI, etc.), les problèmes ne découlent pas de la mauvaise qualité du signal dans la couche physique, mais de l'organisation et du séquençage des données transmises. Si vous envoyez des paquets mal formés ou si vous vous trompez sur la façon dont les octets doivent être séquencés, par exemple, vous ne serez guère surpris si le moteur ou tout autre dispositif que vous espériez contrôler refuse de coopérer.

Des outils tels que PiCAN 3, associés à un Raspberry Pi, permettent d'effectuer des mesures mobiles. Dans l’idéal, vous n’avez besoin que d’un Raspberry Pi 4 et d’un petit écran d'affichage pour construire un banc d'essai portable. Si vous intégrez l'environnement de développement du système CAN dans la distribution ARMbian du système, vous serez opérationnel.

Le matériel

L'environnement électrique d'une voiture peut être assez hostile pour les circuits électroniques. Le fabricant SK Pang en a tenu compte dans la conception de la carte en incorporant une alimentation à découpage (figure 1) possédant une large plage de tensions d'entrée (6 à 20 V continu). Elle se connecte à la carte via un connecteur à cinq broches. Le HAT PiCAN devrait être disponible sans l'alimentation à découpage - mais actuellement, ce n'est pas le cas et l'alim est installée en standard.
 

PiCAN 3
Figure 1 : Cinq broches au pas de 0,1" relient la carte d’alimentation (verte) à la carte principale.

Ce tout dernier HAT (ou « shield ») CAN est appelé « PiCAN 3 - carte bus CAN pour Raspberry Pi 4 avec alim. à découpage 3 A et horloge temps réel » pour le différencier de ses prédécesseurs. Cette dernière version inclut donc une alimentation à découpage de 3 A pour alimenter le Raspberry Pi 4, très gourmand en énergie. Le shield peut également être utilisé directement à partir du Raspberry Pi lorsqu'il est alimenté par son port USBC. Le schéma de la carte peut être consulté à l'adresse [1] et montre qu’elle fait appel à des circuits intégrés standard. Le manuel d'utilisation est disponible à l'adresse [2].

L'interface du bus de signaux CAN est réalisée avec le MCP2515, qui communique avec le Raspberry Pi via SPI et une broche d'interruption GPIO. L'interface physique avec le bus est assurée par l'émetteur-récepteur de bus CAN MCP2562. Le schéma du circuit PiCAN3 montre que l'alimentation de 3,3 V utilisée par certains composants de la carte provient du régulateur du Raspberry Pi, ce qui permet d'économiser un régulateur supplémentaire.

La carte possède deux connecteurs (figure 2) pour relier la carte PiCAN 3 à un bus CAN externe. La première méthode fait appel à un bornier à quatre voies dont l'identification des signaux est imprimée sur la carte. La deuxième méthode utilise une prise D-sub à 9 broches, que les lecteurs d'un certain âge reconnaîtront comme celle des communications RS232 standard.
 

 The PiCAN◦3 board offers two ways to connect
Figure 2 : La carte PiCAN◦3 permet de se connecter à un bus CAN de deux façons.

Le connecteur Sub-D 9 broches accepte un câble standard OBD-II vers DB9 pour se connecter à un système OBD. Malheureusement, il n'existe pas d'affectation standard des broches du connecteur et des signaux CAN. Pour parer à toutes les éventualités de câblage, les pastilles de la carte (figure 3) devront être pontées avec de la soudure.
 

Large solder pads on the board
Figure 3 : Grâce aux généreuses pastilles de soudure, le routage des signaux n'est pas trop compliqué.

Un plan d'affectation (figure 4) vous aide à décider lesquelles relier pour que le connecteur soit compatible avec le système auquel vous vous connectez. Ces pastilles sont complètement ouvertes sur le produit livré. Ainsi, sans les ponts de soudure, les signaux ne seront pas acheminés vers les bonnes broches.
 

How the solder pads should be bridged
Figure 4 : Le tableau montre comment ponter les plages de soudure.

Les applications véhiculaires nécessitent souvent des informations précises sur l'heure du jour. Pour cela, le le PiCAN 3 utilise une horloge en temps réel PCF8523. Celle-ci communique avec le Raspberry Pi via une interface I2C. Un support pour pile bouton est fourni sur la carte et accepte une pile de type CR1220 pour alimenter l'horloge en temps réel.

L’écosystème CAN

Le système d'exploitation Linux a une certaine pertinence pour le secteur automobile. Il existe en fait tout un écosystème dans l'univers Linux permettant de prendre en charge les applications de bus CAN. Les utilitaires disponibles englobent aussi bien les pilotes de noyau et les logiciels de ligne de commande que de très nombreux autres outils performants.

Pour commencer à communiquer avec le PiCAN 3, nous devons effectuer quelques adaptations dans le fichier /boot/config.txt d’une installation Raspbian toute neuve. Le bus SPI doit tout d'abord être activé par le bloc suivant (notez l'appel supplémentaire Overlay) :

dtparam=spi=on

dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25

dtoverlay=spi-bcm2835-overlay
 

Les déclarations suivantes sont nécessaires pour utiliser l'horloge en temps réel :

dtparam=i2c_arm=on

dtoverlay=i2c-rtc,pcf8523


L'étape suivante consiste à télécharger les modules du noyau et quelques autres utilitaires. Fort à propos, il existe un package prêt à l'emploi disponible dans les référentiels :

sudo apt-get install can-utils


Après le déploiement des utilitaires CAN, l'interface doit être enregistrée auprès du système d'exploitation. Pour cela, il suffit de générer une nouvelle interface selon le schéma suivant. La valeur 500 000 indique ici le débit maximal de données admis par le matériel :

sudo /sbin/ip link set can0 up type can bitrate 500000


Une fois l'interface prête, vous pouvez l'utiliser comme tout autre produit similaire pour communiquer à l'aide du bus CAN. De manière classique, vous pouvez utiliser l'outil candump, activable à l’aide de la ligne de commande, comme suit :

candump


Une fois en fonctionnement, elle affiche automatiquement et en continu tous les messages CAN visibles du shield. Ceci est particulièrement utile, par exemple, pour décortiquer les stratégies de contrôle de moteur inconnues dans les systèmes existants.

Il existe également une API CAN Python que vous pouvez installer :

git clone https://github.com/hardbyte/python-can

cd python-can

sudo python3 setup.py install

Ajout de l’horloge temps réel

Le système d'exploitation Linux met en œuvre depuis longtemps des horloges en temps réel sur les ordinateurs portables et les PC. Les systèmes non dotés d’un matériel d'horloge temps réel (pour des raisons de coût) utilisent le module émulateur fake-hwclock du système d'exploitation pour fournir des informations sur l'heure ; c'est également le cas du Raspberry Pi.

Pour pouvoir utiliser l'horloge matérielle en temps réel sur la carte CAN, nous devons d'abord désactiver la « fausse » hwclock pour l'empêcher d'interférer avec l'heure fournie par la « vraie » :

sudo apt-get -y remove fake-hwclock

sudo update-rc.d -f fake-hwclock remove

sudo systemctl disable fake-hwclock


Ensuite, nous devons ouvrir le fichier /lib/udev/hwclock-set (vous avez normalement besoin de l'autorité du super-utilisateur pour le faire) et mettre en commentaires les lignes de code dans ces deux blocs :

#if [ -e /run/systemd/system ] ; then

# exit 0

#fi

 

#/sbin/hwclock --rtc=$dev --systz --badyear

#/sbin/hwclock --rtc=$dev --systz
 

Les informations temporelles de l'horloge matérielle peuvent maintenant être lues à l'aide de hwclock. Les caractéristiques de cet outil d'administration de l'horloge matérielle sont présentées à la figure 5.
 

Figure 5 : Pour en savoir plus sur l'accès par la ligne de commande à l’horloge temps réel matérielle, utilisez man (abréviation de « manuel ») <commande>. Voici le résultat pour hwclock, avec des informations pour contrôler l’horloge temps réel utilisée par la carte CAN.

Fonctionnalités de commande et de communication du bus CAN

Le HAT PiCAN 3 de SK Pang, avec son alimentation à découpage 3 A embarquée, peut être utilisé avec un Raspberry Pi 4 pour offrir des capacités de communication et de commande par bus CAN. Avec le Raspberry Pi, il forme une plateforme mobile expérimentale compacte et relativement peu coûteuse, dotée de l'interface nécessaire pour se connecter directement à un bus CAN. Le matériel de la carte est open source, de sorte que le système peut être intégré dans vos propres projets après évaluation, si nécessaire.


Des questions ? Des commentaires ?

Si vous avez des questions techniques ou des commentaires sur cet article, veuillez contacter l'auteur à l'adresse tamhan@tamoggemon.com ou l'équipe d'Elektor à l'adresse editor@elektor.com.


Traduction: Pascal Godart