CAN-Bus funktioniert nur ohne Terminierung

Gast #3286641
Lesenswert?

Hallo liebe Community,

ich kommuniziere zwischen 2 AVRs mittels CAN-Bus.
Dieser funktioniert auch insofern, da ich fehlerlos Nachrichten 
verschicken kann.
Die Kabellänge dafür liegt bei ~10cm. Das ganze funktioniert allerdings 
nur, solange die Jumper nicht gesetzt sind.

Übersehe ich irgendwo etwas grundlegendes, oder wo liegt mein Fehler?
Angehängte Dateien:
Gast #3286710
Lesenswert?

Ja, dadurch bleibst du im common mode Bereich der CAN-Transceiver. Führe 
die GND-Leitung mit (z.B. als Schirm des twisted-pair-Kabels).
Du kannst auch die Terminierung symmetrisch machen, bringt auch 
Vorteile. Das heißt, von CANH einmal 60 Ohm gegen GND und von CANL 
genauso. Gibt insgesamt auch 120 Ohm. Und die beiden Adern sind dann 
symmetrisch gegen GND.

Eine andere Möglichkeit ist, den CAN-Bus galvanisch zu trennen. Ist 
etwas mehr Aufwand, aber lohnt sich, wenn starke Störungen in der Nähe 
sind. Und das geht dann auch ohne GND, also nur 2-adrig. Habe ich schon 
paar hundert mal gemacht mit Leitungslängen bis knapp 200m. Datenrate 
dann 125kB/s. Völlig problemlos.
Gast #3286751
Lesenswert?

vielen Dank für die ausführliche Antwort!
Habe soeben die GND-Anschlüsse miteinander verbunden, jedoch 
funktioniert die Kommunikation wieder nur, wenn die Jumper nicht gesetzt 
sind.
Hat jemand eine andere Idee?
Gast #3286790
Lesenswert?

> Seid wann sind Nets in Eagle Blau?
Das ist kein Net, sondern ein Bus. Das stimmt schon. Das heißt, wenn die 
Anbindung am Bus stimmt, also die Nets, die aus dem Bus herausgezogen 
sind. Das kann man aber ohne Beschriftung nicht sehen.

@Duzezan: Kontrolliere das mal, indem du "show" anklickst und dann CANH. 
Dann muß CANH hell dargestellt werden und auch einer der 
Jumper-Anschlüsse. Aber nur einer. Und dann das gleiche mit CANL, dann 
muß der rechte Anschluß des Widerstandes hell gezeichnet werden.
Gast #3286807
Lesenswert?

Otto schrieb:
> Falk Brunner schrieb:
>> Das ist ein Bus. Möglicherweise hat sich der OP damit einen Defekt in
>> die Schaltung geholt und der Jumper macht einen Kurzschluss.
>
> Man könnte ja mal den Widerstand mit und ohne Jumper zwischen CANH+CANL
> messen.....

Der Vorschlag kam ja weiter oben schon von Martin. Einfach mal den CAN 
messen. Beide Jumper offen (von beiden Platinen), dann muß er relativ 
hochohmig sein. Ein Jumper geschlossen -> 120 Ohm zwischen CANH und 
CANL, beide geschlossen -> 60 Ohm zwischen CANH und CANL.

Hast du das mal gemacht, Duzezan?
Gast #3286827
Lesenswert?

Die Platine wird selbst gelötet. Falls also so kein Fehler im Layout 
vorliegt, sollte dieses schon stimmen.
Gerade gemessen, die Meßwerte stimmen mit den Vermutungen von @ich 
überein.
Beide Jumper offen:     ~35k Ohm
1 Jumper offen:          118 Ohm
beide Jumper geschlossen: 58 Ohm

Und bei den Widerständen handelt es sich wirklich um 120 Ohm.
Gast #3286837
Lesenswert?

Schließ mal beide Jumper und dann miß bitte den CAN gegen GND und VCC, 
ob da irgendwo ein Schluß ist. Kann auch sein, daß einer der 2551 einen 
Ausgangsfehler hat.

Also:

Schaltungen stromlos machen, dann
CANH gegen +5V
CANH gegen GND
CANL gegen +5V
CANL gegen GND

Da darf nichts niederohmiges zu messen sein.
Gast #3286870
Lesenswert?

also bei beiden Platinen liegen die gemessenen Werte alle über 20M Ohm, 
sollte also eigentlich auch passen.
Wenn du sagst, ich soll gegen +5V messen, dann dort, wo unter Strom VCC 
ist?
@Martin: - wie kann ich überprüfen, ob VCC zusammenbricht?
         - Wie meinst du das mit der Schutzdiode des MCP 2551 bzw. mit
           dem rezessiven Pegel?
