Gestion de bus CAN



Le projet

Introduction
Le protocole CAN
Les composants CAN
Cartes développées
Programmation PPC
Environnement JerryCAN



Divers

L'Equipe
Sources
FAQ
Rapport en PDF

Site Web de Vincent


Cartes développées

3.1 Carte SJA1000-PPC.
3.1.1 Description
3.1.2 Utilisation
3.1.2.1 Macros de lecture-écriture
3.1.2.2 Exemples d'utilisation

3.2 Carte SLIO
3.2.1 Description
3.2.2 Utilisation
3.2.2.1 Calibration
3.2.2.2 Pilotage des sorties analogiques et digitales
3.2.2.3 Lecture des entrés analogiques ou digital

3.1 Carte SJA1000-PPC

Comme vu précédemment, le SJA1000 est un composant complet et assez simple d'emploi pour ajouter des fonctionnalités CAN à un système à base de microcontrôleur. Le 68HC912 de Motorola, intégrant un module CAN, n'étant pas encore au point, nous nous sommes tournés vers le PowerPC 403, dont la carte de développement existait déjà.

La carte d'interface (wrappée) implémente la partie protocole CAN ainsi que la couche physique de type bifilaire différentielle grâce au 82C250.

3.1.1 Description

Carte SJA1000-PPC (cliquez pour aggrandir)
Carte SJA1000-PPC (cliquez pour aggrandir)

  • IC1: SJA1000
  • IC2: 82C250
  • IC3: EP600
  • X1: Quartz 10MHz
  • R1: strap (définit la pente des transitions)
  • C1 à C4: 100 nF (découplage)
  • C5, C6: 33 pF

Les signaux de contrôle venant du PowerPC lors de cycles de lecture/écriture n'ont pas tout à fait le même format que ceux attendus par le SJA1000. La "glue logic" a été inclue dans un EPLD, ce qui permet une adaptation très simple à d'autres microcontrôleurs.

Le choix des broches rend possible l'utilisation d'un PAL22V10 à la place de l'EP600.

SC/ML/VO
ESIEE
March 1999

OPTIONS: TURBO=ON
PART: 5C060

INPUTS: CS5@2
        CS6@3
        OE@4
        WBE0@5

OUTPUTS: ALE@22
        CS@21
        RD@20
        WR@19

NETWORK:

CS5=INP(CS5)
CS6=INP(CS6)
OE =INP(OE)
WBE=INP(WBE0)

ALE1=NOT(CS5)
WRITE=OR(WBE,ALE1)

ALE=CONF(ALE1,VCC)
CS=CONF(CS6,VCC)
RD=CONF(OE,VCC)
WR=CONF(WRITE,VCC)

END$
Programme de l'EPLD (fichier cs.adf)

3.1.2 Utilisation

Les adresses et les données doivent être multiplexées sur le bus du SJA1000, c'est-à-dire que l'adresse est présentée en premier, puis ensuite viennent les données.

La lecture d'un registre se fait alors en deux temps : écriture de l'adresse (avec le CS5 du PPC positionné), puis lecture des données (avec CS6). De même l'écriture se fera en deux fois.

Lecture d'un registre
Lecture d'un registre

3.1.2.1 Macros de lecture-écriture

La lecture et l'écriture dans les registres du SJA1000 ont été implémentées sous forme de macros (fichier rwsja.h)

/*** Macros de lecture-ecriture SJA1000-PPC***/ 

/* Macro wrsjai : ecrit la donnee d dans le registre r */
   .macro  wrsjai d, r
    
    li	  r2,\r
    stb    r2,0(r18) 
    li	  r2,\d
    stb    r2,0(r19)

   .endm


/* Macro wrsja : registre p1 du PPC -> p2 du SJA1000 */
   .macro  wrsja p1, p2
    
    li     r2,\p2
    stb    r2,0(r18)
    stb    \p1,0(r19)
    
   .endm


/* Macro pour lire une donnee du SJA (registre p1 -> reg p2) */
   .macro  rdsja p1, p2
    
    li     r2,\p1
    stb    r2,0(r18)
    lbz    \p2,0(r19)
    
   .endm	
Macros de lecture-écriture (fichier rwsja.h)

3.1.2.2 Exemples d'utilisation

