Vous êtes sur la page 1sur 14

Bus industriel 4A GE SE Pr.

Nisrine LACHGAR

TRAVAUXPRATIQUES
Bus de Communication Industriels
Introduction

La technologie CAN est un protocole de communication largement utilisé dans les environnements et les
systèmes nécessitant un temps de réponse en temps réel. Elle a été développée par la société Robert
Bosch GmbH en 1986 pour répondre à la nécessité croissante de connecter un nombre croissant de
dispositifs électroniques à l'intérieur des voitures. En raison de ses garanties, elle est couramment utilisée
dans des secteurs tels que l'automobile ou l'aéronautique, où la fiabilité des communications est cruciale
pour le bon fonctionnement des systèmes.

L'adoption de ce modèle de communication a représenté une avancée en termes de nombre de


connexions entre les dispositifs nécessaires pour maintenir tous les éléments connectés. En effet, le
protocole CAN utilise un seul bus de communication partagé par tous les dispositifs, ce qui évite la
nécessité d'établir une connexion point à point avec chacun d'entre eux.

Figure 1 : Exemple de réduction des communications nécessaires

1
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

Description du protocole CAN


Le protocole CAN est spécifié dans la norme ISO 11898, qui contient plusieurs normes spécifiques pour
différents aspects du protocole et différents types de fonctionnement. Par exemple, la norme ISO 11898-
2 standardise le protocole CAN à grande vitesse, qui peut atteindre des vitesses allant jusqu'à 1 MB/s, ou
la norme ISO 11898-3, qui standardise le protocole CAN à faible vitesse et tolérant aux pannes.

Tableau 1 : Vitesse de transmission du bus CAN en fonction de la distance

Longueur du bus Vitesse en bits/s Durée maximale de


transmission*
Jusqu’à 25m 1 Mbit/s 129us
Jusqu’à 100m 500 Kbit/s 258us
Jusqu’à 500m 125 Kbit/s 1032ms
Jusqu’à 1000m 50 Kbit/s 2580ms
*Message avec 129bits de longueur

Un module CAN se compose de deux éléments de base :

 Contrôleur : gère l'assemblage des trames CAN, le contrôle des erreurs lors de la transmission ou
à d'autres nœuds, ainsi que la détection des collisions,
 Émetteur / récepteur : également appelé émetteur-récepteur. Ce module est responsable du
codage et du décodage des messages sur le bus, de la synchronisation, du contrôle des niveaux
de signal ou du contrôle de l'accès au support.

Le contrôleur CAN ainsi que le transcepteur sont des modules indépendants des nœuds, ce qui permet à
ces derniers de ne pas avoir à allouer de ressources pour la gestion des communications, l'accès au
médium ou les collisions entre autres. Bien que certains microcontrôleurs possèdent des modules CAN
dans un seul encapsulé, ils sont internalement des circuits indépendants dans la plupart des cas.

Tout dispositif connecté au bus peut envoyer des messages, et tous les nœuds connectés à celui-ci les
recevront. Pour différencier les types de messages, ces derniers portent un identifiant associé. Ainsi,
chaque nœud peut traiter les messages qui l'intéressent ou au contraire, les ignorer.

Couche physique du protocole


La topologie adoptée est en forme de bus, où seulement deux câbles torsadés avec une impédance de
120 Ω sont nécessaires pour connecter tous les dispositifs sur un même réseau. Les signaux de ces câbles
sont appelés CAN_H (CAN haut) et CAN_L (CAN bas), et selon leur tension, le bus peut être en mode
récessif, où les deux câbles ont le même niveau de tension, ou en mode dominant, avec une différence
de tension d'au moins 1,5V entre les câbles. Ce mode de communication vise à offrir une meilleure
protection contre les interférences électromagnétiques.

Cette protection est assurée car la lecture des bits est basée sur la différence de tension entre les deux
câbles torsadés. Ainsi, même en cas d'influence électromagnétique similaire sur les câbles, la différence
de tension entre eux reste constante malgré les variations du signal.

