1.
Référence des composants utilisés pour chaque couche :
Une arduino UNO .
UN module mcp2515 .
Fils de connexion .
2. Identification des nœuds communicants dans ce bus CAN:
Dans ce cas on a deux arduino UNO et deux modules mcp2515 donc on a
deux nœuds de communication .
[Link] si nécessaire un bus de communication intervenant dans les
échanges:
-En plus du bus CAN (CANH et CANL) entre les deux shields, un bus SPI est
utilisé en interne entre l’Arduino et le contrôleur MCP2515.
-Ce n’est pas un bus externe au système, mais à noter dans l’analyse :
Bus SPI entre Arduino et MCP2515
-Mais le bus CAN entre les deux nœuds est le seul bus de communication
inter-nœuds nécessaire.
[Link] en/hors service des résistances de terminaison (120 Ω)
2.2 Mise en œuvre de la communication entre 2 cartes Arduino :
5. Installer la librairie “CAN BUS Shield” :
6. Mettre en œuvre la communication en liaison avec l’autre binôme
en utilisant la librairie. L’une des cartes sera programmée avec le
projet send , l’autre avec le projet receive_check :
NOTE:On change la fréquence dans le code pour que la communication
fonctionne de 16Mhz a 8Mhz .
SEND:
RECEIVE:
7. Sur le moniteur série, vérifier la communication entre les deux
nœuds:
Pour receive : on reçoit qu’on a envoyer par l'autre PC (Send) ,pour notre
cas C’est la date 21 04 2025 et l’adresse 100 donc la communication entre
les deux nœuds existe .
8. Observer simultanément à l’oscilloscope les signaux CANH et CANL
puis les relever. (Régler la base de temps sur 20μs par carreaux et
relever les signaux sur une durée de 200μs):
9. Mesurer les niveaux de tension sur CANH et CANL et en d´eduire si
le bus est du type Low speed ou High speed :
Low speed (≤ 125 kbit/s): -1.5 V (récessif) ou +3 V (dominant).
High speed(≤ 1 Mbit/s) : 0–0.5 V (récessif) ou 0.9–2 V (dominant).
10. En utilisant l’analyseur logique, identifier les différents champs :
arbitrage, commande, etc.. sur une trame capturée:
● SOF (Start Of Frame) : 1 bit dominant (0 logique). Marque le début
de la trame.
● Champ d’arbitrage : 11 bits (CAN 2.0A) ou 29 bits (CAN 2.0B).
Détermine la priorité.
● DLC (Data Length Code) : 4 bits indiquant le nombre d’octets de
données (0 à 8).
● CRC : 15 bits calculés pour détecter les erreurs + 1 bit récessif
(délimiteur).
[Link] les programmes pour que l’identificateur soit 84. Vérifier
le bon fonctionnement:
12. Modifier les programmes pour que l’identificateur soit 3 et que la
seule donnée transmise soit 0x5B , ainsi la trame correspondra à celle
analysée :
13. Relever le CRC ( Cyclic Redundancy Code) dans la trame. Utiliser
les documents illustrant le calcul du CRC pour justifier la valeur
obtenue :
[Link] entre les nœuds :
15. Avant de charger le programme ”send” dans deux cartes Arduino
et ”Check Receive” dans la troisième, vérifier que la période de retard
est de 2 millisecondes (delay(2)):
16. Utiliser les identificateurs 0xAA et 0xBB, qu’est ce que vous
remarquez dans le moniteur de la carte réceptrice :
-On remarque dans l'afficheur qu’il ya plus de identifiant AA que l’identifiant
BB .
-Puis on change dans le PC ou depuis on envoi l’identifiant AA avec BB et on
fait la même chose sur le deuxième PC .
-Dans cas , on remarque dans l'afficheur qu’il y a plus d’ identifiant BB que
l’identifiant AA.
Donc ça veut dire que ya un PC qui a la priorité .
[Link]-on utiliser l’identificateur 0xFF ? Pourquoi ? :
Non, on ne peut pas utiliser l'identifiant 0xFF .
Règle CAN 2.0A Les 7 bits les plus significatifs (ID10 à ID4) ne doivent pas
tous être à 1 0xFF → 11111111 → Violation de la règle.
Solution : Utiliser un identificateur comme 0x7FF (valide en CAN 2.0B).
4 Communication avec un tableau de bord d’une voiture :
18. Dans la premi`ere ligne du code Send déclarer ces variables :
19. Declarer cette donnée dans la partie void loop():
20. Lire la fréquence du quartz utilisé dans la carte mcp2515 puis
corriger le baud rate de l’instruction [Link] :
La fréquence utilisée dans la carte mcp2515 est de 8mhz
21. Envoyer cette donnée avec l’identifiant 0x280 comme suit :
L’envoi de 0x280 déclenche une mise à jour du régime moteur sur le
tableau de bord, grâce au protocole CAN et au décodage des données RPM.
22. Changer la valeur de la variable rpm. Qu’est ce que vous
remarquez ? vous pouvez exploiter l’instruction [Link]() pour lire
rpm : Le tableau
de bord affiche un régime proportionnel à rpm par exemple
Si rpm = 5000, le compteur indique ≈ 5000 tr/min.
23. Envoyer cette donnée byte data2[8]={ 0, 0x80, 0, 0, 0, 0, 0, 0 }
avec l’identifiant 0x3D0,Que remarquez-vous :
Commande pour allumer un feu de position.
24. Déclarer ces variables :
On remarque que le clignotant gauche s’allume .
La variable blinker peut prendre les valeurs 0,1,2 et 3:
blinker = 0 → Éteint.
blinker = 1 → Droite
blinker = 2 → Gauche..
blinker = 3 → Feu de détresse .
25. Réaliser le montage illustré à la figure suivante :
26. Analyser le trafic des trames dans le bus CAN en utilisant
l’analyseur logique:
On va utiliser une logic cube zeroplus pour faire cette analyse .
Avant d’analyser le trafic des trames on fait la configuration sur le logiciel .
On obtient ces résultats :
13. Relever le CRC ( Cyclic Redundancy Code) dans la trame. Utiliser
les documents illustrant le calcul du CRC pour justifier la valeur
obtenue:
1. Donnée à envoyer :
○ Selon la question 14, la donnée est 0x5B (soit 01011011 en
binaire).
○ Cette donnée fait partie du champ de données de la trame
CAN.
2. Champs inclus dans le calcul du CRC :
○ SOF (1 bit dominant),
○ Champ d’arbitrage (11 bits),
○ Champ de commande (6 bits),
○ Champ de données (0x5B, soit 8 bits).
3. Polynôme générateur :
g(x)=x^15+x^14+x^10+x^8+x^7+x^4+x^3+x^0 .
(Correspond à la valeur hexadécimale 0x4599).
4. Calcul du CRC :
○ Concaténer les bits des champs (sans les bits de stuffing).
○ Diviser cette suite binaire par g(x)g(x) via une division modulo-
2.
○ Le reste de la division donne le CRC.
5. Exemple avec 0x5B :
○ Donnée brute : 01011011.
○ CRC calculé :
CRC=0x2A8F(valeur throrique pour g(x)=0x4599).
6. Vérification sur l’analyseur logique :
○ Capturer la trame CAN avec l’identificateur 0x03 et la donnée
0x5B.
○ Observer le champ CRC (15 bits) et le comparer à 0x2A8F.
COMMENT UTLISER ANALISEUR ZEROPLUS
EXEMPLE DUN TRAM BUS-CAN
FIRST DELET ALL THE CHANEL SECOND CHOSE CHANEL ASSIGNEMENT
THIRD CILIC ADD BUS AND FOURTH WE CHOSE
CHOSE CHANEL 0 10MHZ AND 512K AND 0%
FIFTH SIX
NOW WE GO CLICK FOR PROTOCOL DECODER AND
CHOSE BUS CAN
SEVEN EGHIT
WE ADD CAN CHANEL
NINE TEN
CLICK IN RUN SEE DATA
ELEVEN TWOLEVE
ADD PLCKLIST CLICK AT F10
WE SEE COMPLET CAPTURE DATA
CONCLUSION
Dans ce TP, nous avons exploré le fonctionnement du bus CAN
(Controller Area Network) à travers une application concrète liée au
tableau de bord d’un véhicule. Nous avons utilisé deux cartes Arduino
Uno pour envoyer et recevoir des données via le bus CAN. Un moteur
a été utilisé comme simulateur de vitesse, et les données de vitesse
ont été visualisées sur le tableau de bord.
Nous avons également décodé les trames CAN à l’aide de l’analyseur
logique ZEROPLUS, ce qui nous a permis d'observer la structure des
trames en détail (identifiant, données, CRC, etc.). De plus, nous avons
pu visualiser les signaux électriques du bus CAN à l’oscilloscope,
confirmant le bon échange de données entre les nœuds.
Ce TP nous a permis de mieux comprendre la communication entre
différents composants d’un système embarqué automobile, ainsi que
l’importance du protocole CAN dans les systèmes en temps réel pour
garantir fiabilité, rapidité et intégrité des données.