wrsjai    0xDB,OUTPUT_CONTROL
Pour écrire 0xDB dans le registre OUTPUT_CONTROL
wrsja    r3,TX_DATA
Pour écrire l'octet de poids faible du registre r3 dans le registre TX_DATA
rdsja    STATUS,r3
Pour lire le registre STATUS et placer le résultat sur l'octet de poids faible de r3

3.2 Carte SLIO

3.2.1 Description

Cette carte de démonstration est construite autour du SLIO (Serial Linked Input/Output) 82C150 de Philips. La configuration des entrées/sorties a été choisie de manière à donner une bonne idée des possibilités de ce SLIO. Elle a été développée et routée sous Protel.

  • P0-P3 : ID / Entrées digitales (switches)
  • P5 : Entrée analogique ADC1
  • P6 : Entrée analogique ADC2 (potentiomètre)
  • P7-P9,P11,P12 : Sorties digitales (LEDs)
  • P13 : Sélection des entrées
  • P15-P17 : Réservé multiplexage ADC

Schéma de la carte SLIO (au format postscript)

Les 4 entrées digitales sont multiplexées avec les 4 bits d'ID, eux aussi déterminés avec des switches. C'est un EPLD qui assure le multiplexage, commandé par la pin 14 du SLIO (qui n'est donc plus disponible comme entrée/sortie).

Les LEDs sont montées sur des connecteurs, ce qui permet d'utiliser ces sorties pour une autre utilisation.

Une des entrées analogiques est utilisée par un potentiomètre, l'autre peut servir pour un retour tachymétrique (pour un asservissement de moteur), ou pour toute autre source de tension entre 0 et 5V. Le multiplexage des entrées analogiques (en interne) occupe malheureusement 3 broches supplémentaires (P14 à P16) comme l'indique le schéma.

Enfin les sorties analogiques de type DPM (Discrete Pulse Modulation) sont amplifiées par des buffers (7407) avant d'attaquer des transistors de puissance. L'emploi de transistors PNP plutôt que NPN n'a pas de raison particulière, il est seulement dû à l'approvisionnement.

3.2.2 Utilisation

3.2.2.1 Calibration

Comme décrit dans la description du 82C150, il est nécessaire, pour que le SLIO reste calibré, de lui envoyer régulièrement un calibration message. Cette calibration doit se faire tous les 3000 à 8000 bit-times selon la documentation de Philips.

Par exemple, pour un débit de 50 kbit/s, soit un bit-time de 20 us, 5000 bit-times durent un dixième de seconde. Notre gestion des calibrations est décrite dans la partie Programmation PowerPC.

3.2.2.2 Pilotage des sorties analogiques et digitales

Il est tout d'abord nécessaire de configurer le registre OUTPUT_ENABLE des SLIOs. Sur la carte SLIO, étant donné les sorties utilisées, ce registre doit être mis à la valeur 0x3F90 (Pour effectuer cette affectation, voir le fichier slio.s) Une fois la configuration faite :

  • Pour une sortie digitale écrire dans le registre DATA_OUTPUT.
  • Pour une sortie DPM écrire dans les registre DPM1 ou DPM2.

3.2.2.3 Lecture des entrés analogiques ou digitales

Pour lire l'état des entrés digitales, il suffit de faire une lecture du registre DATA_INPUT Pour lire la valeur des ADCs, il faut configurer le registre ANALOG_CONFIGURATION (Pour effectuer cette configuration voir le fichier slio.s).

  • Ecrire 0xE0 pour une conversion sur l'ADC1
  • Ecrire 0xC0 pour une conversion sur l'ADC2.

Ces valeurs spécifient à la fois la configuration interne des multiplexeurs internes du SLIO (pour "router" le signal jusqu'au module ADC), et la demande de conversion (bit 8)

Une fois ces donnés reçues, le SLIO concerné effectue la conversion, et envoie une trame contenant le contenu de son registre ADC, c'est-à-dire le résultat de la conversion.


Moins un appareil remplit de fonctions, plus il les remplira parfaitement.
Remarque inquiète : Les ordinateurs sont les appareils les plus multifonctionnels qui soient, et notre société repose dessus.

Principe des Appareils Multifonctions.

Précédent : Les composants CAN

Suivant : Programmation PPC


TOP