Forum: Mikrocontroller und Digitale Elektronik CAN-Bus umschalten, aber wie? (analog switch möglich?)


von Sven H. (dsb_sven)


Lesenswert?

Hallo zusammen

So einen ähnlichen Thread gabs schonmal hier: 
Beitrag "Multiplexer für CAN-Bus"

Aber da ganz unten steht:

>Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
>Bitte hier nur auf die ursprüngliche Frage antworten,
>für neue Fragen einen neuen Beitrag erstellen.


Also hier die Frage:

Ich will einen CAN-Bus (eigentlich zwei, aber das tut nichts zur Sache) 
zwischen mehreren Leitungen umschalten, will aber auf keinen Fall Relais 
verwenden. Das Umschalten soll natürlich per Software geschehen.

Was für Möglichkeiten hab ich da? Analogschalter vielleicht? Wie siehts 
da mit Strom aus? Digital wirds nicht gehn, da die Spannungen beim 
CAN-Bus ja um 2,5V liegen. (Wie CAN funktioniert weiß ich schon, also 
dazu bitte keine Erklärungen)

Zusätzliche Infos:

CAN Tranceiver: TJA1040
Baudrate: 1Mbit/s
Maximale Anzahl Busteilnehmer: 110 (Aus dem Datasheet vom TJA1040, 
werden whs nur so um 30 bis 40 aber vorsehen will ichs trotzdem)

von Helmut L. (helmi1)


Lesenswert?

An jeder Leitung einen TJA1040 und dahinter einen Multiplexer zum 
Controller.
Das mit dem Analogschalter wird so  wahrscheinlich nicht funktionieren 
weil die zu hochohmig sind. Was spricht gegen Relais ?

von Harald (Gast)


Lesenswert?

Wenn Du es so machen möchtest, würde ich Dir unbedingt ein Multiplexing 
hinter dem Transceiver anraten, d.h. auf der TTL-Ebene. Das ist dann ja 
relativ einfach mit Logikgattern bzw. Analogschaltern zu realisieren.

Analogschalter auf der physikalischen Busebene (d.h. vor dem 
Transceiver) müssten immer gewisse Störfestigkeiten aufweisen und die 
gleichen Common-Mode Eigenschaften wie der Transceiver-Baustein 
aufweisen. Außerhalb des Labortisches würde ich das auf keinen Fall mit 
Analogschaltern o.ä. machen. Höchstens mit Relais, aber das scheidet ja 
aus.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Kann man denn die Notwendigkeit der Umschaltung nicht durch geeignete 
Adressierung vermeiden?

Wenn man Tranceiver verwendet, um die Pegel auf CMOS zu bekommen, sollte 
eine Umschaltung kein Probkem sein.

Warum sollen eigentlich keine Relais verwendet werden?

Grüße,

Peter

von Sven H. (dsb_sven)


Lesenswert?

Problem bei der Lösung mit den mehreren Tranceivern ist, dass ich dann 
statt zwei Tranceiver 14 Tranceiver benötigen würde.

Umschalten mit Relais fällt aus dem selben Grund flach --> 14 Relais.

Zur Notwendigkeit des Umschaltens:

Wir entwickeln zur Zeit ein System, das intern über 7 CAN-Bus-Systeme 
kommunizier. Sieben weil so zum einen mehr Datenrate zur Verfügung steht 
und zum anderen die Bussysteme nach Funktionsbereichen der einzelnen 
Busteilnehmer aufgeteilt werden können.
Die Adressierung ist festgelegt (Seriennummer des einzelnen 
Busteilnehmers als Identifier)

Was ich vermeiden will ist dass die Karten nachdem sie hergestellt 
worden sind noch manuell (per Lötbrücke oder Jumper) konfiguriert werden 
müssen. Das stellt einen zusätzlichen Prozessschritt dar und kostet, 
meiner Meinung nach, unnötig Geld.

