Forum: Haus & Smart Home Praktisches Problem mit CAN-Bus


von Marco (Gast)


Lesenswert?

Hallo

Ich habe eine praktisches CAN Problem. Leider finde ich seit Tagen keine 
Lösung dazu.

Ich habe einen AT90CAN128 mit dem Transceiver PCA82C251. Als Busleitung 
benutze ich 2 dünne Kabel die an beiden Enden über 120 Ohm miteinander 
verbunden sind.

Da ich nicht genau sagen kann, ob der andere am Bus angeschlossene 
Knoten funktioniert, sage ich einfach mal der PCA82C251 ist der einzige 
Knoten am Bus.

Wenn ich jetzt eine Nachricht senden möchte, bemerkt der AT90CAN sofort 
einen Biterror und einen Stufferror und schaltet auf Busoff.

Ich habe auch schon einen 60 Ohm Widerstand parallel zu einem 100pF 
direkt zwischen CANL und CANH probiert, so wie es zu Testzwecken im 
Datenblatt steht. Auch hier passiert genau dasselbe, Biterror, 
Stufferror, Busoff.

Wie kommunizieren denn Transceiver und Controller miteinander?
Den Error muß ja der Controller erkennen, oder? Was würde denn bei einem 
defekten Transceiver passieren? Evtl. genau das was bei mir passiert?

Wäre super wenn jemand eine Idee hätte...

von A.K. (Gast)


Lesenswert?

> Wenn ich jetzt eine Nachricht senden möchte, bemerkt der
> AT90CAN sofort einen Biterror und einen Stufferror und
> schaltet auf Busoff.

Und verhält sich damit genau nach Spezifikation. Ein einzelnes Device 
fühlt sich auf dem CAN-Bus zu einsam und schmollt.

Grund: ACK Bit wird von niemandem gesetzt. Führt zu Retry bis zum Limit 
und dann Bus-Off State.

Probier's mal im Loopback-Mode.

von A.K. (Gast)


Lesenswert?

Ok, Biterror klingt mehr nach defektem Bus. Lass mal den anderen Knoten 
ganz weg, probier Loopback. Wann das sauber geht ist zumindest die 
Software ok.

von Marco (Gast)


Lesenswert?

Das ist doch schonmal ein heißer Tip.
Also kann das durchaus richtig sein und ich sollte mich mal genauer mit 
dem anderen Knoten beschäftigen...
Der andere Knoten ist ein Peak CAN Dongle an einem Laptop mit PCAN 
Explorer, aber irgendwie bekomme ich da auch kein wirkliches 
Lebenszeichen raus. Der Trace zeigt ja alle von PCAN Explorer gesendete 
Nachrichten an, egal ob sie wirklich auf dem Bus liegen oder nicht...

von Mike (Gast)


Lesenswert?

Hallo Marco!

Der PCA82C251 ist ein High-Speed-CAN-Transceiver. Ich besitze auch einen 
CAN-Dongle von Peak und auf diesem ist ein LOW-Speed-Transceiver 
integriert - ich glaube vom Typ TJA1054. Die Software, der CANView 
erlaubt aber Einstellungen bis 1MBit. Vielleicht ist dies das Problem.
Wichtig ist aber auch die Einstellung im CANView.
Bei mir: LPT1 mit Adresse 0x378 und Interupt entweder 5 oder 7 und EPP 
ausgewählt.

Gruß
Mike

von Marco (Gast)


Lesenswert?

Hallo.

Daran liegts bei mir leider nicht. Mein PCAN Dongle ist mit einem 
SJA1000 und einem PCA82C251 aufgebaut, also ein Highspeed Dongle.
Ich habe aber GND von meiner Platine und GND vom Dongle nicht verbunden. 
Kanns daran liegen?

von Marco (Gast)


Lesenswert?

Mit Loopback werde ich mich mal beschäftigen und Montag ausprobieren. Im 
Moment ist mir noch nicht ganz klar, was das ist...

von A.K. (Gast)


Lesenswert?

Heisst und funktioniert bei jedem CAN Controller ein bischen anders, 
beim SJA1000 "self test mode" (MOD.2) und "self receiption request" 
(CMR.4).

von A.K. (Gast)


Lesenswert?

Hoppla - der Atmel scheint sowas garnicht zu haben. Na da ist ja nicht 
gerade freundlich.

Aber wo ich grad in dem Datasheet drin war: Dein bit error lässt einen 
falsch angeschlossenen oder defekten Transceiver, oder eine verkorkste 
CAN Verkabelung vermuten. Spiel mal bei abgeschaltetem CAN-Controller 
per Port-I/O mit dem CAN-Tx Pin und schau was auf dem CAN-Bus und auf 
CAN-Rx rauskommt (ohne Dongle, d.h. allein auf dem Bus, sonst mischt der 
auch noch mit).

von Marco (Gast)


Lesenswert?

