Forum: Mikrocontroller und Digitale Elektronik STM32F417: CAN Bus mit EoF Error mit mehr als 8 Teilnehmern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Adi (ataeschler)



Lesenswert?

Guten Tag zusammen

Ich habe ein Problem mit dem CAN Bus und zwar funktioniert dieser 
solange nicht mehr als 8 Teilnehmer aktiv sind. Wenn Teilnehmer ohne 
Spannung verbunden sind, spielen Sie keine Rolle und der Bus 
funktioniert einwandfrei. Sobald mehr als 9 Teilnehmer aktiv sind 
erscheint im EOF am Schluss des Frames dominante Bits. Bis es dann 
wieder funktioniert.

Es ist immer die selbe Elektronik mit einem STM32F417 <-> SN65HVD230D 
Treiber von TI. An den Enden des Buses sind die Endwiderstände 
eingeschaltet. Es spielt keine Rolle welche Elektronicken man nimmt. Die 
Neunte bringt den Bus an den Anschlag bis der Bus in einem Teilnehmer 
passiv ist. Die Baudrate habe ich mit 500k und 250k probiert, die Grenze 
bleibt jedoch bei 8 Teilnehmern.

Anbei eine Aufnahme vom Bus aufgenommen mit einer Differentialprobe auf 
CAN_P und CAN_N. Immer wieder wird versucht das Frame zu senden und am 
Schluss klappt es endlich. Das AKN Flag ist in allen Frames vorhanden 
und anschliessend kommt nochmal eine "Spitze" in das EoF rein. In der 
Tabelle sieht man das sich gute und schlechte Frames abwechseln.

Wer kann mir eine Tipp geben um weiterzusuchen oder weiss jemand wie 
dieser Fehler benannt ist. Ich habe nur Informationen gefunden zu den 
verschiedenen Pegel bei AKN Flags. 
https://blog.csdn.net/haoseren/article/details/80682192

von Christian (christiankpunkt)


Lesenswert?

Und alle Controller senden unterschiedliche CAN-IDs aus?

Kannst du auch mal ein Foto vom Aufbau anhängen.

von Paul B. (paule201)


Lesenswert?

Aktiviere mal die Pull-Ups an den CAN RX Leitungen der Nodes.

von Jens K. (jensky)


Lesenswert?

Kann man den SN65HVD230D auch für RS485 verwenden?

von Volker Z. (vzavza)


Lesenswert?

Im ersten Bild sieht es so aus, als CAN-Ground nicht verbunden ist.

Die Spannung des Errorframes sieht ok aus. Ist wohl der Knoten an dem du 
misst. Der Pegel der Daten ist recht klein. Zu viele der 
Abschlusswiederstände eingeschaltet?

von Adi (ataeschler)



Lesenswert?

Paul B. schrieb:
> Aktiviere mal die Pull-Ups an den CAN RX Leitungen der Nodes.

Hatte keinen Einfluss, bleibt nach wie vor die Spitze am End-of-Frame.

von Volker Z. (vzavza)


Lesenswert?

Jens K. schrieb:
> Kann man den SN65HVD230D auch für RS485 verwenden?

Nein.

von Adi (ataeschler)


Angehängte Dateien:

Lesenswert?

Volker Z. schrieb:
> Im ersten Bild sieht es so aus, als CAN-Ground nicht verbunden ist.
>
> Die Spannung des Errorframes sieht ok aus. Ist wohl der Knoten an dem du
> misst. Der Pegel der Daten ist recht klein. Zu viele der
> Abschlusswiederstände eingeschaltet?

Vielen Dank für den Hinweis, da habe ich den Wald vor lauter Bäumen 
nicht mehr gesehen. Jetzt fühle ich mich richtig schlecht. Der 
Widerstand hat sich wieder eingeschaltet nach der Konfiguration und 
daher war mit jedem Teilnehmer der aktiv war, ein Widerstand 
dazugeschaltet.

Nach dem Fix sehen die Spannungspegel wieder normal aus. Besten Dank für 
die schnelle und kompetente Hilfe.

von Volker Z. (vzavza)


Lesenswert?

Nur meine Meinung:
Ich mag keine per Software schaltbaren Abschlusswiderstände.

-  Mann kann nicht (ohne Software) erkennen welche Widerstände aktiv 
sind.
-  Sind die CAN-Geräte von verschiedenen Herstellern, braucht man einen 
ganzen Zoo von Konfigurationssoftware + Kabel und Adaptern.
- Schaltet man die Geräte zum Nachmessen ab, sind auch die 
Terminierungswiderstände aus.

Einfach je einen Widerstand am Anfang und am Ende des Busses und jeder 
Servicetechniker kann das vor Ort prüfen und Fehler beheben.

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.