von TManiac (Gast)


Lesenswert?

Hi Sven,

so richtig kapier ich noch nicht warum ihr Multiplexen wollte.
Du schreibst:

Sven H. schrieb:
> Sieben weil so zum einen mehr Datenrate zur Verfügung steht
> und zum anderen die Bussysteme nach Funktionsbereichen der einzelnen
> Busteilnehmer aufgeteilt werden können.

Die Datenrate wird doch durch das Mux nicht größer. Man bekommt nicht 
mehr Bits hintereinander auf die Leitung als wenn alle Teilnehmer 
gleichberechtigt am Bus teilnehmen. Die Datenrate wird sogar noch 
kleiner, weil du Zeit zum Umschalten benötigst.
Wie ich gerade schon schrieb, kann man die Funktionstrennung auch durch 
mehrere Busteilnehmer erhalten (dafür ist ja ein Bus da).

Das einzige Argument was ich verstehen kann ist, dass du die Anzahl der 
Transceiver reduzieren möchtest. Aber die werden wohl nur einen kleinen 
Teil der Gesamtkosten einnehmen.

Bitte erklär mal etwas genauer:
>Wir entwickeln zur Zeit ein System, das intern über 7 CAN-Bus-Systeme
>kommunizier.
So hab ich es bisher verstanden:
Es gibt in eurem Gerät eine unbekannte Anzahl an Baugruppen die in 
sieben Funktionsbereiche unterteilt werden. Jede Baugruppe eines 
Funktionsbereiches kommuniziert über einen eigenen CAN-Bus. Also hat 
doch jede Baugruppe ihren eigenen Controller und Transceiver.
Und umschalten/multiplexen willst du nun den Bus der aus eurer Hardware 
nach außen geht?

Wie wäre es mit einem Gateway? Weil eben nicht mehr Bits auf die Leitung 
passen. Ok ein Gateway-Controller mit acht Kanälen ist schwer zu finden, 
aber für sechs würde mir sofort einer einfallen. Aber zur Not würde es 
ein FPGA auch schaffen.

Gruß,
TManiac

von Sven H. (dsb_sven)


Lesenswert?

Wir haben mehrere Bussysteme, weil das System insgesamt mehr Rate 
benötigt. Die verschiedenen Teilnehmer werden also je nach Funktion auf 
den ein oder anderen Bus geschaltet. Da die Karten sich nur durch die 
Software unterscheiden müssen wir die Verbindung zum Gesamtsystem 
dynamisch umschalten können.

von TManiac (Gast)


Angehängte Dateien:

Lesenswert?

Noch einmal fragend. Deiner letzten Beschreibung entnehme ich das eurer 
System ähnlich meiner Skizze aussieht?

Das sind dann aber doch in meinem Beispiel drei (in eurem sieben) 
sperarate System. Es fließen ja keine Informationen von einem System in 
das Andere. Oder hast du daher von Anfang an immer zwei Umschaltern 
geredet weil jeder Teilnehmer auf zwei Busse aufgeschaltet werden soll.

Soll die Umkonfiguration auf die verschiedene Systeme auch im Betrieb 
ablaufen? Wenn nicht ließe sich doch das ganze wesentlich günstiger in 
der Verkabelung realisieren.

TManiac
(vor der Lösung eines Problems muss dieses erst einmal vollständig 
erkannt und verstanden werden)

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Sven H. schrieb:
> Wir haben mehrere Bussysteme, weil das System insgesamt mehr Rate
> benötigt. Die verschiedenen Teilnehmer werden also je nach Funktion auf

Und warum habt ihr euch dann für einen CAN-Bus entschieden? Kommt mir 
irgendwie so vor als soll jetzt mit einer Krücke ein Konzept gerettet 
werden das von Anfang an nicht zur Aufgabenstellung passte. CAN ist 
nicht gerade ideal für hohe Datenraten. Was spricht denn gegen Ethernet?

