Bus CAN et systèmes PSOC5 publié le 10/02/2013  - mis à jour le 17/10/2019

BUS CAN et PSOC5

1. Présentation

1.1 Généralités

Le Bus CAN (Control Area Network) est largement employé pour véhiculer des informations dans les systèmes embarqués. Sa robustesse en fait un bus de choix dans les domaines de l’automobile la marine et l’aviation.

 
Le bus CAN HS (High Speed) est un bus multi-maître qui permet la liaison entre un ensemble de nœuds (ECU : Electronic Control Unit). Le débit d’information peut atteindre 1Mbit/s.

Architecture d'un réseau de type bus can. Les noeuds et les terminaisons.
Structure du bus CAN

 
Les ECU sont réalisés à l’aide d’unités de traitements (microcontrôleurs, DSP ou ordinateurs) reliés à des ensembles "controller + transceiver". Le transceiver (coupleur différentiel) permet l’adaptation des niveaux électriques des tensions circulant sur le bus. Le contrôleur, quant à lui, a pour fonction de gérer les échanges de données sur le bus (priorité, erreur de données...).

 
Comme nous allons le voir dans la suite de l’article, le PSOC5 intègre la partie contrôleur.
 
Il suffira juste de lui adjoindre un transceiver afin de faire communiquer ce microcontrôleur avec un autre environnement (l’exemple que je décris ci-après concerne la communication entre deux kits PSOC5).

Architecture d'un bus can avec les ECU décomposées en processeurs, contrôleurs et transceivers.

1.2 Niveaux de tension, informations binaires et transceiver

La méthode de codage des bits composant la trame est de type « NRZ ». A chaque bit généré correspond un niveau de tension.

 
Les transceivers assurent la création des états Récessifs (1 logique) ou Dominants (0 logique) en appliquant sur le bus les niveaux de tension décrits ci-après. C’est la valeur de la tension différentielle appliquée sur le bus qui représente l’état souhaité .

Allure des niveaux de tension sur le bus CAN (signaux CANH et CANL).

1.3 Trame CAN

Le bus CAN est capable de véhiculer quatre types de trames :

  • Trame de données (voir description ci-dessous)
  • Trame de questionnement (remote frame)
  • Trame d’erreur (error frame)
  • Trame de surcharge (overload frame)
    Trame du bus can comportant tous les champs (de Start of Frame _SOF_ jusqu'à la fin de trame).

L’idée n’étant pas de commenter complètement le bus CAN j’arrête là la description du bus pour passer à son exploitation.


2. Exploitation du bus CAN avec le microcontrôleur PSOC5

2.1 Module transceiver

Afin d’interfacer correctement le contrôleur CAN présent dans le microcontrôleur, un module transceiver est nécessaire. Il est bien sur possible de le câbler directement sur la carte LAB du kit. J’ai préféré une réalisation offrant plus de modularité.

Schéma structurel du module transceiver et photographie du module (circuit imprimé)..

Le transceiver employé (TJA1050) a été implanté sur un circuit imprimé sur lequel existe la possibilité de placer les résistances de terminaison du bus (2 x 60 Ohms). Les documents nécessaires à la réalisation de cette interface sont accessibles :

 
L’exploitation proposée consiste à réaliser un émetteur ainsi qu’un récepteur. Toutes les déclinaisons/exploitations sont ensuite possibles.

2.2 L’émetteur, construction du projet

Le top design (PSOC Creator 1.0)
 

Design du projet émetteur sous PSOC creator 1.0

Il faut ajouter au top design le composant contrôleur CAN (renommé ici CAN_TX).

 
Il faut ensuite le configurer.
Arbitrairement le choix a été fixé à une vitesse de transmission de 500kb/s et 1 octet de champ de donnée.

 

 

 

 

Fenêtre de configuration générale du contrôleur CAN.

1. Imposer le nom du contrôleur CAN
2. ôter l’option du signal de validation du transceiver (on ne se servira que des broches RX et TX))
3. Sélectionner l’option Automatic

 

 

 

 

 

 

Fenêtre de configuration des timing du contrôleur CAN.


1. Choisir la vitesse de transmission
2. Sélectionner le timing désiré (double clic). Les champs de la ligne "3" seront complétés automatiquement.

 

 

 

 

 

 

Fenêtre de configuration des interruptions du contrôleur CAN.

Pas de manipulation ici, sauf si des besoins d’interruptions supplémentaires sont nécessaires.

 

 

 

 

 

 

