CAN Bus Interface fuer PC


MIKROPROZESSOREN
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.
Ü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
Um einen PC für den Anschluß eines CAN- Notebooks arbeiten kann. Obwohl kann. Der Hauptunterschied zwi-
Busses vorzubereiten, soll eine der vorhan- durchaus praktikabel, haben wir uns schen beiden Schaltungen liegt
denen Schnittstellen genutzt werden. gegen die serielle Schnittstelle ent- natürlich in der Software.
Dadurch erübrigt sich eine spezielle I/O-Ein- schieden, denn nur die Parallel- Als CAN-Bus-Controller arbeitet wie-
steckkarte, so dass die Schaltung auch an schnittstelle erlaubt es, die hohe derum ein SJA1000 (wer noch einen
58 Elektor 6/2000
MIKROPROZESSOREN
5V 5V 5V
R26 8x 4k7
1
R14
5V
C3
C4
K1
10µ
100n
25V
2 3 4 5 6 7 8 9
C9 1
R15 R17
6
K3
R11
100n
Ub
390&!
2
22 18 12
1 R12
390&! 8 7
14 R10
390&! 11 7 2 3
1 2 3
Ub
MODE EN AN
2 6
WR
IC2
7 8
CLKOUT
15 5 63
RD
OUT CA
4
C11
3 3
6N137
ALE
4 1 R22 9
NC NC
16 IC1 20
100n
RX1
R2 23 R19 5&!6 5
AD0
390&!
4 19
RX0
R1 24 5 R24
D1
AD1
390&! 3
17
R3
25
AD2
5 390&! 14 56
TX1
R4 VREF CANL
26
AD3
18 390&!
13
12V
R5 TX0 IC4
27 4
AD4
390&! RXD
6
R6 Ub
28 PCA82C200 1
AD5
390&! TXD
19
PCA
JP1
R7
1 SJA1000 D2
82C250
AD6
390&!
7 8 7
K2
R8 RS CANH
2 9
AD7 XTAL1
20 390&! R18
C10
8 R21 2 1
12V
R20
16 X1 R23
INT
21 6
100n
5&!6
17 10
RST XTAL2
9 2
8
4
IC7f CS
22 7
1 2 3
16MHz
R9 14
10 12 13 NC NC 3
390&! 1 IC3
C2 C1
23 8 21 15 3 6 8
CA OUT
5 4 3 2
11
22p 22p
6N137 Ub 4
27 5V
AN EN
24 9
IC6
12 5V 5
5
D3 1
25 5V 7805
50mA
VIN
13 R25 1 4x 4k7 R16 5V
5V 7
V+ R13
1N4004
IC5 C7
5V C5 C6
IC7a IC7b IC7c IC7d IC7e
1 3 5 9 11
NMV
0505SA
14
9V 100µ 10V
5
470µ 220µ
1 1 1 1 1 0
C8
25V 10V
IC7 IC7 = 7404
7 2 4 6 8 10

10V
2
000039 - 11
Bild 1. Die Schaltung des CAN-Bus-Interface zur parallelen PC-Schnittstelle.
PCA82C200 in Reserve hat, kann den Wert 1AHEX und setzt Bit 6 im ledge (Pin 10) als Interruptquelle für den
auch diesen Controller verwenden), Register CDR. SJA1000 genutzt wird.
der im Novemberheft ausführlich Der SJA1000 wurde mit seinen Durch die galvanische Trennung des CAN-
beschrieben wurde. Das vollständige Schreib- und Leseleitungen für den Busses wird die Einkopplung von Störspan-
Datenblatt kann man von direkten Anschluß an Mikrocontrol- nungen in beide Richtungen erschwert,
www.semiconductors.philips.com lersysteme entwickelt. Die Schreib- außerdem ergibt sich ein beruhigender
herunterladen. Der Spannungsteiler und Leseleitungen müssen deshalb Schutz des PCs vor Überspannungen auf dem
R14/R15 ist eigentlich nur beim entsprechend dem Chip-Timing per CAN-Bus. Wer eine kostengünstige Lösung
PCA82C200 nötig, schadet dem Software bedient werden. Das Daten- sucht und auf die galvanische Trennung ver-
SJA1000 aber nicht. Besser ist es register der parallelen Schnittstelle zichten möchte, kann einfach den DC/DC-
aber, R14 wegzulassen und R15 (Pin 2...9 von K3) wird direkt mit dem Wandler weglassen und +5 V und Masse
durch eine Drahtbrücke zu ersetzen, gemultiplexten Daten/Adreßbus des zwischen Primär- und Sekundärseite über-
so dass der RX1-Anschluß fest auf CAN-Controllers verbunden. Der brücken.
Masse liegt. Die Software muss den Lese/Schreibbefehl und ALE gelan- Mit Jumper JP1 kann der Abschlußwider-
internen Komparator CBP aus- und gen über drei Centronics-Steuerlei- stand von 120 &! zugeschaltet werden.
damit den internen Schmitt-Trigger tungen (Autofeed, Init Printer, Select Grundsätzlich sollen die Abschlußwider-
des SJA1000 einschalten. Dazu Input) zum Controller, während von stände nur an den Enden der CAN-Bus-Linie
schreibt man in das Register OCR den Statusregistern nur Acknow- 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-
Technische Daten
D-Stecker mit eingelötetem 120-&!-Wider-
 Interface für parallele Schnittstelle im bidirektionalen EPP Modus