Matthias

von Harald (Gast)


Lesenswert?

Sven H. schrieb:
> Problem bei der Lösung mit den mehreren Tranceivern ist, dass ich dann
> statt zwei Tranceiver 14 Tranceiver benötigen würde.

Welche Multiplex-Lösung soll denn effektiv weniger Platz benötigen (pro 
Kanal) als ein SO-8 Gehäuse. Und welche Lösung soll preislich günstiger 
werden als 14 einzelne CAN-Transceiver?

Nebst Schutzbeschaltung wird jede Umschalterei mit MOSFETs oder was auch 
immer im Endeffekt teurer.

Sven H. schrieb:
> Wir haben mehrere Bussysteme, weil das System insgesamt mehr Rate
> benötigt.

Auch das mit der höheren Rate verstehe ich (auch) nicht.

von Frank K. (fchk)


Lesenswert?

Über welche Buslängen unterhalten wir uns denn gerade?

von Sven H. (dsb_sven)


Lesenswert?

Μαtthias W. schrieb:
> Sven H. schrieb:
>> Wir haben mehrere Bussysteme, weil das System insgesamt mehr Rate
>> benötigt. Die verschiedenen Teilnehmer werden also je nach Funktion auf
>
> Und warum habt ihr euch dann für einen CAN-Bus entschieden? Kommt mir
> irgendwie so vor als soll jetzt mit einer Krücke ein Konzept gerettet
> werden das von Anfang an nicht zur Aufgabenstellung passte. CAN ist
> nicht gerade ideal für hohe Datenraten. Was spricht denn gegen Ethernet?
>
> Matthias

Das Problem bei Verkabelung ist, dass ein weiterer Prozessschritt 
eingeführt werden muss. Das führt zwangsläufig zu weiteren Fehlern. Also 
will ich das vermeiden.

Gegen Ethernet spricht nur einer meiner Kollegen, der nicht zu 
überzeugen ist. Das war auch mein erster Ansatz.

Frank K. schrieb:
> Über welche Buslängen unterhalten wir uns denn gerade?

Die Teilnehmer kommunizieren innerhalb eines 19'' Gehäuses miteinander. 
Vielleicht kommt noch ein zweites Gehäuse oben drauf. Die Maximale 
Buslänge sollte somit zwei bis drei Meter von Tranceiver zu Tranceiver 
nicht überschreiten.


Und, natürlich wird die Rate durch das verwenden mehrerer paralleler 
Bussysteme insgesamt größer.

Ein Beispiel: Karte 1 kommuniziert mit Karte 2. Dabei werden Haufenweise 
AD-Werte übertragen. 250KS/s mit 16 Bit. Da wirds mit einem 1Mbit-Bus 
schon arg eng.
Jetzt muss aber Karte 1 noch unbedingt mit Karte 3 kommunizieren um 
irgendeinen digitalen Ausgang zu setzen. Dieser Befehl "passt" aber 
schlicht und einfach nicht mehr auf den ersten Bus und muss somit 
"ausgelagert" werden.

Unter anderem aber auch auf Grund der Tatsache, dass einige Karten schon 
entwickelt sind sind wir an den CAN-Bus (und zwar sieben, von denen 
einer auf alle Client-Karten geführt wird und die anderen je nach 
Funktion oder Auslastung verteilt werden) gebunden.

von STK500-Besitzer (Gast)


Lesenswert?

voll dämliches Konzept.
Hat sich niemand vorher darüber Gedanken gemacht?
Wie wäre es denn mit einer Art Switch-Karte, die dann die Datenleitungen 
zwischen den einzelnen Slave verbindet.

von (prx) A. K. (prx)


Lesenswert?