Gast #3286881
Lesenswert?

Duzezan schrieb:
> Wenn du sagst, ich soll gegen +5V messen, dann dort, wo unter Strom VCC
> ist?

Ja, mit +5V meine ich VCC.
Wenn auch nur eine Ausgangsstufe der 2551 eine Schluß hat (gegen VCC 
oder gegen GND), dann geht gar nichts mehr.

Was du auch messen kannst: Im eingeschalteten Zustand beide 
CAN-Leitungen jeweils gegen VCC und gegen GND messen. So merkst du ja 
auch, wenn eine der beiden Bus-Leitungen auf VCC oder GND liegt.
#3286890
Lesenswert?

Duzezan schrieb:
> @Martin: - wie kann ich überprüfen, ob VCC zusammenbricht?
Mir Fehlt U$2G$2 (VCC und GND) in der Schaltung vieleicht wird der MCP 
in einer Schaltung nicht versorgt.
>          - Wie meinst du das mit der Schutzdiode des MCP 2551 bzw. mit
>            dem rezessiven Pegel?
die meisten ICs besitzen Schutzdioden zwischen Eingängen und VCC um 
einen gewissen ESD Schutz zu erreichen. Damit kann man den IC parasitär 
mit Strom versorgen.
Rezessiver Pegel ist wenn CANH nicht gegen VCC und CANL nicht gegen GND 
Treibt. In diesem Fall sollen die 60Ohm CANL gegen 2,5 und CANH gegen 
2,5 treiben. Ohne die Widerstände bleiben die Pegel wie bei den 
dominanten Pegel siehe oben. Ziehst Du aus CANH den Strom ab bekommst du 
den rezessiven Pegel...theoretisch.

Der CAN Bus ist multimasterfähig in den rezessiven Pegel darf jeder 
reinquatschen in den Dominanten macht das keinen Sinn.
Gast #3286904
Lesenswert?

Der Schaltplan ist nur ein Auszug. Die MCPs sind natürlich an 
Stromversorgung angeschlossen (zur Kontrolle eine Widerstandsmessung 
durchgeführt).
Habe eben die Spannung zwischen VCC, GND, CANH und CANL gemessen.
die Bus-Leitungen liegen nicht auf GND oder VCC, da sie bei ~2,5V 
liegen.
Und die Widerstände sind auch im Bereich von mehreren Megaohm.
Gast #3286947
Lesenswert?

Verwendest Du eigentlich einen Zufallsgenerator zum Setzen der 
Verbindungen, oder orientierst Du Dich am Luftdruck?

Keine Ahnung was Eagle mit Deiner Reset-Schaltung und deinem 16 MHz 
Zappler macht.

Ich habe die komische Angewohnheit, bei Leitungen, die verbunden werden 
sollen, einen Verbindungspunkt zu setzen. Dumme Angewohnheit - ich weiß.
Gast #3286955
Lesenswert?

Ich glaube nicht, daß es daran liegt. Wenn er die Jumper öffnet, 
funktioniert es ja komischerweise. Also arbeitet der Prozessor auch 
richtig, wie er soll...

Das mit den Punkten kommt manchmal vor. Das bedeutet nicht zwangsläufig, 
daß dort keine Verbindung besteht. Aber du hast Recht, normalerweise 
setzt man in so einem Fall die Junction dann manuell.
Gast #3287022
Lesenswert?

Ich hab auch schon eine Menge gesehen. Seit ein paar Jahren setze ich 
den CAN allerdings nur noch galvanisch getrennt ein. Damit umgehe ich 
auch alle Probleme, die mit einem falschen Potential zusammenhängen. 
Früher (noch ohne Trennung) kam es vor, daß irgend ein Held die 
Busleitungen auf eine Spannung gelegt hat (z.B. 48V) und dann sämtliche 
Busteilnehmer in Rauch aufgegangen sind. Ich konnte dann sämtliche 
Platinen wechseln. Da kam Freude auf...
Aber bei galvanischer Trennung kann es maximal passieren, daß die 
Übertragung nicht funktioniert, wenn ein falsches Potential anliegt. 
Aber es geht nichts mehr kaputt.
Aber das nur am Rande. Hier in dem Fall bin ich schon auf die Lösung 
gespannt. Es ist bestimmt nur eine Kleinigkeit, aber aus der Ferne ist 
es eben schwierig.
Heute abend wird es wohl eh nichts mehr. Ich mach mich dann erstmal raus 
hier.

Man sieht sich!

@duzezan: Halt durch, du schaffst das! :-)
Gast #3287366
Lesenswert?

