Ansteuerung eines SJA1000-CAN-Controllers mit ATmega16/32-Microcontrollern

Beschreibung

Die im folgenden verlinkten Dateien enthalten Funktionen zur Initialisierung, zum Senden und zum Empfangen von CAN-Nachrichten unter Verwendung des CAN-Controllers SJA1000 von NXP Semiconductors. Der SJA1000 kann sowohl im BasicCAN- als auch im PeliCAN-Modus genutzt werden.

Quellen

Beispiel

Für die Nutzung des SJA1000 als CAN-Controller erfolgte der Aufbau einer Platine, auf der sich die notwendige Beschaltung befindet. Diese Platine enthält unter anderem den Bus-Treiber-Chip PCA82C250 (ebenfalls von NXP Semiconductors), Optokoppler für eine optionale optische Entkopplung, Logik für die Deaktivierung des Enable-Signals bei Hardware-Reset des Microcontrollers und einen Timer-Baustein NE556 zur Sicherstellung einer Mindestleuchtdauer der LEDs zur Indikation von empfangenen und gesendeten Nachrichten.

can_controller_schematics.png can_controller_3d.png

Die Beschaltung bzw. Bedeutung der Ports und der Jumper ist im Folgenden beschrieben:

10-Pin-Connector "Control"

Über diese Buchse erfolgt der Anschluss der Steuerleitungen für den SJA1000.

10-Pin-Connector "Address"

Über diese Buchse erfolgt der Anschluss der Adress-/Datenleitungen für den SJA1000.

6-Pin-Connector "uC Control"

Über diese Buchse erfolgt der Anschluss von (Hardware-)Resetleitung des Microcontrollers, um das Enable-Signal bei einem Reset des Microcontrollers (zum Beispiel während der Programmierung) im inaktiven Zustand zu halten.

4-Pin-Connector "Vcc/GND = CAN Vcc/GND"

Diese Buchse kann als Eingang für eine externe Spannungsquelle genutzt werden, um die optische Entkopplung zwischen CAN-Bus und SJA1000 zu erreichen. In diesem Falle ist die Spannungsversorgung an Pin 2 und 4 anzuschließen. Sie versorgt dann den Bustreiber PCA83C250 und den Optokoppler für die TX-Leitung. Bei Nutzung der Microcontroller-Spannungsversorgung sind die Pins 1 und 3 und die Pins 2 und 4 zu überbrücken.

Jumper "JP 1"

Wenn gebrückt, aktiviert dieser Jumper einen 120 Ohm-Abschlusswiderstand am CAN-Bus-Anschluss.

Jumper "JP 2"

Dieser Jumper ist zu überbrücken, wenn der Connector "uC-Control" nicht angeschlossen ist. In diesem Fall wird garantiert, dass die RESET-Leitung fest auf Vcc liegt.

Jumper "JP 3"

Der Pin "Slope Control" des PCA82C250 ist über einen 22 kOhm-Widerstand mit GND verbunden, um den Steilheit der Flanken des Ausgangssignals zu begrenzen und damit Störabstrahlung zu vermindern. Im High-Speed-Modus kann es notwendig sein, diese Begrenzung der Flankensteilheit aufzuheben. Dies erfolgt durch das Überbrücken des Jumpers "JP 3".

Jumper "JP 4"

Wenn gebrückt, verbindet dieser Jumper die GND-Leitung mit dem Pin 3 (Ground) des CAN-Bus-Anschlusses.

Bauteilliste

can_controller.lst (Textdatei)

Hinweise

Im Schaltplan ist für P4 ein 74LS37 (NAND Buffer) angegeben. Ein "normaler" 74xx00 (NAND) ist an der Stelle ausreichend. Der 74LS37 kam nur zum Einsatz, weil ein 74xx00 nicht zur Verfügung stand.
Die Signalisierung mittels RX- und TX-LED funktioniert noch nicht zufriedenstellend, da sowohl bei Empfang als auch beim Senden beide LEDs leuchten (aufgrund der ACK-Nachricht).

Fehlerquellen

Falls die Ansteuerung des CAN-Controllers oder die CAN-Kommunikation im Allgemeinen nicht funktioniert, sollten folgende mögliche Fehlerquellen ausgeschlossen werden: Weitere Fehlerquellen bei gestörter Kommunikation sind Fehler beim Abschluss der CAN-Verbindungen (Abschlusswiderstände) oder die fehlerhafte Konfiguration von Baudraten. Falsch gesetzte Werte in den "Acceptance Code"- und "Acceptance Mask"-Registern können den Empfang der gewünschten Nachrichten verhindern.

Lizenz

Alle hier veröffentlichten Quellen stehen unter der LGPLv3.

Versionsinfo

Anregungen oder weitere Informationen

Für Anregungen oder die Beantwortung von Fragen zum Projekt steht ein Forum zur Verfügung.