CAN Bus Interface fuer PC

background image

Um einen PC für den Anschluß eines CAN-
Busses vorzubereiten, soll eine der vorhan-
denen Schnittstellen genutzt werden.
Dadurch erübrigt sich eine spezielle I/O-Ein-
steckkarte, so dass die Schaltung auch an

Notebooks arbeiten kann. Obwohl
durchaus praktikabel, haben wir uns
gegen die serielle Schnittstelle ent-
schieden, denn nur die Parallel-
schnittstelle erlaubt es, die hohe

Übertragungsrate eines CAN-Bus-
Systems auszunutzen. Da über das

Interface nicht nur Daten gesendet,

sondern auch empfangen werden

sollen, muß die Parallelschnitt-

stelle für bidirektionalen Daten-

verkehr eingestellt sein. Dies

geschieht bei Einsteckkarten

über Jumper auf der Platine

oder bei modernen Pentium-

Boards über das BIOS-Setup

(EPP-Modus). Auch Uralt-PCs

kommen zu neuen Ehren, wenn
diese mit kostengünstigen bidirek-

tionalen Schnittstellenkarten aus

dem Handel nachgerüstet werden.

Hardware

Die Schaltung ähnelt der in Elektor

11/99 vorgestellten Interface-Schal-
tung für Mikrocontroller wie ein Ei
dem anderen, so dass die Beschrei-
bung der Hardware und ihres Auf-
baus entsprechend knapp ausfallen
kann. Der Hauptunterschied zwi-
schen beiden Schaltungen liegt
natürlich in der Software.
Als CAN-Bus-Controller arbeitet wie-
derum ein SJA1000 (wer noch einen

MIKROPROZESSOREN

58

Elektor

6/2000

CAN-Bus-Interface

für PC

Mit neuer Software

Entwurf von Reiner Lock

Die Möglichkeiten eines CAN-Bus-Systems steigen mit der Zahl
unterschiedlicher Geräte, die am Bus betrieben werden können.
Mit dem hier vorgestellten Interface kann jeder PC an einen
CAN-Bus angeschlossen werden.

background image

ledge (Pin 10) als Interruptquelle für den
SJA1000 genutzt wird.
Durch die galvanische Trennung des CAN-
Busses wird die Einkopplung von Störspan-
nungen in beide Richtungen erschwert,
außerdem ergibt sich ein beruhigender
Schutz des PCs vor Überspannungen auf dem
CAN-Bus. Wer eine kostengünstige Lösung
sucht und auf die galvanische Trennung ver-
zichten möchte, kann einfach den DC/DC-
Wandler weglassen und +5 V und Masse
zwischen Primär- und Sekundärseite über-
brücken.
Mit Jumper JP1 kann der Abschlußwider-
stand von 120

Ω zugeschaltet werden.

Grundsätzlich sollen die Abschlußwider-
stände nur an den Enden der CAN-Bus-Linie
angeschlossen werden. Wenn in einem
System einzelne Busteilnehmer häufig an-
und wieder abgekoppelt werden, ist es bes-
ser, wenn die Abschlußwiderstände auf der
Platine nicht benutzt und statt dessen Sub-
D-Stecker mit eingelötetem 120-

Ω-Wider-

stand als Busabschluß verwendet werden.
Die Verdrahtung der 9-poligen Sub-D-Verbin-
der ist in der CAN-Norm nicht festgelegt. So
wurde gegenüber früheren Elektor-Veröffent-
lichungen zum Thema CAN-Bus nicht nur die
Anschlüsse 7 und 2 vertauscht, sondern auch
mit dem Grundsatz gebrochen, daß der CAN-

PCA82C200 in Reserve hat, kann
auch diesen Controller verwenden),
der im Novemberheft ausführlich
beschrieben wurde. Das vollständige
Datenblatt kann man von

www.semiconductors.philips.com

herunterladen. Der Spannungsteiler
R14/R15 ist eigentlich nur beim
PCA82C200 nötig, schadet dem
SJA1000 aber nicht. Besser ist es
aber, R14 wegzulassen und R15
durch eine Drahtbrücke zu ersetzen,
so dass der RX1-Anschluß fest auf
Masse liegt. Die Software muss den
internen Komparator CBP aus- und
damit den internen Schmitt-Trigger
des SJA1000 einschalten. Dazu
schreibt man in das Register OCR

