Forum: Mikrocontroller und Digitale Elektronik CAN Probleme


von Bob E. (embedded_bob)


Lesenswert?

Hallo zusammen,
ich habe den XMC4200 (µC) zusammen mit einem HVDA1040AQDSJRQ1 (CAN 
Transceiver) verschalten. Leider habe ich Probleme bei der 
Inbetriebnahme des CANs. Teilweise sendet mir der CAN keine Botschaften 
zurück, oder er funktioniert garnicht. Sobald ich Botschaften auf den 
Bus schicke passiert entweder nichts oder ich komme in den Bus-Heavy 
Zustand. Woran kann das liegen?
Falls weitere Infos benötigt kann ich diese noch beisteuern.
Gruß

von BD (Gast)


Lesenswert?

Hast du eine Gegenstelle? Ohne Quittungssignal geht der Bus sofort auf 
Störung.
Hast du einen Abschlusswiderstand 220 Ohm? Ohne kommt ebenfalls sofort 
eine Störung.

von ziege (Gast)


Lesenswert?

Interessante Infos sind noch: Schaltplan, Aufbau, Code, andere 
Busteilnehmer. Evtl. Oszibilder vom Bus.

von BD (Gast)


Lesenswert?

120 Ohm natürlich.

von Günter N. (turtle64)


Lesenswert?

Hier die gängigsten Fehler:

- Datenrate: CAN braucht eine sehr genaue Datenrate, damit alle 
Teilnehmer sich verstehen. Ohne jetzt nachgesehen zu haben, meine ich, 
dass die Toleranz 0.5% beträgt. Ich arbeite normalerweise mit 
Cypress-Controllern, da funktioniert es nur mit externem Quartz. Die 
internen Taktgeneratoren sind zu ungenau. Wenn der Takt nicht stimmt, 
verstehen sich die Busteilnehmer nicht, es kommt zu BUS HEAVY.

- Abschlusswiderstand: Der Bus muss einen Widerstand von 120 Ohm 
zwischen den beiden Datenleitungen CANH und CANL haben. Wenn nicht, 
kommt es beim Senden des ersten Paketes zu einem Fehler, der nicht mehr 
weggeht. Mit Multimeter nachmessen bei abgeschaltetem System.

- Anderer Teilnehmer: Man braucht mindestens einen weiteren Teilnehmer, 
der ein Acknowledge-Signal für das gesendete Paket schickt. Dazu muss 
mindestens die Datenrate stimmen. Ohne einen zweiten Teilnehmer fehlt 
das ACK, es kommt beim ersten gesendeten Paket sofort eine Busstörung.

- Sehr hilfreich für die Inbetriebnahme ist ein CAN-Bus-Tool wie z.B. 
PCAN-USB von Peak Systems. Das zeigt alle Busdaten an einschließlich 
Störungen und kann sogar selbst Daten senden.

Ansonsten: CANH und CANL verwechselt? Masse der Teilnehmer verbunden? 
Gleiche Datenrate eingestellt? Richtige Busstruktur bei mehreren 
Teilnehmern (eine lange Leitung mit nur kurzen Stichleitungen, keine 
Sternstruktur)?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bob E. schrieb:
> Leider habe ich Probleme bei der Inbetriebnahme des CANs.
Hast du ein als "zuverlässig funktionierend" bekanntes CAN-Interface am 
Bus?

> Falls weitere Infos benötigt kann ich diese noch beisteuern
Ja, lies mal deine Beschreibung so, als ob du nichts, absolut nichts 
über deine Schaltung und deinen Testaufbau wüsstest. Welche 
Informationen würdest du dir noch wünschen? Wären Fotos hilfreich? Oder 
gar ein Schaltplan?

ziege schrieb:
> Evtl. Oszibilder vom Bus.
Streich das "Evtl."

Denn natürlich schaut man sich zuallererst das physikalische Signal auf 
dem bus an. Denn wenn das nicht passt, dann brauche ich nicht anderswo 
weitersuchen...

BD schrieb:
> 120 Ohm natürlich.
An beiden Busenden natürlich.