stand als Busabschluß verwendet werden.
 CAN-Bus-Anschluß über gebrückte 9-polige Sub-D-Verbinder
Die Verdrahtung der 9-poligen Sub-D-Verbin-
 Abschlußwiderstand 120 &! zuschaltbar
der ist in der CAN-Norm nicht festgelegt. So
 CAN-Controller SJA1000 oder PCA82C200
wurde gegenüber früheren Elektor-Veröffent-
 Busankopplung über Transceiver PCA82C250
lichungen zum Thema CAN-Bus nicht nur die
 Galvanische Trennung durch Optokoppler und Gleichspannungswandler
Anschlüsse 7 und 2 vertauscht, sondern auch
 Stromversorgung 9...12 V über Steckernetzteil
mit dem Grundsatz gebrochen, daß der CAN-
6/2000 Elektor 59
10k
10k
390
&!
390
&!
120
&!
390
&!
390
&!
10k
56k
4k7
MIKROPROZESSOREN
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
Bild 2. Programm-Menü des CAN-Controllers bei Reset Request=0.
zwei verschiedene Schreib- bezie-
hungsweise Lesebefehle im Menü
(RR = 0 oder RR = 1) einfach mög-
Bus in beide Richtungen gleich ist. Statt des- kode ist auf Diskette 006004-1 erhält- lich (siehe Kasten).
sen wird eine männliche und eine weibliche lich. Bevor das Programm gestartet
Buchse eingesetzt, so dass die Interface-Pla- wird, muß das Interface mit der
Ändern des Identifiers
tine aus dem Bus entfernt werden und die Druckerschnittstelle und mit einer
beiden Buskabel einfach ineinander gesteckt Versorgungsspannung von 9...12 V Der Identifier ist nach Programm-
werden können. Bedenken Sie, das die Num- verbunden werden. Eine Verbindung start auf 300 (00100101100B) einge-
merierung eines Male- und eines Female-Ver- zum CAN-Bus ist zu diesem Zeit- stellt. Soll der ID beispielsweise 512
binders gespiegelt sind. punkt noch nicht erforderlich. (01000000000B) lauten, so müssen
Nach dem Programmstart unter DOS die Bits ID3...ID10 in das Register 10
oder im DOS-Fenster gibt man die und die Bits ID0...ID2 in das Register
Software
Adresse der Druckerschnittstelle an, 11 an Bitposition 5...7 geschrieben
Zum PC-Interface gehört ein DOS-Programm, anschließend taucht das Programm- werden. Bit 4 repräsentiert das RTR-
mit dem das Interface in Betrieb genommen Menü auf. Bei der ersten Menünum- Bit und wird bei der Übertragung
werden kann. Das Programm und sein Quell- mer erscheinen drei Spalten wie in 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 8D (00001000B) geschrieben
werden. Mit dem Menübefehl 3 wird
also 64D in das Register 10 und
anschließend 8D 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
Bild 3. Register des CAN-Controllers. Die Register 4...8 sind gesperrt.
60 Elektor 6/2000
MIKROPROZESSOREN
CAN-Bus-Controller übernommen schen der zugehörigen Bitposition benutzt werden. In der Voreinstellung steht
werden. Berücksichtigt werden nur im Identifier und im Acceptance im Acceptance Mask Register (Nummer 5)
die obersten 8 Bit des Identifiers. Code Register festgestellt wird. Der 255D (11111111B), so dass alle einkommenden
Eine Nachricht wird übernommen, Zugriff auf diese Register, erfolgt, Nachrichten akzeptiert und übernommen
wenn bei jeder Bitposition, bei der wenn das RR-Bit vorher auf 1 gesetzt werden. Das Register kann mit dem Menü-
im Acceptance Mask Register eine 0 wurde. Daher muß zum Anzeigen befehl 4 (RR = 1) verändert werden.
steht, eine Übereinstimmung zwi- der Register der Menübefehl 2
K1
+ JP1
D3 D2
R22
0
IC4
R23
D1
C10
C6
K3
R21
C11
C5
R19
R2
R1
IC3 IC2
R26
R12
C7
1
R10
Stückliste
R3
R18 R17
R4
R14 R15
R5
Widerstände: 000039-1
R16
R6
C8
R1...R12,R17...R19,R21 = 390 &!
R7
K2
R11
R13 = 4k7 R25
R8
R14,R15,R20 = 10 k
C4
IC1
R9
R16 = 56 k
R22,R23 = 5&!6
IC7
R24 = 120 &!
C1
C2
X1
R25 = 4-fach-SIL- C3
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
Bild 4. Layout und Bestückungsplan der Interface-Platine.
6/2000 Elektor 61
H1
R13
IC6
R24
R20
IC5
C9
000039-1
(C) ELEKTOR
(C) ELEKTOR
000039-1
MIKROPROZESSOREN
so wird Bit SR.1 im Statusregister
gesetzt. Menübefehl 9 setzt dieses
Software in C
Bit wieder zurück.
Mit der Treibersoftware kann man auf alle 32 Steuerregister zugreifen. Über ein kleines
Eine Art  Fernschreibermodus bie-
Menü können die einzelnen Register geschrieben, gelesen und somit die gesamte Kommu-
tet der Menübefehl 5. Jedes über die
nikation abgewickelt werden. Außerdem besteht unter den Menüpunkten 11...13 die Mög-
Tastatur eingegebene Zeichen wird
lichkeit, für Testzwecke direkt auf die PC-Register der Schnittstelle zuzugreifen. Die PC-
sofort auf den CAN-Bus übertragen
Schnittstelle muß per Jumper oder im BIOS auf bidirektionalen Betrieb im EPP-Modus ein-
und erscheint auf allen am PC ange-
gestellt werden. Die Übertragungsrate wird während der Initialisierung auf 1 MBit/s
schlossenen Empfangsstationen. Um
festgelegt.
eine eigene interessante Kommuni-
Die Treibersoftware besteht im wesentlichen aus drei Funktionen:
kation mit diesem Interface aufzu-
bauen, steht das Programm auch als
1. void init82C200()
Quellcode in C zur Verfügung. Wer
Die Funktion initialisiert den CAN-Bus-Controller entsprechend der Hardware-
das Programm entsprechend abän-
konfiguration. Die Übertragungsrate ist auf 1 MBit/s eingestellt.
dert, kann auch mit nur einem PC,
zwei Schnittstellenkarten und zwei
2. void wr_can(uchar adr, uchar wert)
Interfaces Experimente am CAN-Bus
Mit dieser Funktion kann jedes der 32 Controller-Register adressiert und beschrieben
durchführen.
werden.
Für die Kommunikation mit dem
3. void rd_can(uchar adr)
CAN-Bus-Controller stehen drei
Mit dieser Funktion kann jedes der 32 Controller-Register adressiert und gelesen werden.
Funktionen zur Verfügung, die als
Treiber sehr einfach in jedes C-Pro-
Beispiele:
gramm eingebunden werden kön-
init82C200(); wird zu Beginn einmal aufgerufen, um die PC-Schnittstelle und den
nen.
CAN-Bus-Controller zu initialisieren.
wr_can(12,50); schreibt den Wert 50 in das Register 12 (1. Byte des Transmissionspuf-
Mit der Funktion
fers).
wr_can(uchar adr, uchar
wr_can(1,10); Transmission Request. Die Übertragung der Daten aus dem Transmissi-
wert)
onspuffer wird gestartet.
wr_can(1,4); Der Receive-Puffer wird wieder freigegeben wird das Byte wertin das mit adr
wr_can(0,1); Reset-Request=1. Einige Register können nur in diesem Modus
bestimmte Register geschrieben.
beschrieben und angezeigt werden.
wr_can(0,0); Reset-Request=0. Einige Register können nur in diesem Modus
Die Funktion
beschrieben und angezeigt werden.
rd_can(uchar adr)
uinsigned char cw;
liefert den Inhalt des mit adr fest-
cw=rd_can(22); liest Register 22 (1. Register des Empfangspuffers)
gelegten Registers zurück.
cw=rd_can(2); liest das Status-Register
Für die Initialisierung kann die Funk-
tion
initSJA1000()
CAN-Bus-Anschluss
wird bereits eine Buchstabenkombi- benutzt werden.
Nach der erfolgreichen Inbetriebnahme sollte nation in den Sendepuffer geschrie- (000039)rg
nun das Interface mit dem CAN-Bus verbun- ben, die nun bei der Empfangssta-
den werden. Für die weiteren Schritte muß tion im Empfangspuffer ankommt.
sich mindestens ein weiterer Busteilnehmer Außerdem zeigt das Statusregister
am Bus befinden, zum Beispiel ein weiterer (Nummer 2) den Empfang einer
PC. Nachricht an, indem es Bit SR.0 Literatur
Auf den Menübefehl Nummer 7 hin wird eine setzt. Dieses Bit wird durch den
Datenübertragung ausgelöst, der im Sende- Menübefehl 8 wieder zurückgesetzt. [1] W. Lawrentz (Hrsg.)
puffer befindliche Datensatz entsprechend Der Controller besitzt einen zwei CAN System Engineering
den Übertragungsparametern auf den Bus Datensätze umfassenden FIFO-Emp- 1997 Springer Verlag New York
gegeben. Bei der Programminitialisierung fangspuffer. Läuft dieser Puffer über,
[2] Philips
SJA1000 Stand-alone
CAN controller DATA SHEET
Inhalt Diskette 006004-1
www.semiconductors.philips.com
CAN_UK6 CPP C-Quellkode in Englisch
[3] Bosch
CAN_PAR6 EXE DOS-Programm in Deutsch
CAN Specification version 2.0
CAN_PAR6 CPP C-Quellkode in Deutsch
CAN_UK6 EXE DOS-Programm in Englisch Robert Bosch Gmbh Stuttgart
COPYRI~1 TXT Copyrighthinweis
CONTENS TXT Dieser Text
[4] DIN ISO 11898
DIN, Beuth Verlag Berlin
62 Elektor 6/2000


Wyszukiwarka