den Wert 1A

HEX

und setzt Bit 6 im

Register CDR.
Der SJA1000 wurde mit seinen
Schreib- und Leseleitungen für den
direkten Anschluß an Mikrocontrol-
lersysteme entwickelt. Die Schreib-
und Leseleitungen müssen deshalb
entsprechend dem Chip-Timing per
Software bedient werden. Das Daten-
register der parallelen Schnittstelle
(Pin 2...9 von K3) wird direkt mit dem
gemultiplexten Daten/Adreßbus des
CAN-Controllers verbunden. Der
Lese/Schreibbefehl und ALE gelan-
gen über drei Centronics-Steuerlei-
tungen (Autofeed, Init Printer, Select
Input) zum Controller, während von
den Statusregistern nur Acknow-

MIKROPROZESSOREN

59

6/2000

Elektor

Technische Daten

– Interface für parallele Schnittstelle im bidirektionalen EPP—Modus
– CAN-Bus-Anschluß über gebrückte 9-polige Sub-D-Verbinder
– Abschlußwiderstand 120

Ω zuschaltbar

– CAN-Controller SJA1000 oder PCA82C200
– Busankopplung über Transceiver PCA82C250
– Galvanische Trennung durch Optokoppler und Gleichspannungswandler
– Stromversorgung 9...12 V über Steckernetzteil

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

K3

K1

1

2

3

4

5

6

7

8

9

K2

1

2

3

4

5

6

7

8

9

7805

IC6

6N137

IC2

OUT

NC

EN

AN

CA

NC

2

7

8

5

6

3

1

4

82C250

IC4

CANH

CANL

VREF

TXD

RXD

PCA

RS

5

6

3

2

1

4

7

8

C4

100n

C11

100n

C10

100n

C9

100n

C3

10µ

25V

C8

1µ 10V

C7

100µ 10V

0505SA

IC5

VIN

NMV

V+

0

7

2

5

1

C1

22p

C2

22p

X1

16MHz

8x 4k7

1

2

3

4

5

6

7

8

9

R26

R25

4x 4k7

1

5

4

3

2

R2

390

R11

390

R12

390

R10

390

C5

470µ
25V

C6

220µ
10V

R16

56k

R14

10k

R15

10k

R17

390

R21

390

R13

4k7

R24

120

R22

56

R23

56

R20

10k

R19

390

R18

390

D1

12V

D2

12V

JP1

R1

390

R3

390

R4

390

R5

390

R6

390

R7

390

R8

390

R9

390

13

12

1

IC7f

D3

1N4004

SJA1000

CLKOUT

XTAL1

XTAL2

IC1

MODE

ALE

AD7

TX0

RX0

AD6

AD5

AD4

AD3

AD2

AD1

AD0

INT

RST

TX1

RX1

RD

WR

CS

13

22

21

18

15

12

19

28

27

26

25

24

23

16

17

11

14

20

10

8

2

1

1

2

3

2

3

1

6

5

4

3

7

9

PCA82C200

1

2

1

IC7a

3

4

1

IC7b

5

6

1

IC7c

9

8

1

IC7d

11

10

1

IC7e

5V

5V

5V

5V

6N137

IC3

OUT

NC

EN

AN

CA

NC

2

7

8

5

6

3

1

4

5V

5V

5V

5V

5V

IC7

14

7

IC7 = 7404

U

b

U

b

U

b

U

b

9V

000039 - 11

5V

50mA

Bild 1. Die Schaltung des CAN-Bus-Interface zur parallelen PC-Schnittstelle.

background image

Bus in beide Richtungen gleich ist. Statt des-
sen wird eine männliche und eine weibliche
Buchse eingesetzt, so dass die Interface-Pla-
tine aus dem Bus entfernt werden und die
beiden Buskabel einfach ineinander gesteckt
werden können. Bedenken Sie, das die Num-
merierung eines Male- und eines Female-Ver-
binders gespiegelt sind.

Software

Zum PC-Interface gehört ein DOS-Programm,
mit dem das Interface in Betrieb genommen
werden kann. Das Programm und sein Quell-