Klingt nach fast vollendeter Punkt zu Punkt Verkabelung, bei der jede 
Node grad versucht, eine Node anzusprechen, die z.Zt. nicht zuhören 
kann, weil sie grad auf einem anderen Kanal versucht, eine andere Node 
anzusprechen, die z.Zt. nicht zuhören kann, weil sie grad auf einem 
anderen Kanal ...

von Sven H. (dsb_sven)


Lesenswert?

Nunja. Mein Problem ist, ich muss damit leben und versuchen das beste 
drauß zu machen.

Es gibt halt Kollegen, die erstellen ein Konzept, schmeißen einem den 
Kram vor die Füße, ziehen sich zurück, wenns knifflig wird und verkaufen 
es dann am Ende, wenn alles funktioniert, als ihr eigenes tolles Konzept 
und realisiert haben die natürlich auch alles alleine.

von Sven H. (dsb_sven)


Lesenswert?

A. K. schrieb:
> Klingt nach fast vollendeter Punkt zu Punkt Verkabelung, bei der jede
> Node grad versucht, eine Node anzusprechen, die z.Zt. nicht zuhören
> kann, weil sie grad auf einem anderen Kanal versucht, eine andere Node
> anzusprechen, die z.Zt. nicht zuhören kann, weil sie grad auf einem
> anderen Kanal ...

Das wäre wohl so, wenn nicht zwei Punkte dagegen sprechen:

1. Ein Bus geht zu allen Teilnehmern. Über diesen kann eine 
Synchronisation stattfinden.
2. Es gibt eine "Master-Karte" von der aus sämtliche Kommunikation in 
die Wege geleitet wird.

von STK500-Besitzer (Gast)


Lesenswert?

Sven H. schrieb:
> Es gibt halt Kollegen, die erstellen ein Konzept, schmeißen einem den
> Kram vor die Füße, ziehen sich zurück, wenns knifflig wird und verkaufen
> es dann am Ende, wenn alles funktioniert, als Ihr eigenes tolles Konzept
> und realisiert haben die alles alleine.

Klassische Team-Arbeit... ;)

Sven H. schrieb:
> Unter anderem aber auch auf Grund der Tatsache, dass einige Karten schon
> entwickelt sind sind wir an den CAN-Bus (und zwar sieben, von denen
> einer auf alle Client-Karten geführt wird und die anderen je nach
> Funktion oder Auslastung verteilt werden) gebunden.

Eine Karte hat 7 CAN-Schnittstellen?
Wieviele Karten stecken den in dem ganzen System?
Ich würde auch zentrale Multiplex-Karten aufbauen, die eine gewisse 
Menge Eingänge wahlfrei auf eine gewissen Menge Ausgänge schalten kann. 
Eine Schaltmatrix...

von STK500-Besitzer (Gast)


Lesenswert?

Für solche Sachen könnte man vermutlich auch solche fertigen Systeme wie 
PXI verwenden.

von Der Bahnhof ist jetzt geöffnet (Gast)


Lesenswert?

> Ein Beispiel: Karte 1 kommuniziert mit Karte 2. Dabei werden Haufenweise
> AD-Werte übertragen. 250KS/s mit 16 Bit. Da wirds mit einem 1Mbit-Bus
> schon arg eng.
> Jetzt muss aber Karte 1 noch unbedingt mit Karte 3 kommunizieren um
> irgendeinen digitalen Ausgang zu setzen. Dieser Befehl "passt" aber
> schlicht und einfach nicht mehr auf den ersten Bus und muss somit
> "ausgelagert" werden.

Aha, und nach dem Umschalten kommuniziert Karte 1 mit Karte 3 und nicht 
mehr mit Karte 2 oder wie ? Deine Beschreibung des Systems ist für die 
Tonne !

von Volker Z. (vza)


Lesenswert?

Das Konzept ist ungeeignet.

FlexRay währe eine Option. http://de.wikipedia.org/wiki/FlexRay

Aber zurück zum Thema:
Nimm z.B den sn65hvd254 als Transceiver. Der hat einen Enable-Eingang.

