Le bus CAN (Controller Area Network) est un protocole de communication robuste utilisé
principalement dans les systèmes embarqués, notamment dans l'automobile, les systèmes
industriels, et les dispositifs médicaux. Il permet à plusieurs microcontrôleurs et périphériques
de communiquer entre eux sans avoir besoin d'un ordinateur hôte.
Caractéristiques principales du bus CAN :
1. Communication rapide et fiable :
o Débit jusqu'à 1 Mbps (CAN classique).
o Le CAN FD (Flexible Data-rate) permet des débits plus élevés et des trames
plus grandes.
2. Protocole multi-maîtres :
o Tous les nœuds connectés peuvent initier la communication.
3. Priorisation des messages :
o Chaque trame possède un identifiant unique qui détermine sa priorité sur le
bus.
4. Tolérance aux erreurs :
o Utilisation de mécanismes comme la détection et la correction d'erreurs,
garantissant une communication fiable.
5. Faible consommation de câblage :
o Nécessite seulement deux fils (CAN_H et CAN_L) pour transmettre les
données.
Applications typiques :
Automobile : Communication entre l’ECU (Electronic Control Unit), capteurs et
actionneurs.
Industrie : Automatisation des machines (par ex., via CANopen ou DeviceNet).
Médical : Équipement de diagnostic et de contrôle.
Structure d'une trame CAN classique :
1. Start of Frame (SOF) : Début de la trame.
2. Identifiant : Définit la priorité du message.
3. Control Field : Indique la longueur de la donnée.
4. Données : De 0 à 8 octets (jusqu'à 64 octets pour CAN FD).
5. CRC (Cyclic Redundancy Check) : Vérifie l’intégrité.
6. ACK : Confirmation de réception.
7. End of Frame (EOF) : Fin de la trame.
Le bus CAN (Controller Area Network) est une technologie fascinante et très utilisée dans les
systèmes embarqués pour sa robustesse et sa simplicité d'implémentation. Voici une
explication plus approfondie de ses aspects techniques, pratiques, et des outils associés.
1. Comment fonctionne le bus CAN ?
Le bus CAN est basé sur une architecture différentielle avec deux lignes principales :
CAN_H (CAN High)
CAN_L (CAN Low)
Ces deux lignes transmettent des signaux opposés (différentiels) pour améliorer la robustesse
aux interférences électromagnétiques.
Communication :
Arbitrage non destructif : Lorsque plusieurs nœuds envoient simultanément des
messages, l'identifiant (ID) de la trame est utilisé pour déterminer la priorité. Le
message ayant l'ID le plus faible (bit dominant) gagne l'accès au bus, et les autres
nœuds cessent leur transmission sans collision.
Pas de perte de données : Si un message n'a pas été transmis à cause de l'arbitrage, il
sera réessayé plus tard.
2. Types de messages dans le CAN
1. Message de données (Data Frame) :
o Transporte les données utiles (payload).
2. Message de demande (Remote Frame) :
o Permet de demander une trame de données spécifique.
3. Message d’erreur (Error Frame) :
o Signal envoyé en cas d'erreur détectée par un nœud.
4. Message de surcharge (Overload Frame) :
o Indique une surcharge temporaire dans le réseau.
3. Protocole CAN classique vs CAN FD
Caractéristique
CAN classique
CAN FD
Débit
Jusqu'à 1 Mbps
Jusqu'à 8 Mbps
Taille des données
Jusqu'à 8 octets
Jusqu'à 64 octets
Tolérance aux erreurs
Standard
Améliorée (plus robuste)
Applications
Basique
Systèmes complexes et avancés
4. Exemples d'utilisation
1. Automobile :
o Communication entre ECU (ex : moteur, ABS, airbags).
o Normes associées : OBD-II (diagnostic à bord), SAE J1939 (véhicules lourds).
2. Industriel :
o Protocole CANopen pour les automates programmables et les capteurs.
3. Santé :
o Contrôle des dispositifs médicaux comme les pompes à perfusion.
5. Outils de développement pour le CAN
Voici quelques outils largement utilisés pour développer et analyser les réseaux CAN :
Cartes CAN et adaptateurs :
PEAK-System : Adaptateurs USB-CAN comme le PCAN-USB.
Kvaser : Interfaces CAN performantes.
NI USB-8473 : Matériel National Instruments pour CAN.
Logiciels d’analyse :
CANalyzer (Vector) : Analyse et simulation des réseaux CAN.
CANoe (Vector) : Solution avancée pour tester les systèmes distribués.
SocketCAN : Interface logicielle sous Linux.
Micrologiciels (firmwares) :
Microcontrôleurs avec contrôleur CAN intégré (ex : STM32, NXP, Microchip).
Stack CANopen open-source : CANopenNode, Embedded CANopen.
6. Exemple pratique d’implémentation avec STM32
Configuration matérielle :
Utilisez un microcontrôleur comme le STM32F103.
Ajoutez un transceiver CAN (ex : MCP2551) pour la conversion du signal logique en
signal différentiel.
Configuration logicielle :
Voici un exemple de configuration basique en C utilisant HAL (Hardware Abstraction Layer)
:
CAN_HandleTypeDef hcan;
void CAN_Config(void) {
hcan.Instance = CAN1;
hcan.Init.Prescaler = 16;
hcan.Init.Mode = CAN_MODE_NORMAL;
hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
hcan.Init.TimeSeg1 = CAN_BS1_13TQ;
hcan.Init.TimeSeg2 = CAN_BS2_2TQ;
hcan.Init.AutoBusOff = ENABLE;
hcan.Init.AutoWakeUp = ENABLE;
hcan.Init.ReceiveFifoLocked = DISABLE;
hcan.Init.TransmitFifoPriority = ENABLE;
if (HAL_CAN_Init(&hcan) != HAL_OK) {
// Gestion des erreurs
}
}
Exemple de trame de données :
CAN_TxHeaderTypeDef TxHeader;
uint8_t TxData[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
uint32_t TxMailbox;
TxHeader.StdId = 0x321;
TxHeader.ExtId = 0x01;
TxHeader.RTR = CAN_RTR_DATA;
TxHeader.IDE = CAN_ID_STD;
TxHeader.DLC = 8;
if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox) != HAL_OK) {
// Gestion des erreurs
}
7. Apprentissage et Ressources
Normes et documentations : ISO 11898-1 (CAN classique), ISO 11898-2 (CAN
FD).
Livres :
o A Comprehensible Guide to Controller Area Network (Wilfried Voss).
o Embedded Networking with CAN and CANopen (Olaf Pfeiffer).
Tutoriels : Explorez les guides de STMicroelectronics, Microchip, et NXP.
Souhaitez-vous un exemple concret pour un projet, ou une explication détaillée sur une
fonctionnalité spécifique ?
Voici un exemple pratique et détaillé d'un projet utilisant le bus CAN, basé sur un
microcontrôleur STM32 et le périphérique intégré CAN.
Projet : Communication CAN entre deux
microcontrôleurs STM32
Objectif
Deux microcontrôleurs STM32 vont échanger des données via le bus CAN. L'un des
microcontrôleurs (émetteur) envoie une trame contenant des informations (ex. température,
pression). L'autre (récepteur) affiche ces données.
Matériel nécessaire
1. Deux cartes de développement STM32 (ex : STM32F103 ou STM32F4).
2. Deux transceivers CAN (ex : MCP2551 ou TJA1050).
3. Résistances de terminaison (120 Ω).
4. Câbles pour connecter CAN_H et CAN_L.
Schéma de connexion
1. Microcontrôleurs :
o Connectez les broches CAN_TX et CAN_RX du STM32 aux entrées
correspondantes du transceiver (ex. MCP2551).
o Exemple pour un STM32 :
CAN_TX (PA12)
CAN_RX (PA11)
2. Transceivers CAN :
o Connectez les sorties CAN_H et CAN_L des deux transceivers.
o Ajoutez une résistance de terminaison de 120 Ω entre CAN_H et CAN_L à
chaque extrémité du bus.
STM32 (Émetteur) --> Transceiver CAN --> CAN_H / CAN_L --> Transceiver CAN
--> STM32 (Récepteur)
Configuration logicielle
1. Code pour l’émetteur STM32
Voici un exemple en C utilisant la bibliothèque HAL :
#include "main.h"
CAN_HandleTypeDef hcan;
CAN_TxHeaderTypeDef TxHeader;
uint8_t TxData[8] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
uint32_t TxMailbox;
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!