kode ist auf Diskette 006004-1 erhält-
lich. Bevor das Programm gestartet
wird, muß das Interface mit der
Druckerschnittstelle und mit einer
Versorgungsspannung von 9...12 V
verbunden werden. Eine Verbindung
zum CAN-Bus ist zu diesem Zeit-
punkt noch nicht erforderlich.
Nach dem Programmstart unter DOS
oder im DOS-Fenster gibt man die
Adresse der Druckerschnittstelle an,
anschließend taucht das Programm-
Menü auf. Bei der ersten Menünum-
mer erscheinen drei Spalten wie in

Bild 3. In der ersten Spalte (Reg)
wird die Registeradresse, in der
zweiten und dritten Spalte der Regi-
sterinhalt hexadezimal beziehungs-
weise als ASCII-Zeichen angezeigt.
Sollte sich in allen Registern der
Wert FF oder die Daten 00, 01, 02, 03
und so weiter befinden, dann ist ent-
weder die Schnittstelle falsch adres-
siert oder sie arbeitet nicht bidirek-
tional. Ein Hardware-Reset (Netz-
stecker raus, Netzstecker rein) kann
diesen Makel beheben.
Funktioniert das Interface korrekt, so
lassen sich alle Register mit Aus-
nahme der Register 4..8 lesen. Diese
Register werden erst im Initialisie-
rungsmodus zugänglich, wenn das
Reset-Request-Bit (RR) des Com-
mand Registers auf 1 gesetzt ist. Der
unterschiedliche Zugriff wird durch
zwei verschiedene Schreib- bezie-
hungsweise Lesebefehle im Menü
(RR = 0 oder RR = 1) einfach mög-
lich (siehe Kasten).

Ändern des Identifiers

Der Identifier ist nach Programm-
start auf 300 (00100101100

B

) einge-

stellt. Soll der ID beispielsweise 512
(01000000000

B

) lauten, so müssen

die Bits ID3...ID10 in das Register 10
und die Bits ID0...ID2 in das Register
11 an Bitposition 5...7 geschrieben
werden. Bit 4 repräsentiert das RTR-
Bit und wird bei der Übertragung
eines Datensatzes (Data Frame) auf
0 gesetzt. Die Bits 0...3 legen die
Anzahl der zu übertragenden Bytes
nach der Formel

Anzahl= 8*DLC.3 + 4*DLC.2 +
2*DLC.1 + DLC.0

fest. Sollen acht Byte übertragen
werden, so muß in das Register 11
der Wert 8

D

(00001000

B

) geschrieben

werden. Mit dem Menübefehl 3 wird
also 64

D

in das Register 10 und

anschließend 8

D

in Register 11

geschrieben. Nach DIN ISO 11898
sind die Identifier 2032..2047 reser-
viert und dürfen nicht benutzt wer-
den. Die sieben höchstwertigen Bits
dürfen also nicht gleichzeitig 1 sein.

Ändern der Eingangsfilter

Durch die Eingangsfilterung wird
erreicht, dass nur Datensätze mit
vorher festgelegten Identifiern vom

MIKROPROZESSOREN

60

Elektor

6/2000

Bild 2. Programm-Menü des CAN-Controllers bei Reset Request=0.

Bild 3. Register des CAN-Controllers. Die Register 4...8 sind gesperrt.

background image

benutzt werden. In der Voreinstellung steht
im Acceptance Mask Register (Nummer 5)
255

D

(11111111

B

), so dass alle einkommenden

Nachrichten akzeptiert und übernommen
werden. Das Register kann mit dem Menü-
befehl 4 (RR = 1) verändert werden.

CAN-Bus-Controller übernommen
werden. Berücksichtigt werden nur
die obersten 8 Bit des Identifiers.
Eine Nachricht wird übernommen,
wenn bei jeder Bitposition, bei der
im Acceptance Mask Register eine 0
steht, eine Übereinstimmung zwi-

schen der zugehörigen Bitposition
im Identifier und im Acceptance
Code Register
festgestellt wird. Der
Zugriff auf diese Register, erfolgt,
wenn das RR-Bit vorher auf 1 gesetzt
wurde. Daher muß zum Anzeigen
der Register der Menübefehl 2