2
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

Figure 2 : Niveaux de tension du Bus CAN

Contrôle de l'accès au support


Le protocole CAN présente une caractéristique appelée arbitrage, qui contrôle l'accès au médium par les
nœuds et évite les collisions potentielles dans les communications. Cette caractéristique fait partie du
contrôle d'accès au médium mis en œuvre par le protocole CAN, CSMA/CD+CR (Carrier Sense, Multiple
Access/Collision Detection + Collision Resolution ou Détection de porteuse, Accès multiple avec détection
de collision et résolution de collision).

Sur le bus, les bits dominants correspondent au niveau logique "0", tandis que les bits récessifs
correspondent à la valeur logique "1". Au début des trames envoyées par les nœuds, il y a un champ dédié
spécifiquement à l'arbitrage, qui correspond à l'identifiant propre du nœud. Avant de transmettre, les
nœuds doivent surveiller le bus pendant une période où il ne peut y avoir aucune activité, après quoi,
lorsque deux nœuds tentent de transmettre simultanément, les bits dominants prévalent sur les bits
récessifs. Ainsi, le nœud qui tente de transmettre la trame avec des bits dominants (identifiant plus petit)
est capable de détecter la collision avec les bits récessifs (identifiant plus grand). Pour que la détection de
collision soit efficace, les nœuds doivent être correctement synchronisés, en maintenant les fréquences
d'horloge des contrôleurs CAN dans les valeurs tolérées.

Le nœud détectant la collision cesse immédiatement de transmettre et attend que la communication de


l'autre nœud se termine avant de réessayer.

Format de la trame CAN


El protocole CAN utilise différents formats de trames, chacun étant orienté vers un objectif spécifique
dans le fonctionnement du protocole. Les principaux sont :

 Trames de données : Utilisées pour le transfert d'informations entre les nœuds, pouvant être
envoyées et reçues par un ou plusieurs d'entre eux.

3
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

 Trames d'erreur : Utilisées lorsqu'un nœud du réseau détecte une erreur dans l'un des messages
transmis par d'autres nœuds. Elles enfreignent les normes du format de trame CAN.
 Trames de demande distante : Utilisées pour demander l'envoi d'informations à un autre nœud.
Une trame avec l'identifiant du nœud dont l'envoi d'informations est demandé est envoyée, le
nœud le reçoit et renvoie les informations avec une trame de données.
 Trames de surcharge : Tout comme les trames d'erreur, elles enfreignent les normes du format
de trame CAN. Elles sont envoyées par un nœud lorsqu'il est surchargé, ce qui provoque un retard
supplémentaire entre les trames sur le bus.