In diesem Stadium muß man alles versuchen, das stimmt.
Allerdings glaube ich nicht, daß das die Ursache ist. Ich habe mehrere 
CAN-Teilnehmer auf benachbarten Platinen und die sind nur paar cm 
auseinander. Die gleiche Konstellation läuft auch mit ca. 200m ohne 
Änderung. Aber eine bessere Idee hab ich auch nicht mehr. Wir haben 
gestern ja schon alles mögliche versucht...
Gast #3287396
Lesenswert?

René B. schrieb:
> An deinem CAN fehlen die PullUp und PullDown für die rezessiven
> Pegel
> der Leitungen.
> Verpass dem wenigsten mal 560Ohm an CANH und CANL.

Seit wann gibt es beim CAN Pullup und Pulldown?
Zwischen CANH und CANL wird der Bus mit 120Ohm terminiert. Und das 
jeweils an beiden Enden des Busses. Die Teilnehmer zwischendrin haben 
keinen Anschlußwiderstand (wenn es mehr als zwei Teilnehmer sind).
Auf keinen Fall gehört ein Pullup oder Pulldown da hin!
Gast #3287434
Lesenswert?

@Philipp: Ich verwende doch einen MCP 2551, also was sollte mir diese 
AppNote nutzen?
Das Layout in Eagle habe ich übrigens ausgebessert ;-)
Leitungslänge war während der Messungen ein ~15m Telefonkabel, da dieses 
auch am Ende verwendet werden sollte.
Oszilloskop befindet sich leider nicht in meinem Besitz..
Was mir noch eingefallen ist:
Könnte es daran liegen, dass die Busterminierung auf physikalischer 
Ebene zwischen den MCPs liegt?
Gast #3287443
Lesenswert?

Duzezan schrieb:
> Könnte es daran liegen, dass die Busterminierung auf physikalischer
> Ebene zwischen den MCPs liegt?

Wie meinst du das?
Wenn du zwei Teilnehmer hast, dann hat jeder von den beiden einen 2551. 
CANH des einen wird mit CANH des anderen verbunden und CANL genauso.
Dann kommt an alle beide jeweils ein Widerstand von 120 Ohm zwischen 
CANH und CANL. Falls du mehrere Teilnehmer hast, bekommen die zwischen 
drin sind, keine Terminierung. Nur jeweils am Bus-Anfang und -Ende.
Aber ich dachte, das habe ich auf deinem Schaltplan so gesehen. Da war 
es doch richtig...
#3287516
Lesenswert?

Hier nochmal kurz zur Argumentation über das Innenleben deines 
verwendeten Transcievers. CANH hat rezessiv LO und wird gegen VDD 
gezogen (Push only).
CANL hat rezessiv HI und wird gegen GND gezogen (Pull only).

Das kleine Kerlchen in der Mitte realisiert den (rezessiven) Ruhepegel 
auf VDD/2. Ebendieses Konstrukt könnte aber defekt oder unzureichend 
sein. Dann wären die Flanken bei 2x120Ohm über CANH/CANL evtl. nicht 
steil genung und die Kommunikation will nicht.

Da kann man auch testweise externe Widerstände an CANH und CANL hängen. 
An CANH den externen PullDown und CANL einen externen PullUp.
Angehängte Dateien:
#3287525
Lesenswert?

Wenn das mit den PullUp/PullDown tatsächlich was bringt, kannst du beide 
Leitungen extern mit einem Bias-Netzwerk auf Ruhepegel stützen. Siehe 
Bild aus einer NXP Appnote.

Und jetzt noch die Appnote AN00020 von NXP dazu:
(..)
In principle, a circuit like the one in Figure 11
provides symmetrical biasing of the common
mode voltage with respect to the bus voltage levels in dominant state. 
In recessive state the bus voltages are biased to the symmetry voltage 
of
VCC/2
(..)
If there is a large number of unpowered nodes, it is recommended to 
additionally stabilize the nominal common mode voltage of VCC
/2 with an external biasing circuit in order to achieve an optimum EMC 
performance. (..)
Angehängte Dateien:
#3287529
Lesenswert?

René B. schrieb:
> Das kleine Kerlchen in der Mitte realisiert den (rezessiven) Ruhepegel
> auf VDD/2. Ebendieses Konstrukt könnte aber defekt oder unzureichend
> sein. Dann wären die Flanken bei 2x120Ohm über CANH/CANL evtl. nicht
> steil genung und die Kommunikation will nicht.

Dieses (hochohmige) Kerlchen eignet sich allenfalls dazu, den Pegel 
einer inaktive Leitung im zulässigen Rahmen zu halten. Bei einem korrekt 
betriebenen CAN Bus ist ausschliesslich der (niederohmige) 
Leitungsabschluss für die Flanke von dominant zu rezessiv zuständig. Die 
Innenschaltung der Transceiver ist dafür nicht zuständig. Ohne 
Abschluss kann das allenfalls in einem kleinen Laboraufbau bei niedriger 
Bitrate funktionieren.

Eine etwas genauere Darstellung einer möglichen Innenschaltung von 
CANH/L Anschlüssen bietet beispielsweise das Datasheet des SN65HVD233.

Wenn man in einem simplen 10cm langen Laboraufbau einen CAN Bus nicht zu 
laufen bringt, dann sind irgendwelche Bias-Widerstände der falsche 
Ansatz. Dann liegt das Hauptproblem garantiert woanders.
Gast #3287760
Lesenswert?

Einen richtigen CAN-Bus zu verwenden, wie im Layout meines 
Eingangspostings hat leider auch keine Verbesserung gebracht.
Sieht wohl leider so aus, als ob mir nichts anderes übrig bleibt, die 
MCPs auszutauschen und zu hoffen, dass es dann funktioniert...

Aber vielen Dank an alle, die versucht haben, mir zu helfen!
Gast #3287952
Lesenswert?

A. K. schrieb:

> Wenn man in einem simplen 10cm langen Laboraufbau einen CAN Bus nicht zu
> laufen bringt, dann sind irgendwelche Bias-Widerstände der falsche
> Ansatz. Dann liegt das Hauptproblem garantiert woanders.

Da muss ich dem Kollegen beipflichten, es gibt in dieser Situation eine 
effektive Fehlersuche:

Per Scope die Pegel anschauen, ob die vernünftig aussehen und ob die 
Bitzeit eingehalten wird. Weiterhin gaaanz wichtig: beim 
Sendevorgang(!!!) die Versorgung 5V lder meinetwegen auch VCC 
oszilloskopieren, ich denke da liegt der Hund begraben.
Gast #3288188
Lesenswert?

Canh und canl vertauscht ???
Längeres Kabel nehmen
Pullup/Pulldown Widerstände wenn Faulttolerant CAN
Neues Transceiverbaustein
Hängt evtl der sendende uC nach dem stecken der Jumper?
Störungen auf der Logikseite ausgeschlossen?)-> uC, CAN Controller
Oszibild machen und Posten
Gast #3288211
Lesenswert?

Vertauschen von CANH und CANL ist ausgeschlossen.
Kommunikation ist erfolgreich, solange kein Jumper gesetzt ist.
Wird dann ein oder beide Jumper gesetzt, erhalte ich keine Nachricht 
mehr.
Werden die Jumper dann wieder gezogen, wird die letzte Nachricht 
übertragen, und Kommunikation ist wieder erfolgreich möglich.
Heute wird die Stromversorgung überprüft, falls dass nichts hilft und 
ich kein Oszi in die Finger bekomme, werde ich neue MCPs ordern müssen.
Dachte bei CAN gibt es keine Pullup/-down-Widerstände?
Gast #3288359
Lesenswert?

Natürlich hat CAN Pullup und Pulldown. Sonst könnte kein Kurzschluss 
nach Masse / Vcc erkannt werden. Faulttolerant Receiver brauchen immer 
Pullup/down, Highspeed Transceiverbausteine haben das integriert 
ausreichend. Den MCP kenne ich nicht, im Automotive ist SAE bzw. TI 
vertreten.
Gast #3288428
Lesenswert?

Peter schrieb:

>Natürlich hat CAN Pullup und Pulldown.

Klar,auf Chipebene bestimmt.

> Sonst könnte kein Kurzschluss nach Masse / Vcc erkannt werden.

Beim "Standard"-CAN nicht relevant. Welche Erkennung meinst Du in Bezug 
auf den eingesetzten Tranceiver?

> Den MCP kenne ich nicht

Der MCP2551 ist eine gaaanz normale Alternative (Pin- und 
funktionskompatibel) zu AT6660, PCA82C25x, TJA1040, usw. usw.

Da braucht es definitiv keine externen(!) Pull-Up oder Pull-Down. 
Verwirre den armen Kerl doch nicht. Wenn es in dem Aufbau im Labor nicht 
läuft hat er ein viel trivialeres Problem.

>Faulttolerant Receiver...

Andere Baustelle.

>im Automotive ist SAE bzw. TI > vertreten.

Wen meinst Du mit SAE? Was mit TI? Spannst Du einen Vergleich in etwa 
zwischen "ADAC" und "Volkswagen" auf?
Gast #3288513
Lesenswert?

Peter schrieb:
> Natürlich hat CAN Pullup und Pulldown. Sonst könnte kein
> Kurzschluss
> nach Masse / Vcc erkannt werden. Faulttolerant Receiver brauchen immer
> Pullup/down, Highspeed Transceiverbausteine haben das integriert
> ausreichend. Den MCP kenne ich nicht, im Automotive ist SAE bzw. TI
> vertreten.

Definitiv FALSCH!
CAN hat keine Pullup und Pulldown, sondern nur die Bus-Terminierung 
von jeweils 120 Ohm am Anfang und Ende des Busses. Hatte ich aber schon 
paarmal geschrieben. Und das ist nicht meine persönliche Meinung, weil 
ich mich mit jemand streiten will. Das liegt mir fern. Das ist in jeder 
CAN-Dokumentation nachzulesen.
Gast #3288524
Lesenswert?

@Duzezan:
Wenn du einen Oszi auftreiben kannst und das ist ein Zweikanaler, dann 
noch einen Tipp:
Du kannst einmal die einzelnen Busleitungen (CANH und CANL) getrennt 
anschauen, was die mit dem Pegel machen. Als Kontrolle kannst du auch 
die beiden Oszi-Kanäle nehmen, einen von beiden invertieren (geht mit 
den meisten Zweikanalern) und dann die beiden addieren (auch eine 
Funktion des Oszis). Dann bekommst du eine Kurve, die dem eigentlichen 
Signal entspricht. Du machst also mit dem Oszi aus dem differenziellen 
Signal wieder ein "Single"-Signal.
#3288700
Lesenswert?

Falk Brunner schrieb:
> 1.4.1 HIGH-SPEED
> High-Speed mode is selected by connecting the RS pin
> to VSS. In this mode, the transmitter output drivers have
> fast output rise and fall times to support high-speed
> CAN bus rates.

Aber dann wäre es zumindest einen Versuch wert, mit einem Widerstand das 
System etwas langsamer zu machen.

[Spekulation]

1. Wer weiß, was da bei dem/der umbekannten Layout/Verdrahtung eventuell 
schwingt. Ein Abschlußwiderstand sollte das zwar eigentlich verbessern, 
aber tut es eventuell nicht; aber mit Abschluss sind die Pegel kleiner 
und das Einschwingen könnte dann die Schaltschwelle des Empfängers 
erreichen, sodass er "prellt".

2. Wegen schlechtem Layout (GND, Stützkondensatoren, ...) kommt der 
Ärger über GND und/oder +5V. Bei High-Speed und Abschlusswiderstand 
(höherer Strom) wir das System instabil.

[/Spekulation]

Gruß Dietrich
Gast #3288795
Lesenswert?

ich schrieb:
> Du kannst einmal die einzelnen Busleitungen (CANH und CANL) getrennt
> anschauen, was die mit dem Pegel machen. Als Kontrolle kannst du auch
> die beiden Oszi-Kanäle nehmen, einen von beiden invertieren (geht mit
> den meisten Zweikanalern) und dann die beiden addieren (auch eine
> Funktion des Oszis). Dann bekommst du eine Kurve, die dem eigentlichen
> Signal entspricht. Du machst also mit dem Oszi aus dem differenziellen
> Signal wieder ein "Single"-Signal.


Ich kann doch einfach CAN-high gegen CAN-low messen. Also den Tastkopf 
an CAN-high und die Masseleitung an CAN-low und dann sehe ich doch die 
Bits aufm Bus. Oder sehe ich das falsch?
#3289254
Lesenswert?

> Ich kann doch einfach CAN-high gegen CAN-low messen. Also den Tastkopf
> an CAN-high und die Masseleitung an CAN-low und dann sehe ich doch die
> Bits aufm Bus. Oder sehe ich das falsch?

Nur wenn dein Versuchsaufbau, sprich dessen Netzteil und GND 
potentialfrei sind ODER du ein batteriebetriebenes Oszi hast ODER einen 
Differenztastkopf hast ODER ...

Besser:
- Tastköpfe auf 10er Teilung stellen
- Nimm beide Oszi Kanäle und häng die Krokoklemmen jeweils
  auf GND deines Aufbaus.
- CH1 auf CANH
- CH2 auf CANL
- Wenn dein Oszi dann noch eine Subtraktion der Kanäle beherrscht, lass 
dir das Differenzsignal auch noch ausgeben.

Und bitte vorher - falls noch nicht geschehen - mal die Tastköpfe in der 
10er-Teilung auch abgleichen :) (google "Tastkopf abgleichen")

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