MIKROPROZESSOREN

61

6/2000

Elektor

(C) ELEKTOR

000039-1

C1
C2

C3

C4

C5

C6

C7

C8

C9

C10

C11

D1

D2

D3

H1

IC1

IC2

IC3

IC4

IC5

IC6

IC7

JP1

K1

K2

K3

R1

R2

R3
R4
R5
R6
R7

R8

R9

R10

R11

R12

R13

R14

R15

R16

R17

R18

R19

R20

R21

R22
R23

R24

R25

R26

X1

000039-1

0

+

1

(C) ELEKTOR

000039-1

Bild 4. Layout und Bestückungsplan der Interface-Platine.

Stückliste

Widerstände:

R1...R12,R17...R19,R21 = 390

R13 = 4k7
R14,R15,R20 = 10 k
R16 = 56 k
R22,R23 = 5

Ω6

R24 = 120

R25 = 4-fach-SIL-

Widerstandsarray 4k7

R26 = 8-fach-SIL-

Widerstandsarray 4k7

Kondensatoren:

C1,C2 = 22 p
C3 = 10

µ/25 V stehend

C4,C9...C11 = 100 n, RM5
C5 = 470

µ/25 V stehend

C6 = 220

µ/10 V stehend

C7 = 100

µ/10 V stehend

C8 = 1

µ/10 V oder MKT R;5

Halbleiter:

D1,D2 = Z-Diode 12 V/400 mW
D3 = 1N4004
IC1 = PCA82C200 oder SJA1000

* (Philips)

IC2,IC3 = 6N137 (u.a. Toshiba)
IC4 = PCA82C250 (Philips)
IC5 = NMV0505SA (Newport, bei

Farnell 589 810)

IC6 = 7805

Außerdem:

JP1 = Jumper
K1 = 9-polige Sub-D-Verbinder für

Platinenmontage, gewinkelt, male

K2 = 9-polige Sub-D-Verbinder für

Platinenmontage, gewinkelt,
female

K3 = 25-polige Sub-D-Verbinder

für Platinenmontage, gewinkelt,
male

2 Lötnägel
X1 = Quarz 16 MHz
Software EPS 006004-1
(DOS-Interface mit C-Quellkode)
Platine EPS 000039-1

background image

CAN-Bus-Anschluss

Nach der erfolgreichen Inbetriebnahme sollte
nun das Interface mit dem CAN-Bus verbun-
den werden. Für die weiteren Schritte muß
sich mindestens ein weiterer Busteilnehmer
am Bus befinden, zum Beispiel ein weiterer
PC.
Auf den Menübefehl Nummer 7 hin wird eine
Datenübertragung ausgelöst, der im Sende-
puffer befindliche Datensatz entsprechend
den Übertragungsparametern auf den Bus
gegeben. Bei der Programminitialisierung

wird bereits eine Buchstabenkombi-
nation in den Sendepuffer geschrie-
ben, die nun bei der Empfangssta-
tion im Empfangspuffer ankommt.
Außerdem zeigt das Statusregister
(Nummer 2) den Empfang einer
Nachricht an, indem es Bit SR.0
setzt. Dieses Bit wird durch den
Menübefehl 8 wieder zurückgesetzt.
Der Controller besitzt einen zwei
Datensätze umfassenden FIFO-Emp-
fangspuffer. Läuft dieser Puffer über,

so wird Bit SR.1 im Statusregister
gesetzt. Menübefehl 9 setzt dieses
Bit wieder zurück.
Eine Art “Fernschreibermodus” bie-
tet der Menübefehl 5. Jedes über die
Tastatur eingegebene Zeichen wird
sofort auf den CAN-Bus übertragen
und erscheint auf allen am PC ange-
schlossenen Empfangsstationen. Um
eine eigene interessante Kommuni-
kation mit diesem Interface aufzu-
bauen, steht das Programm auch als
Quellcode in C zur Verfügung. Wer
das Programm entsprechend abän-
dert, kann auch mit nur einem PC,
zwei Schnittstellenkarten und zwei
Interfaces Experimente am CAN-Bus
durchführen.
Für die Kommunikation mit dem
CAN-Bus-Controller stehen drei
Funktionen zur Verfügung, die als
Treiber sehr einfach in jedes C-Pro-
gramm eingebunden werden kön-
nen.