Fenêtre de configuration du registre de transmission du contrôleur CAN.


1. Modification de DLC = 1 (longueur de donnée à transmettre ici, 1 octet)
2. Changement du nom de la case "mailbox" (champ de données) à transmettre.
3. Identification du noeud emetteur (codé sur 11bits _Full_ en mode IDE il est possible de coder l’identifiant sur 29 bits), choisi arbitrairement à 0x005.

Chaque "MailBox" peut contenir jusqu’à 8 octets à transmettre. Les variables permettant de compléter ces "mailboxes" sont identifiées ainsi dans la fonction CAN_TX_TX_RX_func.c (voir après) :

 
Pour la "mailbox0" (ici renommée TX_Message), la variable "container" est :
CAN_TX_TX_DATA_BYTE1(0).

 
Elle contient le premier octet à transmettre. Cela nous suffit puisque DLC=1. Si on avait désiré transmettre plus d’octets (DLC = 2 par exemple), il aurait fallu employer deux variables CAN_TX_TX_DATA_BYTE1(0) et CAN_TX_TX_DATA_BYTE2(0).

Fenêtre de configuration des broches du composant PSOC.

A ce stade il convient d’assigner les broches de l’afficheur ainsi que du contrôleur.

 

 
Il faut à présent construire le projet "Shift F6" et compléter le programme principal ainsi que la fonction CAN_TX_TX_RX_func.c qui a été générée


2.3 Programmation de l’émetteur

Le projet complet du transmetteur.

2.3.1 main.c

Texte programme main.c pour l'émetteur.

2.3.2 Modification de la fonction CAN_TX_TX_RX_func.c

Texte modification de programme de la fonction TX_func.c

A ce stade il reste à programmer le composant. C’est terminé pour la partie émetteur.

2.4 Le récepteur, construction du projet

Le top design (PSOC Creator 1.0)

Design du projet émetteur sous PSOC creator 1.0

Il faut ajouter au top design le composant contrôleur CAN (renommé ici CAN_RX).

Il faut ensuite le configurer afin qu’il puisse communiquer avec le module émetteur déjà mis au point.
(vitesse de transmission de 500kb/s et 1 octet de champ de donnée)

 

 

 

 
Les trois premières parties de la configuration du contrôleur sont identiques à celles de l’émetteur (General, Timing, Interrupt). Seule la partie "Receive Buffer" est à modifier .

Fenêtre de configuration du registre de réception du contrôleur CAN.


1. L’identifiant choisi est celui de l’émetteur dont on souhaite recevoir les données...donc 0x005.
2. Le nom "0" du champ "mailbox" est changé pour RX_Message. Cela permettra de créer une fonction de traitement de réception facilement identifiable.

 
Cette fonction sera nommée (on le verra après) "CAN_RX_ReceivedMsgRX_Message()" et sera exécuté dès que l’interruption IRQ aura lieu (réception d’un octet).
C’est dans la variable CAN_RX_RX_DATA_BYTE1(0), correspondante à la "mailbox0" que se retrouvera la donnée reçue.
 

 

 

Fenêtre de configuration des broches du composant PSOC.

A ce stade il convient d’assigner les broches de l’afficheur ainsi que du contrôleur.

 

 

 
Il faut à présent construire le projet "Shift F6" et compléter le programme principal ainsi que la fonction CAN_RX_TX_RX_func.c qui a été générée.

2.5 Programmation du récepteur

Le projet complet du récepteur.

2.5.1 main.c

Texte du programme main.c partie 1 du récepteur CAN.
Texte du programme main.c partie 2 du récepteur CAN.

2.5.2 Modification de la fonction CAN_RX_TX_RX_func.c

Modification du programme de la fonction RX_func.c.
A ce stade il reste à programmer le composant. C’est terminé pour la partie récepteur.

3. Au Final

Connecter les transceivers sur les deux kits ainsi qu’un câble CAN (ce qui n’est pas le cas sur la photo...). Tout devrait fonctionner parfaitement.

Nota : Comme les deux noeuds (émetteur et récepteur) terminent le bus, j’ai activé les résistances de terminaison (120 Ohms) des modules transceivers.

 
Quelques photographies...

Agencement des deux kits PSOC5 avec le câble de liaison CAN
Détail du câblage du module transceiver sur la platine du kit Psoc5.

 

 
Laurent Proust 2013

Impression

  Imprimer
  L'article au format pdf

Auteur

 Laurent Proust

Dans la même rubrique

 Bus CAN et systèmes PSOC5