www.mikrocontroller.net

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


Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marco (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: F.-W. von der Bey (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.



Autor: A.K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: blaue Signal ist die Differenz zwischen den beiden anderen Signalen.

Autor: Timo (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö, aber meine.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marco (Gast)
Datum:

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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

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

Autor: Marco (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du den Transceiver mit Pinwackeln ausprobiert, wie ich oben 
anregte?

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.