Forum: Mikrocontroller und Digitale Elektronik CAN-Interface mit Silabs C8051F500


von Kay K. (kkubitz)


Lesenswert?

Hallo,

ich arbeite an einem Projekt mit mehreren Sensoren die via CAN die Daten 
zu einem PC übertragen sollen. Die Sensoren sind nicht untereinander 
synchronisiert und senden ihre Daten zufällig. Die Sensoren sind wie 
folgt aufgebaut:

Prozessor: C8051F500 von Silabs mit 24Mhz (interner Oszillator)
CAN-Treiber: TJA 1040
CAN-Bitrate: 1000 kBit/s
Leitungslänge: insgesamt <10 m

Am PC arbeite ich mit einem USB-CAN-Adapter von Lawicel. Die Leitung ist 
abgeschlossen und hat den richtigen Wellenwiderstand. Nun mein Problem:

Die Buslast ist relativ hoch was zu häufigen Buskollisionen führt. Diese 
sollten Dank CAN keine Probleme bereiten. Leider kommt es jedoch 
trotzdem zu fehlerhaften Datenübertragungen (Dataframe hat den falschen 
Inhalt - sonst alles i.O.). Arbeite ich mit nur einem Sensor 
funktioniert alles ganz wunderbar (über Tage!) - doch bereits ab zwei 
Sensoren gibt es derartige Effekte. Die CAN-Identifier sind auf jeden 
Fall unterschiedlich.
Ich konnte bereits eingrenzen wann genau der Fehler zustande kommt: Alle 
Sensoren senden 8 Messages direkt hinter einander. Wenn ein anderer 
Sensor sich "dazwischen drängelt" z.B. nach der dritten oder vierten 
Message des ersten Sensors so gibt es genau dabei diesen 
Übertragungsfehler.

Bin für jeden Hinweis dankbar - rätsel seit bereits 3 Tagen ohne Erfolg.

Vielen Dank

von Jens O. (Gast)


Lesenswert?

Hallo Kay,

hast du in der Zwischenzeit eine Lösung für dein Problem?

Wir haben seit kurzen auch genau dieses Problem.

unsere Controller
Infineon C167-CRLM
Fujitsu MB96F346RSA

schon mal vielen Dank für deine Antwort

von Marcel H. (xamos)


Lesenswert?

Was du prüfen kannst:

 - Siehst du auf dem Bus Error- oder Overload Frames?
 - CAN Leitungen verdrillt?
 - Topologie Ok? Keine Sterne bauen, das gibt Reflektionen
 - Tritt der Fehler auch bei 500kb/s auf?
 - CAN High/Low an einem Sensor vertauscht? Dann funktioniert die 
Arbitrierung nicht, könnte genau diesen Fehler auslösen.
 - Alle Busteilnehmer auf die gleiche Datenrate eingestellt?

Hilfreich wäre ein Oszillogramm vom Bus. Achtung: nicht die Masse vom 
Scope auf eine CAN Leitung hängen. Zwei Kanäle nehmen.

CAN ist hart im nehmen, das funktioniert auch noch halbwegs bei heftigen 
Fehlern. Wenn die Arbitrierung nicht sauber funktioniert, ist das fast 
immer ein Hinweis darauf, das mit dem Bus physikalisch was nicht stimmt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.