: Bearbeitet durch Moderator
von Werner (Gast)


Lesenswert?

Bob E. schrieb:
> oder ich komme in den Bus-Heavy
> Zustand

Vielleicht kannst Du für Leute, die jetzt nicht täglich mit CAN kämpfen 
noch erläutern, was der Bus-Heavy Zustand ist, bzw. was das über den Bus 
aussagt.


Wie lang ist denn der Bus, bzw. wie weit entfernt ist der weiteste 
Teilnehmer?
Je nachdem, wie lang die Laufzeiten sind, musst Du das Fenster für das 
ACK Signal nach hinten schieben. Sonst bekommst Du es nie mit und 
landest immer im Fehlerzustand.

von Bob E. (embedded_bob)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
> Bob E. schrieb:
>> Leider habe ich Probleme bei der Inbetriebnahme des CANs.
> Hast du ein als "zuverlässig funktionierend" bekanntes CAN-Interface am
> Bus?
Ja, dieses System hat genauso bereits funktioniert. Evtl ist da aber im 
laufe des Testens etwas "kaputt" gegangen. Evtl. weil der uC die vom 
Transceiver ausgehenden 5V nicht schafft.

>> Falls weitere Infos benötigt kann ich diese noch beisteuern
> Ja, lies mal deine Beschreibung so, als ob du nichts, absolut nichts
> über deine Schaltung und deinen Testaufbau wüsstest. Welche
> Informationen würdest du dir noch wünschen? Wären Fotos hilfreich? Oder
> gar ein Schaltplan?

Anbei die Schaltung des CAN.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bob E. schrieb:
> Anbei die Schaltung des CAN.
Wenn du das Teil so standalone betreibst wie in diesem Schaltplan, dann 
ist es kein Wunder, dass du Fehler bekommst. Du brauchst einen zweiten 
Teilnehmer. Und sieh dir unbedingt die Grundlagen zum CAN-Bus an...

> Anbei die Schaltung des CAN.
Wenn sich nicht schon die Begriffe CANH und CANL weltweit durchgesetzt 
hätten, dann müsste man glatt die Namen CAN_P und CAN_N oder beliebige 
andere Bezeichner erfinden.

: Bearbeitet durch Moderator
von Bob E. (embedded_bob)


Lesenswert?

Lothar M. schrieb:
> Bob E. schrieb:
>> Anbei die Schaltung des CAN.
> Wenn du das Teil so standalone betreibst wie in diesem Schaltplan, dann
> ist es kein Wunder, dass du Fehler bekommst. Du brauchst einen zweiten
> Teilnehmer. Und sieh dir unbedingt die Grundlagen zum CAN-Bus an...

Wiegesagt es ist noch ein XMC4200 verbaut. Und logischerweise schaue ich 
mit einem CAN-Bus Tool auf den CAN und kann so einen zweiten Teilnehmer 
simulieren..

>> Anbei die Schaltung des CAN.
> Wenn sich nicht schon die Begriffe CANH und CANL weltweit durchgesetzt
> hätten, dann müsste man glatt die Namen CAN_P und CAN_N oder beliebige
> andere Bezeichner erfinden.

?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bob E. schrieb:
> Und logischerweise schaue ich mit einem CAN-Bus Tool auf den CAN und
> kann so einen zweiten Teilnehmer simulieren..
Und logischerweise ist es dann für uns auch nicht schwer zu erraten, 
welches CAN-Bus-Tool das ist und wie es auf den Zustand "Bus-Heavy" 
kommt.

Denn ein "Bus-Heavy" ist bei CAN nicht definiert, das muss also was 
sein, was der unbaknnte Hersteller des unbekannten Tools selber 
definiert hat:
https://www.google.com/search?q=can+bus+error+states

Da waren noch ein paar Fragen offen zur Gesamtschaltung offen. Wie 
holprig kann sich die Mithilfe des Fragenstellers bei der Problemsuche 
eigentlich gestalten?

Oder andersrum: du hast ein Problem mit einer Schaltung. Und nur du 
hast diese fehlerhafte Schaltung vor dir. Und nur du siehst die 
Fehler. Wie soll dir da wer helfen, wenn du diese Informationen nicht 
von dir aus weitergibst?