Lorsque le bus est au repos (pas d'échange de trames), un niveau récessif est maintenu en permanence
sur le bus. Lorsque des messages nécessitant plus d'une trame de données doivent être envoyés, elles
sont séparées par une séquence prédéterminée appelée espace inter-trame, composée de 3 bits récessifs.

Trame de données
Ce type de trame est capable d'envoyer jusqu'à 8 octets d'informations. Elles comportent au début un
identifiant, qui peut être au format standard de 11 bits ou au format étendu, de 29 bits.

Figure 3 : Format de la trame de données

Les trames commencent par un seul bit dominant pour la synchronisation avec les autres nœuds. Ensuite,
vient le champ de l'identifiant, qui sert à la fois à identifier le nœud et à représenter la priorité de la trame
dans le réseau. Connaissant les identifiants de toutes les trames en cours de transmission, l'ordre de
transmission peut être établi de manière déterministe. [Trame de données : 0, trame de requête : 1]

Trame d’erreur
Le protocole CAN comprend une règle de remplissage de bits dans les trames, selon laquelle chaque
séquence de cinq bits de même valeur est suivie d'un bit de valeur inverse. Cela permet de détecter les
trames d'erreur par rapport aux trames de données car elles ne respectent pas cette norme de
remplissage.

Les trames d'erreur peuvent être générées par n'importe quel nœud détectant une erreur dans les
communications. Voici leur format :

4
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

Développement de bas niveau


Dans ce TP, nous examinons l'un des bus couramment employés dans le secteur industriel, réputé pour
sa capacité à résister aux perturbations sonores. Notre attention est principalement portée sur le bus
CAN, qui a été initialement développé pour faciliter la communication entre les équipements automobiles.
En intégrant un module CAN à la carte Arduino, nous facilitons la communication entre deux Arduinos
grâce au bus CAN, même sans l'utilisation d'équipements industriels pour les connecter à l'Arduino. Après
cette tâche pratique, les étudiants auront la capacité de communiquer (lire et écrire des informations)
avec un tableau de bord de véhicule, un automate ou tout autre dispositif qui utilise le bus CAN.

Le module CAN-Bus Shield permet de permettre la connexion d’une carte Arduino à un dispositif du
fabricant Microchip bus can. Les modèles utilisés sont le MCP2551 pour le transcepteur CAN et le
MCP2515 pour le contrôleur CAN.

 MCP2551 : Ce transcepteur gère la partie physique du protocole CAN, la gestion de la codification


des bits sur le médium et le contrôle des niveaux de tension. Il peut fonctionner à des vitesses
allant jusqu'à 1 Mo/s et prend en charge la connexion de jusqu'à 112 nœuds simultanément au
réseau.

5
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

Le dispositif dispose de deux broches, RXD (recevoir) et TXD (transmettre), pour communiquer avec le
module MCP2515, et de deux broches CAN_H (can haut) et CAN_L (can bas) pour la connexion au bus
CAN, ainsi que des broches d'alimentation VSS et VDD.

 MCP2515 : Ce microcontrôleur assure l'implémentation de la spécification du protocole CAN,


capable de transmettre à la fois des trames standard et des trames étendues. La communication
de connexion est effectuée via le protocole en série (Serial Peripheral Interface ou SPI).

En plus des entrées courantes dans les microcontrôleurs telles que l'alimentation ou la terre (entrées VSS
et VDD), il nécessite également une entrée pour un signal d'horloge externe (entrées OSC1 et OSC2).

Il possède également trois entrées spécifiques pour la communication externe via SPI (broches CS, SO, SI
et SCK), deux pour la communication avec le transcepteur CAN (broches TXCAN et RXCAN), une pour la
réinitialisation du microcontrôleur, et une sortie spécifique pour les interruptions, activée pour signaler
la réception d'une trame CAN (broche INT).

Les broches TXCAN et RXCAN du microcontrôleur MCP2515 ont été connectées respectivement aux
broches TXD et RXD du microcontrôleur MCP2551, qui sont responsables de la communication entre eux.
Pour des raisons de sécurité, une LED rouge a également été ajoutée à chaque connexion, connectée à
une résistance de 150 Ω, s'allumant ou clignotant lorsqu'il y a de l'activité sur la connexion.

Un circuit d'horloge a été développé selon les spécifications de la datasheet, utilisant une horloge de 16
MHz, accompagnée de deux condensateurs de 22 pF connectés en parallèle.

6
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

Les broches de RESET du composant MCP2515 ont été connectées à 5V avec une résistance de 10 kΩ, car
ce sont des broches actives à un niveau bas, afin d'éviter une réinitialisation non désirée. De plus, une LED
rouge avec une résistance de 150 Ω a été ajoutée entre la broche INT du composant MCP2515 et la source
de 5V pour signaler visuellement les interruptions causées par la réception de nouvelles trames CAN,
assurant ainsi la sécurité du système.

Module Arduino CAN BUS SHIELD

Matériel utilisé
Ce TP vise à établir une communication entre deux Arduino via le bus CAN, étant donné que l'interface
avec les équipements automobiles n'est pas accessible à tous. Pour cela, nous utiliserons deux Arduino
Uno, deux modules CAN Bus MCP2515 et des fils de prototypage. Le module MCP2515 offre une interface
SPI pour interagir avec les cartes de développement ne disposant pas de bus CAN telles que l'Arduino.
Ainsi, la communication entre l'Arduino et le module se fait via le protocole SPI, tandis que le module
traduit les commandes et données reçues en paquets CAN pour les transmettre sur le bus CAN. Équipé

