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 1µ 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