Mit der Funktion
wr_can(uchar

adr, uchar

wert)
wird das Byte wert in das mit adr
bestimmte Register geschrieben.

Die Funktion
rd_can(uchar adr)
liefert den Inhalt des mit adr fest-
gelegten Registers zurück.

Für die Initialisierung kann die Funk-
tion
initSJA1000()
benutzt werden.

(000039)rg

Literatur

[1] W. Lawrentz (Hrsg.)

CAN System Engineering
1997 Springer Verlag New York

[2] Philips

SJA1000 Stand-alone
CAN controller DATA SHEET

www.semiconductors.philips.com

[3] Bosch

CAN Specification version 2.0
Robert Bosch Gmbh Stuttgart

[4] DIN ISO 11898

DIN, Beuth Verlag Berlin

MIKROPROZESSOREN

62

Elektor

6/2000

Software in C

Mit der Treibersoftware kann man auf alle 32 Steuerregister zugreifen. Über ein kleines
Menü können die einzelnen Register geschrieben, gelesen und somit die gesamte Kommu-
nikation abgewickelt werden. Außerdem besteht unter den Menüpunkten 11...13 die Mög-
lichkeit, für Testzwecke direkt auf die PC-Register der Schnittstelle zuzugreifen. Die PC-
Schnittstelle muß per Jumper oder im BIOS auf bidirektionalen Betrieb im EPP-Modus ein-
gestellt werden. Die Übertragungsrate wird während der Initialisierung auf 1 MBit/s
festgelegt.

Die Treibersoftware besteht im wesentlichen aus drei Funktionen:

1. void init82C200()

Die Funktion initialisiert den CAN-Bus-Controller entsprechend der Hardware-
konfiguration. Die Übertragungsrate ist auf 1 MBit/s eingestellt.

2. void wr_can(uchar adr, uchar wert)

Mit dieser Funktion kann jedes der 32 Controller-Register adressiert und beschrieben
werden.

3. void rd_can(uchar adr)

Mit dieser Funktion kann jedes der 32 Controller-Register adressiert und gelesen werden.

Beispiele:

init82C200();

wird zu Beginn einmal aufgerufen, um die PC-Schnittstelle und den
CAN-Bus-Controller zu initialisieren.

wr_can(12,50);

schreibt den Wert 50 in das Register 12 (1. Byte des Transmissionspuf-
fers).

wr_can(1,10);

Transmission Request. Die Übertragung der Daten aus dem Transmissi-
onspuffer wird gestartet.

wr_can(1,4);

Der Receive-Puffer wird wieder freigegeben

wr_can(0,1);

Reset-Request=1. Einige Register können nur in diesem Modus
beschrieben und angezeigt werden.

wr_can(0,0);

Reset-Request=0. Einige Register können nur in diesem Modus
beschrieben und angezeigt werden.

uinsigned char cw;
cw=rd_can(22);

liest Register 22 (1. Register des Empfangspuffers)

cw=rd_can(2);

liest das Status-Register

Inhalt Diskette 006004-1

CAN_UK6

CPP

C-Quellkode in Englisch

CAN_PAR6

EXE

DOS-Programm in Deutsch

CAN_PAR6

CPP

C-Quellkode in Deutsch

CAN_UK6

EXE

DOS-Programm in Englisch

COPYRI~1

TXT

Copyrighthinweis

CONTENS

TXT

Dieser Text


Wyszukiwarka

Podobne podstrony:
Das TFH CAN Bus Experimentalsystem
Adaptacja sieci CAN BUS do zast Nieznany (2)
CAN Bus Praxis
CAN BUS Sp
CAN Bus Drivers for Atmel C51 Products
I2C Interface fuer Druckerschnittstelle
CAN BUS
(notes) Electronics Interfacing the PC Serial Port (RS232)
Der CAN Bus (2)
Can Bus Komfort, Antrieb, Diagnose
CAN bus
Der CAN Bus (3)
Audi A4 CAN bus wires 2002
ford km tool can bus user manual carsets co uk
579393d1434286492 any interest e60 can bus code hacking 10 e60 voltage supply bus systems

więcej podobnych podstron