http://focus.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=sn65hvd253&fileType=pdf

Du must nur noch die R-Pins verodern.

Also 7 Transceiver und ein 8-Fach-Oder-IC.

Billiger wirds nicht.

ciao Volker

von Volker Z. (vza)


Lesenswert?

Oder nimm ein Controller von Luminary
http://www.luminarymicro.com/products/product_selector_guide.html

Die haben bis zu 3 CAN-Controller onboard.

Nimm zwei Busse für das Daten schaufeln und einen für Verwaltungszwecke.

von Sven H. (dsb_sven)


Angehängte Dateien:

Lesenswert?

Ich versuch nochmal das System zu erklären.

Es laufen im 19'' Gehäuse 7 CAN-Bussysteme parallel.

Ein Teilnehmer (Master) ist fest mit allen Bussystemen verbunden.

Jeder Slave ist fest mit dem ersten CAN-Bus (schwarz) verbunden.

Jeder Slave soll mit der gleichen Software laufen. (!!!)

Je nach Funktion des Slaves (Spannungen messen, digitale Ausgänge 
schalten, Spannungen ausgeben...) soll er mit einem anderen 
CAN-Bussystem verbunden werden. Die Funktion des Slaves wird in einem 
EEPROM auf der Karte selber abgelegt. Die Software weiß also, was die 
Funktion der Karte ist.

--> Klare Trennung der Bussysteme nach Funktion.
--> Fehlersuche vereinfacht sich, da ich, wenn ich den Fehler bei der 
digitalen Ausgabe sehe, nicht auf sieben Systemen schnüffeln muss, 
sondern nur auf einem.

Ich hätte gerne nachträgliche Lötarbeit vermieden, da das, wie schon 
öfters gesagt, einen zusätzlichen Prozessschritt dar stellt. Bei ein, 
zwei Karten und bei Prototypen sicherlich kein Problem, allerdings 
sollen die Karten vom Lieferanten direkt ans Lager gehen und von dort 
aus in der Fertigung eingesetzt werden.

von Volker Z. (vza)


Lesenswert?

Geht es jetzt nur um die Slaves oder auch um den Master?
Was ist die maximale Anzahl der gleichzeitig betriebenen Busse an den 
Slaves?
Was ist die maximale Anzahl der gleichzeitig betriebenen Busse beim 
Master?
Wie viele CAN-Controller haben deine jetzigen µC on-board?

250KS/s mit 16 Bit = 4MBits/s. + Overhead >= 5 MBits/s.

Du must also min. 5 Busse gleichzeitig betreiben.

Das Konzept geht nie auf!!!

von (prx) A. K. (prx)


Lesenswert?

Sven H. schrieb:

> Ich hätte gerne nachträgliche Lötarbeit vermieden, da das, wie schon
> öfters gesagt, einen zusätzlichen Prozessschritt dar stellt. Bei ein,
> zwei Karten und bei Prototypen sicherlich kein Problem, allerdings
> sollen die Karten vom Lieferanten direkt ans Lager gehen und von dort
> aus in der Fertigung eingesetzt werden.

Anders ausgedrückt: Das Kommunikationssystem wird kurz mit 2 Karten 
getestet und anschliessend ohne Realtest sofort im Vollausbau produktiv 
beim Kunden eingesetzt? Na denn, viel Vergnügen. Hoffentlich nimmt 
niemand Schaden.

von Sven H. (dsb_sven)


Lesenswert?

Ich frage mich, warum ihr euch den Kopf über das Konzept zerbrecht, wenn 
die Frage doch recht eindeutig formuliert war. Das Konzept ist in Zement 
gegossen und steht hier nicht zur Diskussion. Es tut mir Leid, dass ich 
euch mit den Einzelheiten konfrontiert habe, was offensichtlich dazu 
geführt hat, dass die eigentliche Frage aus dem Blick geraten ist.