Das ist ne gute Idee. Werde mal ins Datenblatt des Transceivers gucken 
was der für Pegel erwartet und dann das ansprechen per I/O Port testen.
Vielen Dank für die Hilfe...

von F.-W. von der Bey (Gast)


Lesenswert?

Hallo Kollegen,
der CAN ist zwar ein differentieller 2 Leitungs-Bus, aber er benötigt
die gemeinsame Ground Verbindung als Bezug. Je höher die 
Übertragungsrate
gewählt wird, desto wichtíger ist die gute Leitungsanpassung.
Es ist bisher nie falsch gewesen, dem Bus eine Spannungsvorprägung zu 
verpassen. Mit den Abschlußwiderständen  von 120 Ohm an den Enden der 
Busleitung werden verdrillte Adern ( Klingeldraht ) sauber 
abgeschlossen.
Ein Buskurzschluß kann damit erkannt werden.

Je nach Geschwindigkeit und Buslänge ist noch der Abtastzeitpunkt 
BTR0,BTR1
der Controller wichtig.Die Signale benötigen einen gewisse 
Beruhigungszeit bis zur Abtastung.



von A.K. (Gast)


Angehängte Dateien:

Lesenswert?

Was freilich nicht heisst, dass GND ein Bestandteil der Verbindung sein 
muss. Sondern nur, dass bei irgendwie miteinander verbundener Masse die 
Pegel auf CANH/CANL sich in dem Rahmen bewegen müssen, den die 
Transceiver verdauen. Komplett massefrei soll auch gehen, habe ich aber 
selber nicht ausprobiert.

Anbei mal ein Beispiel für 125Kbps über zig Meter einfaches rein 
2-adriges Telefonkabel im Bündel zusammen mit Telefonverkabelung, 
beiderseits 120 Ohm, am entgegengesetzten Ende gemessen. Ohne Abschluss 
amgemessenen Ende war etwas Klingeln zu sehen, allerdings nicht wirklich 
kritisch, mit Abschluss war das Signal so sauber wie man es sich nur 
wünschen kann.

von A.K. (Gast)


Lesenswert?

PS: blaue Signal ist die Differenz zwischen den beiden anderen Signalen.

von Timo (Gast)


Lesenswert?

Blau? Ich sehe lila und türkis! Oder ist meine Farbwarnehmung im Arsch?

von A.K. (Gast)


Lesenswert?

Nö, aber meine.

von Matthias (Gast)


Lesenswert?

Anmerkung:
----------

Wenn sich nur ein Gerät am Bus befindet, darf es nur ein NACK-Fehler 
geben.
Damit läuft dann der Fehlerzähler im Controller hoch, da dieser solange 
sendet, bis die Software das einstellt oder ein ACK empfangen wurde.

Aber der Controller darf dabei NUR ind den Error-Passive Mode wechseln!
Nicht in den Bus-Off! Der Bus-Off darf nur bei Bitfehlern und 
Stufffehlern
eintreten.

Hab das ganze schonmal mit nem AT90CANxxx getestet. Der geht ohne 
zweiten
Teilnehmer nur in den Error-Passive-Modus.

Ist dein Tranceiver auch aktiv? Die Teile haben da so eine Art 
Enable-Pin.
Wenn der nicht auf dem richtigen Pegel liegt, dann geht auch nix.

von Marco (Gast)


Lesenswert?

Der Enable PIN liegt über 20 kOhm auf Masse.
Damit müsste der Transceiver enable sein.

von Matthias (Gast)


Lesenswert?

Nimm den Niderstand mal raus und schiess den pin direkt auf masse an.

Ich meine mich da dunkel an etwas zu erinnern, was die Funktion mit dem 
Widerstand betrifft. Ausserdem habe die Designs, die ich bisher so 
gesehen hab, das Teil imm direkt an Masse gehabt.

von A.K. (Gast)


Lesenswert?

Der Widerstand steuert die Flankensteilheit. Bei 1Mbps sollte der Pin 
auf Masse, bei 125Kbps ist es für den Test egal ob 20K oder 0. Da 
reduziert er nur die Störabstrahlung bei nicht geschirmten Leitungen.

von A.K. (Gast)


Lesenswert?

Apropos: Welche Bitrate? Musst ja nicht grad mit 1Mbps anfangen.

von Marco (Gast)


Lesenswert?

Habs schon mit 100kbps und 500kbps probiert.
Das ändert nichts an dem Fehler...

von A.K. (Gast)


Lesenswert?

Hast du den Transceiver mit Pinwackeln ausprobiert, wie ich oben 
anregte?

von Marco (Gast)


Lesenswert?

Mit dem "Pinwackeln" habe ich auch nichts vernünftiges rausbekommen.

Habe jetzt auch mit 2 anderen idetischen Platinen getestet. Lief sofort.

Also ist wohl schlichtweg der Transceiver im Eimer.

Vielen Dank an alle für die Mühe!

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.