Bob E. schrieb:
>> Wenn sich nicht schon die Begriffe CANH und CANL weltweit durchgesetzt
>> hätten, dann müsste man glatt die Namen CAN_P und CAN_N oder beliebige
>> andere Bezeichner erfinden.
> ?
Denk nochmal drüber nach. Du kommst schon irgendwann drauf, dass es eine 
schlechte Idee ist, weltweit unter anderem Namen bekannten Signalen 
eigene neue Namen zu geben. Irgendwann.

: Bearbeitet durch Moderator
von Bob E. (embedded_bob)


Lesenswert?

Lothar M. schrieb:
> Bob E. schrieb:
>>> Wenn sich nicht schon die Begriffe CANH und CANL weltweit durchgesetzt
>>> hätten, dann müsste man glatt die Namen CAN_P und CAN_N oder beliebige
>>> andere Bezeichner erfinden.
>> ?
> Denk nochmal drüber nach. Du kommst schon irgendwann drauf, dass es eine
> schlechte Idee ist, weltweit unter anderem Namen bekannten Signalen
> eigene neue Namen zu geben. Irgendwann.

Vielleicht wirst du auch irgendwann verstehen, dass der Name hier keine 
Rolle spielt. Der Name wird wohl kaum das Problem sein oder? Abgesehen 
davon muss ich die Leitungen im Altium Designer mit "_P" und "_N" enden 
lassen um diese dann differentiell verlegen zu können. Denk nochmal 
drüber nach. Du kommst schon irgendwann drauf, dass klugscheißen nicht 
immer gut ist. Irgendwann

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bob E. schrieb:
> Vielleicht wirst du auch irgendwann verstehen, dass der Name hier keine
> Rolle spielt. Der Name wird wohl kaum das Problem sein oder?
Nein, ist er nicht. Warum hängst du dich daran auf?

> Denk nochmal drüber nach. Du kommst schon irgendwann drauf, dass
> klugscheißen nicht immer gut ist. Irgendwann
Schönen Tag noch. Möge dir dein Problem lange und vielfältige Freude 
machen.

: Bearbeitet durch Moderator
von ziege (Gast)


Lesenswert?

Der XMC4200 hat als Maximalspannung für IO-Pins 4.3V angegeben.

von Thomas F. (igel)


Lesenswert?

Bob E. schrieb:
> Evtl. weil der uC die vom Transceiver ausgehenden 5V nicht schafft.

Ja, das hatten wir doch letzte Woche:

Beitrag "5V CAN Controller und 3.3V uC"

Ist das denn jetzt gelöst? Wie sieht die Lösung aus?

Status-Register und Error-Register des XMC auslesen und ausgeben.

Ansonsten schließe ich mich den Kollegen an: Dein Post ist kaum 
verständlich.

Wer geht denn überhaupt in den Error Mode, der XMC oder die Gegenstelle?
Und warum ist diese geheim?

Mal das Multimeter gegen Masse an beide CAN-Leitungen gehalten?

von Heino (Gast)


Lesenswert?

BD schrieb:
> Hast du einen Abschlusswiderstand 220 Ohm?

Es müssen 120Ohm an jedem der beiden Busenden sein.

von Sebastian W. (wangnick)


Lesenswert?

ziege schrieb:
> Der XMC4200 hat als Maximalspannung für IO-Pins 4.3V angegeben.

Ja, und der SN65HVDA1040 hat als typische Ausgangsspannung an RXD 4.6V 
angegeben. Im Nebenthread wurden ja schon Lösungsvorschläge gemacht. 
Vielleicht ist ja der XMC4200-Port schon beschädigt und führt jetzt zu 
den geschilderten Problemen?

Zusätzlich zur analogen Beobachtung des CAN-Busses benutze ich oft einen 
rohen Transceiver mit einem Logikanalysator an dessen RXD. Vielleicht 
hilft dir das bei der Fehlersuche.

LG, Sebastian

: Bearbeitet durch User
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.