Also nochmal die Frage:

Wie schalte ich CAN-Busse um. Ohne Relais.


Offensichtlich gibt es zwei Lösungen:

1. Lass es sein.

2. Schalte die digitalen Signale vor den Tranceivern um. -> Erhöhte 
Tranceiveranzahl.

Ich denke, die Diskussion kann damit als beendet angesehen werden. 
Vielen Dank für die Hilfe.

von STK500-Besitzer (Gast)


Lesenswert?

>Offensichtlich gibt es zwei Lösungen:

>1. Lass es sein.

>2. Schalte die digitalen Signale vor den Tranceivern um. -> Erhöhte
>Tranceiveranzahl.

>Ich denke, die Diskussion kann damit als beendet angesehen werden.
>Vielen Dank für die Hilfe.

>Jeder Slave ist fest mit dem ersten CAN-Bus (schwarz) verbunden.
Wieviele Schnittstellen hat denn jeder Slave? 2? 3? 7?

von Klaus2 (Gast)


Lesenswert?

...ruf doch einfach mal bei irgendwem der distris oder 
transceiver-hersteller an? ich habe da auch so meine bedenken, aber wenn 
ihr nicht die ganz harten CAN specs erfüllen müsst, geht es ggf mit 
analog-schaltern (die im übrigen teilweise auch nur wenige ohm haben) 
und einem GEEIGNETEN layout.

ich hoffe vielmehr, dass ihr noch die zeit habt, das sauber 
testen/stressen zu können...sonst wars das mit der ersparnis :)

Klaus.

von Sven H. (dsb_sven)


Lesenswert?

STK500-Besitzer schrieb:
> Wieviele Schnittstellen hat denn jeder Slave? 2? 3? 7?

Jeder Slave hat 3 Schnittstellen von denen eine fest verbunden ist und 
die anderen eben, je nach Funktion anders verbunden wird.


Ich bin parallel mit dem Hardwareentwickler unseres Lieferanten in 
kontakt getreten und er sieht auch keine andere Möglichkeit als die 
beiden schon genannten.

Ich werde dann wohl doch Lötjumper verwenden, die aber vom Lieferanten 
löten lassen. Somit erübrigt sich die Fehlerquelle und der 
Prozessschritt bei uns im Haus.

von STK500-Besitzer (Gast)


Lesenswert?

>Jeder Slave hat 3 Schnittstellen von denen eine fest verbunden ist und
>die anderen eben, je nach Funktion anders verbunden wird.

Ihr habt vermutlich keine Möglichkeit, noch eine Art CAN-Routing MAtrix 
mit zu entwickeln bzw. einzubauen.
Da würde man dann die "freien" CAN-Anschlüsse draufführen und 
entsprechend der angeforderten Verbindung routen.
Das wäre vermutlich noch mal eine eigene 19"-Kiste ;)

von Volker Z. (vza)


Lesenswert?

STK500-Besitzer schrieb:
> CAN-Routing MAtrix

Ein Routing nützt Ihm nichts. Seine Busse sind voll ausgelastet. Du 
kannst nicht den Verkehr über einen Bus zum anderen routen.

Was noch helfen könnte, ist die Anlyse ob jeder CAN-Controller auf jeden 
BUS zugreiffen mus.

Dies könnte im besten Falle dazu führen das beide CAN-Controller jeweils 
nur auf drei Busse schaltbar sein müßten.

Diese Analyse würde auch die Anzahl der Lötjumper, und damit die 
Fehlerwahrscheinlichkeit reduzieren.

von Sven H. (dsb_sven)


Lesenswert?

Volker Zabe schrieb:
> Was noch helfen könnte, ist die Anlyse ob jeder CAN-Controller auf jeden
> BUS zugreiffen mus.

Das ist auf jeden Fall eine gute Idee. Ich werd das alles nochmal 
durchspielen.

Vielen Dank!

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.