7
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

d'un circuit MCP2551 pour gérer les signaux CanH et CanL (transceiver), le module MCP2515 est alimenté
par 5V et peut connecter jusqu'à 112 nœuds sur le bus.

Donc, afin de réaliser ce TP, on a besoin de deux Arduino Uno, des fils de prototypage et deux modules
MCP2515. On essaie de lire un message à partir du Serial Monitor du premier Arduino, le transmettre au
deuxième Arduino via le bus CAN et l’afficher dans le Serial monitor du deuxième Arduino. Par
conséquent, on relit le port VCC du module à la sortie 5v de l’Arduino, le GND dans le GND, le CS dans le
port 10, le SO dans le port 12, le SI dans le port 11 et le SCK dans le port 13. Il est impératif de vérifier si
les deux fils de CAN (rouge et bleu) ne sont pas inversés, sinon la communication ne se fera pas. Etant la
bibliothèque d’interfaçage du module MCP2515 n’est pas disponible par défaut sur l’éditeur Arduino, on
doit la télécharger et l’installer (https://github.com/autowp/arduino-mcp2515/archive/master.zip). Ou
télécharger dans l’interface IDE la bibliothèque CAN_BUS_SHIELD by Seeed Studio. Ensuite, le premier
Arduino doit être programmé en étant émetteur et l’autre en étant récepteur.

8
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

La première chose à faire avant d’utiliser le module MCP2515 consiste à inclure les bibliothèques
nécessaires (SPI et MCP2515), et configurer le module en choisissant le numéro du port CS du module
(pratiquement 10), puis en précisant la vitesse de transmission parmi une liste prédéfinie.

Figure : Code source d’envoi un message via le bus CAN en utilisant MCP2515

En outre, on précise la vitesse de l’horloge que le module doit utiliser telle que 8Mhz, 16Mhz et 20Mhz
(ligne 12). Consécutivement, on définit le mode de communication (ligne 13).

9
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

Figure : Code source de réception d’un message via le bus CAN en utilisant MCP2515

Après avoir configuré le module, l’émetteur prépare un paquet de données (de taille 11 octets) représenté
par une structure de données (4 octets ID, 1 octet DLC et 8 octets DATA). Donc, on lit le message tapé sur
le Serial Monitor et on le sauvegarde dans les 8 octets de DATA du paquet CAN pour le transmettre sur le
bus en utilisant la fonction sendMessage de l’objet MCP2515. Contrairement dans le récepteur, on utilise
la fonction readMessage pour lire les données reçues dans le bus et on les affiche dans le Serial Monitor
du deuxième Arduino.

La partie suivante est une explication détaillée des fonctions et opérations liées à la communication via le
bus CAN en utilisant le contrôleur MCP2515.

Check Receive :
Le MCP2515 peut fonctionner soit en mode interrogation, où le logiciel vérifie la réception d'une trame,
soit en utilisant des broches supplémentaires pour signaler qu'une trame a été reçue ou que la
transmission est terminée. Pour signaler qu'une trame a été reçue ou que la transmission est terminée.
Utilisez la fonction suivante pour interroger les trames reçues.

Get CAN ID :

Send Data :
Il s'agit d'une fonction permettant d'envoyer des données sur le bus. Dans laquelle :

10
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

Par exemple, dans l'exemple "envoyer", nous avons :

Receive Data :
Il s'agit d'une fonction permettant de recevoir des données sur le bus :

Dans les conditions où des masques et des filtres ont été définis. Cette fonction ne peut obtenir que les
trames qui répondent aux exigences des masques et des filtres.

Set Receive Mask and Filter


Il y a 2 registres de masque de réception et 5 registres de filtre sur la puce du contrôleur qui vous
garantissent de recevoir des données de l'appareil cible. Ils sont particulièrement utiles dans un réseau
important composé de nombreux nœuds. Nous mettons à votre disposition deux fonctions pour utiliser
ces registres de masque et de filtre. Elles sont :

Exemples de programmes :
Vous pouvez trouver des croquis de code dans la partie Fichier > Exemple > Exemples from Custom Libraries
> Can_Bus_Shield >

Module Emetteur (Master) :

11
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

Module Récepteur (Slave) :

Partie 1 : Familiarisation avec le matériel


Le travail consiste à lier deux modules ARDUINO en utilisant le bus CAN et l'identificateur Ox4F :

12
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

 Le premier module émetteur, équipé d'une carte CAN-Bus Shield, sera lié via une entrée digitale
(D7) à un bouton poussoir qui va simuler l'entrée d'un capteur TOR ou une consigne TOR. L'état
du bouton poussoir sera envoyée via le bus CAN au deuxième module récepteur.
 Le deuxième module récepteur, équipé aussi d'une carte CAN-Bus Shield, sera lié à une LED via
une sortie digitale (D4). Elle indiquera l'état du bouton poussoir :
o Si le bouton poussoir est relâché, on éteint la LED ;
o Si le bouton poussoir est appuyé, on allume la LED. La figure suivante donne une idée du
câblage à réaliser
1- Que représente l’indicateur 0x4F en binaire et donnez des exemples de capteur TOR
2- Réalisez le montage pour établir la communication entre cartes Arduino et contrôleur de bus can
MCP2515 avec interface SPI et émetteur-récepteur can MCP2551

3- Comment se fait la communication entre un Arduino et un MCP2515 CAN module via l'interface
SPI ?
4- Quelles sont les étapes pour initialiser le baudrate du système CAN Bus avec la bibliothèque
"CAN_BUS_Shield" de Seeed Studio ?
5- Comment vérifier si une trame a été reçue sur le module récepteur et comment lire son contenu
?
6- Quelle est la fonction utilisée pour envoyer des données sur le bus CAN et quels paramètres doit-
elle recevoir ?
7- Comment configurer les masques et les filtres de réception sur le contrôleur CAN MCP2515 pour
filtrer les trames reçues ?
8- Ecrivez les codes de communication correspondants à Module Émetteur (Master) et Module
Récepteur (Slave)

13
Bus industriel 4A GE SE Pr. Nisrine LACHGAR

Partie 2 : Projet Mini-communication Arduino


Maintenant que vous avez acquis les connaissances nécessaires sur la communication entre deux cartes
Arduino via le bus CAN, il est temps de mettre vos compétences en pratique en créant votre propre mini-
projet.

Votre tâche consiste à établir une communication entre deux cartes Arduino : l'une qui effectue
l'acquisition de données à partir d'un capteur de votre choix, et l'autre qui actionne un actionneur de
votre choix en fonction des données reçues.

Décrivez votre mini-projet en détail, y compris le capteur que vous avez choisi, l'actionneur que vous avez
sélectionné, et comment vous envisagez de les interconnecter avec les cartes Arduino.

Dans votre rapport, veuillez inclure les étapes suivies pour mettre en œuvre votre projet :

1. Sélectionnez et connectez votre capteur à la première carte Arduino. Décrivez le type de capteur
que vous utilisez et comment il est connecté.
2. Programmez la première carte Arduino pour lire les données du capteur et les transmettre via le
bus CAN.
3. Connectez la deuxième carte Arduino à un actionneur de votre choix. Décrivez l'actionneur choisi
et comment il est connecté à la carte Arduino.
4. Programmez la deuxième carte Arduino pour recevoir les données du bus CAN et actionner
l'actionneur en fonction des données reçues.
5. Testez votre système en vérifiant si les données du capteur sont correctement transmises et si
l'actionneur réagit correctement aux données reçues.

Assurez-vous d'inclure un code détaillé avec des commentaires expliquant chaque étape de votre
programmation.

Bon travail !

14

Vous aimerez peut-être aussi