CAN-Fehler bei mehreren CAN-Bus-Teilnehmern - Timing ändern?

OP #5965706
Lesenswert?

Ich habe das Problem wenn ich an einem funktionierenden HS-CAN-Bus einen 
zusätzlichen (6.) Teilnehmer anschließe tauchen bei hoher Buslast 
Error-Frames auf. Entferne ich einen Teilnehmer (auch einen anderen, 
muss nicht der zuletzt angesteckte sein) läuft der Bus wieder ohne 
Error-Frames. Terminierungsfehler kann ich ausschließen. Meine Vermutung 
ist dass der Fehler auftritt wenn mindestens zwei Teilnehmer 
gleichzeitig anfangen zu senden - mit einem kleinen Phasenunterschied - 
so dass ein Empfänger dann ein überlanges Bit sieht und deswegen einen 
Fehler wirft. Normal wird ja gleichzeitiges Senden erkannt und 
abgefangen.
Frage daher: Muss man das Bit-Timing bei zusätzlichen CAN-Teilnehmern 
anpassen oder darf sich das nicht ändern?
#5965841
Lesenswert?

Bei allen genannten Problemen sorgt das CAN Protokoll selbst, auch 
Hardwareebene bereits für Abhilfe, es heißt ja nicht ohne Grund CSMA/CA 
(https://elearning.vector.com/mod/page/view.php?id=53)

Kannst Du das Signal nicht mal Oszillographieren? Manche Probleme 
erkannt man nur auf dem Layer 1 direkt...

6 Teilnehmer sind jetzt nicht gerade viel, aber vielleicht machen die, 
wie Du sagst alle so viel Traffic das der 6. dann der Topfen ist der das 
Faß zum überlaufen bringt?!
#5966085
Lesenswert?

Wenn mindestens zwei Nodes Nachrichten auf der gleichen ID versenden 
aber das Datenfeld verschieden ist, dann kommt es unweigerlich zu einer 
Kollision, und damit zu error frames. Da ein dominates Bit ja immer (! 
nicht nur während der Arbitrierungsphase) ein rezessives Bit 
überschreibt und damit über das Zurücklesen ein Fehler erkannt wird.

Jeder Node muss daher mit eigenen IDs arbeiten, die im Netzwerk nur 
einmalig vergeben sind.

Die Verschiebung um den Bruchteil einer Bitzeit könnte evtl. auch noch 
zu Problemen führen. Wobei ich das noch nie gesehen habe. Theoretisch 
wäre es aber möglich die Abtastzeitpunkte je Node so unterschiedlich 
einzustellen, dass es zu deinen Problemen kommt.
#5966134
Lesenswert?

Bit-Zeiten (Quantas) können ein Problem sein, aber wahrscheinlicher ist 
eine ID-Kollision. Alles oben genannte führte dann unweigerlich zu einem 
CRC Fehler.
Ich meine mich aber zu erinnern das ein CAN-Controller pet Definition 
das gesendete Bit auch immer einliest und vergleicht, nicht nur während 
der Arbitrierungsphase. Somit sollten die Sender ihr Problem erkennen 
und den internen Fehlerzähler erhöhen der dann früher oder später zur 
Selbstabschaltung eines der Nodes führen sollte.
#5966500
Lesenswert?

Ja, genau das machen die CAN-Controller (nicht die Transceiver).
Wenn dann aber außerhalb des Arbitrierungsbereichs ein rezessives Bit 
gesendet und ein dominantes gelesen wird, wird ein Errorframe gesendet.

Dieser Vergleich soll ja genau das feststellen, dass die auf dem Bus 
liegende Nachricht nicht mit der zu sendenden Nachricht übereinstimmt.
Deshalb ist es auch eine blöde Idee, dass mehrere Nodes mit der ID 
senden, das kann nur schief gehen.

Bis zum CRC Fehler kommts in einem solchen Fall schon gar nicht. Denn 
bevor die Checksumme auf dem Bus liegt muss ja ein Unterschied im 
Datenbereich zwischen den gleichzeitig sendenden Nodes da gewesen sein 
und somit wird die aktuelle Übertragung per Errorframe abgebrochen.
Zuerst von dem Node, der den Fehler erkennt, dann stimmen alle anderen 
Nodes mit ein. Hab jetzt spontan keine Ahnung mehr wieviele Bitzeiten 
der Errorframe lang ist, nach Abschluss wird der Bus für die nächste 
Übertragung wieder freigegeben.
Beitrag #5966512 wurde von einem Moderator gelöscht.
Gast #5966676
Lesenswert?

Peter schrieb:
> Gerald O. schrieb:
>> bei 95% Buslast über 1000 Fehler in 15
>> Minuten.
>
> Woher kommt diese Buslast? Aus einem Tool? Theoretisch errechnet? Selber
> gemessen? Wie?
>
> Vielleicht ist die tatsächliche Buslast ja bei 100.0% und daher die
> Fehler. Nur eine Vermutung.

Auch 100% macht keine Error-Frames, nur die Botschaften mit hoher ID 
kommen nicht mehr auf den Bus.
OP #5967449
Lesenswert?

Christian G. schrieb:
> Jeder Node muss daher mit eigenen IDs arbeiten, die im Netzwerk nur
> einmalig vergeben sind.

Dachte schon das Problem reproduzieren zu können, da war mir allerdings 
nur der Fehler mit der doppelten ID beim erzeugen von Buslast mit 
mehreren Nodes unterlaufen. An den Abtastzeitpunkten bin ich noch dran. 
Problem durch ESD-Schutzdioden ist eventuell auch noch ein Ansatz.

Danke für die Tipps!
Garry

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren