Forum: Mikrocontroller und Digitale Elektronik Abstand halten - jetzt auch im CAN-Bus!?


von Bauform B. (bauformb)


Angehängte Dateien:

Lesenswert?

Hallo CAN-Fans & -Gegner,

vor kurzem gab's hier¹ nebenan eine Werbeveranstaltung von Peter D. 
(peda) für CAN statt RS-485. Blöderweise habe ich auch noch einen netten 
Transceiver gefunden, LTC2875. Bis dahin hatte ich CAN total verweigert, 
jetzt würde ich gerne mal mit einer etwas extremen RS-422 Anwendung 
vergleichen.

Es gibt 10 Voll-Duplex Punkt-zu-Punkt Verbindungen. Multi-Master ist 
also kein Problem und wird auch genutzt. Die Daten kommen mit 115200Baud 
in kleinen Päckchen, max. 12 Byte netto, max. 150 pro Sekunde Grundlast 
+ noch kürzere Messages bei Bedarf, mit höherer Priorität. Von daher 
passt CAN wie Ar$$$ auf Eimer, das geht auf einem einzigen Bus mit 
125kHz und 2 Leiterbahnen statt 40(!) für RS-422.

Die längste Verbindung ist 300mm (in Worten: 0.3 Meter) auf einer 
Backplane, deshalb gibt es keine Abschlusswiderstände, sondern 
250kBit-Transceiver. Die brauchen weniger als 1mA, also ist CAN selbst 
mit dem LTC2875 klar im Nachteil. Vor allem, weil die Stromaufnahme um 
50mA mit 125kHz schwankt. Der typische 100nF pro Transceiver nützt da 
garnichts, der typische LDO kann das nicht ausregeln, besonders, wenn 
die restliche Schaltung mit 10mA auskommt. Wie macht man das? Ein 
eigener LDO + 100n + 2u2 + 68u Tantal? Ein spezieller Spannungsregler?

Jetzt kommen wir endlich zum Betreff. In der SLLA279A schreibt TI, dass 
CAN-Teilnehmer einen Mindestabstand einhalten sollten (oder müssen?). Da 
bin ich mit meinen 25.4mm von Node zu Node um ein bis zwei 
Größenordnungen drunter. Andererseits ist die Gesamtausdehnung auch um 
den Faktor 1000 kleiner. Überhaupt ist bei CAN immer nur von Metern bis 
Kilometern die Rede, das hilft mir auf einer Backplane garnichts.

Genauso geht es bei den 120 Ohm Widerständen immer um Kabel und deren 
Impedanz, das sieht doch auf einer Backplane ganz anders aus? Das Saturn 
Toolkit sagt mir für breite Leiterbahnen auf einer 2-lagigen Platine 90 
Ohm, 155 Ohm differential, aber gilt das überhaupt noch bei 2.54mm 
Abstand? Und braucht man dann 91 oder 160 Ohm Widerstände? Und was 
passiert, wenn links und rechts neben den beiden Bahnen wieder eine 
Kupferfläche kommt?

Kann man diese Daten-Leiterbahnen EMV-mäßig noch besser gestalten? 
Verdrillen und schirmen wie im Kabel geht ja nicht. 4 Lagen scheinen mir 
doch etwas übertrieben, wenn man DC-mäßig mit einer Kupferlage 
auskommt. Außerdem würde die Impedanz innen nur niedriger und noch 
ungenauer? Oft sieht man eine stromkompensierte Drossel. Die ist doch 
überflüssig, wenn die Treiber schon Slew Rate Begrenzung machen?

Es geht bei CAN immer nur um maximale Geschwindigkeit auf langen Kabeln, 
ist meine Anwendung völlig unrealistisch? Zum Beispiel die Lage des 
Samplepoint. Jeder legt den (fast) ganz ans Ende und damit bleibt nur 1 
Quantum um Unterschiede in der Taktfrequenz zu kompensieren und dann 
braucht man einen Quarz. Der ist für RS-422 überflüssig. Für meine kurze 
Verbindung würde ich das Bit doch eher so ähnlich unterteilen: 1 Sync, 1 
Propagation, 7 Phase1, 7 Phase2 und könnte dann auch ohne Quarz 
auskommen?

Traditionell kann ein Bus-Teilnehmer den ganzen Bus blockieren und dann 
hilft nur alle der Reihe nach ausstecken. Bei Punkt-zu-Punkt 
Verbindungen kann die übergeordnete Steuerung per Time-Out den Fehler 
eingrenzen. Bei CAN funktioniert das genauso, weil sich der Transceiver 
nach 4ms abschaltet -- solange er nicht selbst defekt ist und auch nur 
bei einfachen statischen Fehlern. Der uC kann den Bus trotzdem 
blockieren, er muss nur in regelmäßigem Abstand ein einziges Bit senden. 
Die Fehlerbehandlung der CAN-Controller sorgt dann für einen 
Totalausfall. Na gut, das ist wohl unwahrscheinlich genug.


TLDR: ein CAN-Bus statt zehn Punkt-zu-Punkt Verbindungen würde jede 
Menge Hardware sparen, aber doch nicht so viel, wie man zunächst glaubt. 
Und es gibt ein paar ganz neue Probleme, die in Werbeveranstaltungen 
nicht erwähnt werden.


1) Beitrag "Re: RS485 galvanische Trennung?"

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


Lesenswert?

Bauform B. schrieb:
> In der SLLA279A schreibt TI, dass CAN-Teilnehmer einen Mindestabstand
> einhalten sollten (oder müssen?).
... wenn einer der Knoten 200m weit weg ist:
1
and the first node is connected through an additional 200m of Belden3105A twisted-pair cable to another node and terminated

Bei deinem 1000 mal kompakteren Aufbau wirst du solche schnarchlangsamen 
Reflexionen nicht finden können.

von H. (Gast)


Lesenswert?

Mindestabstände bei CAN einhalten wäre mir neu, allerdings würde ich 
immer mindestens einen Abschlusswiderstand platzieren. Der dient nämlich 
nicht nur als reiner Abschlusswiderstand sondern gewissermaßen auch als 
Arbeitswiderstand für die Endstufe im Transceiver. Wenn das völlig 
hochohmig aufgebaut ist sehen die Signale sehr bescheiden aus, auch bei 
kurzen Abständen - gerade bei höheren Baudraten. Die Aussage wird gleich 
in den Folgekommentaren zerrissen werden aber ihn einfach drauf und 
fertig.

von Falk B. (falk)


Lesenswert?

H. schrieb:
> Mindestabstände bei CAN einhalten wäre mir neu, allerdings würde ich
> immer mindestens einen Abschlusswiderstand platzieren. Der dient nämlich
> nicht nur als reiner Abschlusswiderstand sondern gewissermaßen auch als
> Arbeitswiderstand für die Endstufe im Transceiver. Wenn das völlig
> hochohmig aufgebaut ist sehen die Signale sehr bescheiden aus, auch bei
> kurzen Abständen - gerade bei höheren Baudraten.

Richtig, denn CAN arbeitet mit differentiellen Open Collector Ausgängen! 
Dadurch ergibt sich erst der dominante und rezessive Pegel!

von Falk B. (falk)


Lesenswert?

Bauform B. schrieb:

> Es gibt 10 Voll-Duplex Punkt-zu-Punkt Verbindungen. Multi-Master ist
> also kein Problem und wird auch genutzt. Die Daten kommen mit 115200Baud
> in kleinen Päckchen, max. 12 Byte netto, max. 150 pro Sekunde Grundlast
> + noch kürzere Messages bei Bedarf, mit höherer Priorität. Von daher
> passt CAN wie Ar$$$ auf Eimer, das geht auf einem einzigen Bus mit
> 125kHz und 2 Leiterbahnen statt 40(!) für RS-422.

Sieht so aus.

> Die längste Verbindung ist 300mm (in Worten: 0.3 Meter) auf einer
> Backplane, deshalb gibt es keine Abschlusswiderstände, sondern
> 250kBit-Transceiver. Die brauchen weniger als 1mA, also ist CAN selbst
> mit dem LTC2875 klar im Nachteil. Vor allem, weil die Stromaufnahme um
> 50mA mit 125kHz schwankt. Der typische 100nF pro Transceiver nützt da
> garnichts, der typische LDO kann das nicht ausregeln, besonders, wenn
> die restliche Schaltung mit 10mA auskommt. Wie macht man das? Ein
> eigener LDO + 100n + 2u2 + 68u Tantal? Ein spezieller Spannungsregler?

Ganz einfach, den Tranceiver weglassen und nur mit dem CAN-Controller 
und Open Drain arbeiten! Spart Teile und massig Strom!

> Jetzt kommen wir endlich zum Betreff. In der SLLA279A schreibt TI, dass
> CAN-Teilnehmer einen Mindestabstand einhalten sollten (oder müssen?). Da
> bin ich mit meinen 25.4mm von Node zu Node um ein bis zwei
> Größenordnungen drunter. Andererseits ist die Gesamtausdehnung auch um
> den Faktor 1000 kleiner. Überhaupt ist bei CAN immer nur von Metern bis
> Kilometern die Rede, das hilft mir auf einer Backplane garnichts.

CAN braucht AFAIK keinen Mindestabstand, bestenfall einen 
Maximalabstand, abhängig von der Baudrate.

> Genauso geht es bei den 120 Ohm Widerständen immer um Kabel und deren
> Impedanz, das sieht doch auf einer Backplane ganz anders aus? Das Saturn
> Toolkit sagt mir für breite Leiterbahnen auf einer 2-lagigen Platine 90
> Ohm, 155 Ohm differential, aber gilt das überhaupt noch bei 2.54mm
> Abstand? Und braucht man dann 91 oder 160 Ohm Widerstände? Und was
> passiert, wenn links und rechts neben den beiden Bahnen wieder eine
> Kupferfläche kommt?

Bei kurzen Leitungen und großen Anstiegszeiten braucht es keine 120 Ohm 
Wellenwiderstand auf den Leitungen.

> Kann man diese Daten-Leiterbahnen EMV-mäßig noch besser gestalten?

Wozu? Ein coplanare Leitung ist OK.

> Verdrillen und schirmen wie im Kabel geht ja nicht. 4 Lagen scheinen mir
> doch etwas übertrieben, wenn man DC-mäßig mit einer Kupferlage
> auskommt. Außerdem würde die Impedanz innen nur niedriger und noch
> ungenauer? Oft sieht man eine stromkompensierte Drossel. Die ist doch
> überflüssig, wenn die Treiber schon Slew Rate Begrenzung machen?

Man braucht keine Gleichtaktdrosseln, wenn man auf einer Backplane 
bleibt.

> Es geht bei CAN immer nur um maximale Geschwindigkeit auf langen Kabeln,
> ist meine Anwendung völlig unrealistisch?

Nein.

> Zum Beispiel die Lage des
> Samplepoint. Jeder legt den (fast) ganz ans Ende und damit bleibt nur 1
> Quantum um Unterschiede in der Taktfrequenz zu kompensieren

Die sind minimal, weil man meist eher mit Quarzen als Taktquelle 
arbeitet.

> und dann
> braucht man einen Quarz. Der ist für RS-422 überflüssig.

Stimmt so nicht. RS-422 ist nur die physikalische Schicht, die sagt nix 
über deinen UART aus.

> Die Fehlerbehandlung der CAN-Controller sorgt dann für einen
> Totalausfall. Na gut, das ist wohl unwahrscheinlich genug.

Da der Kram millardenfach in Autos und Automatisierung verbaut ist, 
scheint dieses Problem lösbar zu sein.

> TLDR: ein CAN-Bus statt zehn Punkt-zu-Punkt Verbindungen würde jede
> Menge Hardware sparen, aber doch nicht so viel, wie man zunächst glaubt.
> Und es gibt ein paar ganz neue Probleme, die in Werbeveranstaltungen
> nicht erwähnt werden.

There is no such thing as free lunch.

von Chris R. (rcc)


Lesenswert?

H. schrieb:
> Mindestabstände bei CAN einhalten wäre mir neu, allerdings würde ich
> immer mindestens einen Abschlusswiderstand platzieren. Der dient nämlich
> nicht nur als reiner Abschlusswiderstand sondern gewissermaßen auch als
> Arbeitswiderstand für die Endstufe im Transceiver. Wenn das völlig
> hochohmig aufgebaut ist sehen die Signale sehr bescheiden aus, auch bei
> kurzen Abständen - gerade bei höheren Baudraten. Die Aussage wird gleich
> in den Folgekommentaren zerrissen werden aber ihn einfach drauf und
> fertig.

Leider - Weil heute jeder glaubt nur weil der Bus irgendwie im Labor 
läuft ist schon alles richtig :(

von Clemens L. (c_l)


Lesenswert?

Bauform B. schrieb:
> Genauso geht es bei den 120 Ohm Widerständen immer um Kabel und deren
> Impedanz, das sieht doch auf einer Backplane ganz anders aus?

Auf Backplanes sind 'normale' Logik-Signale üblich, gerne mit möglichst 
kleiner Spannung.

Wenn du differenzielle Signale willst, nimm M-LVDS.

Siehe auch "Comparing Bus Solutions": https://www.ti.com/lit/pdf/slla067

von Hansjörg (Gast)


Lesenswert?

Bauform B. schrieb:
> Hallo CAN-Fans & -Gegner,
>
> vor kurzem gab's hier¹ nebenan eine Werbeveranstaltung von Peter D.
> (peda) für CAN statt RS-485.

Hallo Belchen Beitrag meinst du hier?

von Peter D. (peda)


Lesenswert?

In einem Gerät benutze ich CAN auf der Backplane. Ein 120R sitzt auf dem 
Master, der andere am Ende der Backplane.

In einem anderen Gerät mit Hochspannung wird der CAN-Bus über Flachkabel 
an bis zu 16 Slaves verteilt. Da sitzt nur ein 120R auf dem Master, d.h. 
der 2. Abschlußwiderstand fehlt.

Transceiver sind noch die alten PCA82C251T.
Für die auf HV floatenden Slaves erfolgt die galvanische Trennung des 
CAN über OPI1266. Der ADM3054 ist lt. Datenblatt nur für 846V 
zugelassen, ich brauche aber 4000V Isolation.

von Hansjörg (Gast)


Lesenswert?

Peter D. schrieb:
> Transceiver sind noch die alten PCA82C251T.
> Für die auf HV floatenden Slaves erfolgt die galvanische Trennung des
> CAN über OPI1266. Der ADM3054 ist lt. Datenblatt nur für 846V
> zugelassen, ich brauche aber 4000V Isolation.

Klingt sehr interessant. Mit welchen Baudraten arbeitest du in diesen 
Projekten? Welche Mikrocontroller verwendest du wenn du Can brauchst?
Verwendest du auch höhere Protokolle wie CanOpen?
Danke für die Infos

von Peter D. (peda)


Lesenswert?

Wegen der Optokoppler benutzen wir nur 250kBit.
Das Projekt ist schon recht alt und hat mehrere Redesigns hinter sich:
- Infineon C505CA mit externem Flash
- Temic T89C51CC01
- AT90CAN128
Jeweils mit Bootloader über CAN.
Das Protokoll ist teilweise DeviceNet.

von Hansjörg (Gast)


Lesenswert?

Peter D. schrieb:
> - AT90CAN128

Peter D. schrieb:
> Das Protokoll ist teilweise DeviceNet.

Hast du DeviceNet selbst geschrieben oder einen Stack gekauft?
Den AT90CAN128 habe ich auch öfter mit Can Open betrieben.
Verwende jetzt aber den STM32....hat mehr von allem ist aber auch sehr 
viel aufwändiger......

von Hansjörg (Gast)


Lesenswert?

Hansjörg schrieb:
> Hast du DeviceNet selbst geschrieben oder einen Stack gekauft?

Befriedige bitte meine Neugierde;)

von Volker Z. (vzavza)


Lesenswert?

Hansjörg schrieb:
> Den AT90CAN128 habe ich auch öfter mit Can Open betrieben.

[Besserwisser]
Die offizielle Schreibweise ist CANopen.
https://www.can-cia.org/canopen/
[/Besserwisser]

von Peter D. (peda)


Lesenswert?

Hansjörg schrieb:
> Hast du DeviceNet selbst geschrieben oder einen Stack gekauft?

Hat ein Kollege geschrieben, um Druckmeßköpfe auszulesen.

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.