Forum: Mikrocontroller und Digitale Elektronik CAN-Bus "Bus Selektor"


von Konfus'ius (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich hab da ein Problem, das ich erst einmal beschreibe.

Ich habe eine 5V µC mit genau einem CAN-Controller Kanal. Dieser soll 
auf einem Bus alle 500ms "Heartbeats" erhalten (Baudrate ist 250 oder 
500k). Bleiben drei Signale in Folge aus, soll auf einen anderen 
Ersatz-Bus umgeschaltet werden. Ich brauchen den zweiten Bus also nur im 
Notfall (wir hatten häufiger Kabelbrüche durch unachtsame "Benutzer" - 
das möchte ich aber nicht weiter ausführen!).

Leider muss das ganze wegen geringer Masse des Systems und starken 
Vibrationen ohne Relays auskommen. Die Idee war von daher, einfache 
UND-Gatter zu benutzen wie im Anhang gezeigt. Leider befürchte ich, das 
jedoch mindestens der CAN_RX mir Probleme breiten wird.

Ich bin mir nicht sicher, ob ich die eingezeichneten Dioden wirklich 
brauch, oder ob Ausgänge von UND-Gattern aufeinander treiben dürfen, 
wenn diese unterschiedliche Zustände annehmen.

Hat jemand so etwas schon mal gemacht? Würde das so gehen?

von Dr. Sommer (Gast)


Lesenswert?

Konfus'ius schrieb:
> oder ob Ausgänge von UND-Gattern aufeinander treiben dürfen,
> wenn diese unterschiedliche Zustände annehmen.
Und was soll die Ausgabe sein, wenn einer 0 und einer 1 ausgibt? 0,5? 
Die Dioden sind notwendig, und außerdem auch ein Pull-Down-Widerstand. 
Sauberer geht es mit einem schlichten OR-Gatter, oder 2 Transistoren. 
Schau auch ggf. mal nach (Digital-)Multiplexern.

Alternativ gibt es auch viele Controller mit 2 CAN-Bussen, wie z.B. 
viele von den STM32.

von Peter (Gast)


Lesenswert?

Konfus'ius schrieb:
> Ich bin mir nicht sicher, ob ich die eingezeichneten Dioden wirklich
> brauch, oder ob Ausgänge von UND-Gattern aufeinander treiben dürfen,
> wenn diese unterschiedliche Zustände annehmen.
Nein, sie dürfen nicht gegeneinander treiben. Das erzeugt einen Pegel im 
undefinierten Bereich, das heißt der Empfangsmikrocontroller kann eine 0 
oder 1 sehen.

Das mit den Dioden könnte passen. Du kannst die Rx-Signale aber auch 
über ein zweites AND oder OR zusammenführen. Ob AND oder OR hängt von 
der Polarität im CAN-Tranceiver ab.

von Konfus'ius (Gast)


Angehängte Dateien:

Lesenswert?

Peter schrieb:
> Du kannst die Rx-Signale aber auch
> über ein zweites AND oder OR zusammenführen. Ob AND oder OR hängt von
> der Polarität im CAN-Tranceiver ab.

Ah Stimmt, wenn ein "UND" Disabled ist, kommt ja eh nur das zweite 
durch...
Ich hab den Teil noch einmal neu gezeichnet ;)

von Sebastian E. (sbe_15)


Lesenswert?

Auf "Controller"-Seite ist der CAN Recessive Level "High". Um das Senden 
zu deaktivieren musst du den CAN Tx mit einem /Enable verodern. Ein UND, 
welches CAN Tx dauerhaft auf "Low" zieht, killt den Bus (wobei die 
meisten CAN-Transceiver den Sender bei Dominant-Pulsen nach einer 
gewissen Zeit abschalten).

Auf Rx-Seite sollte es so gehen:
CAN_Rx = (CAN_Rx1 OR /Enable1) AND (CAN_Rx2 OR /Enable2).

Denk daran, dass die Gatterlaufzeiten die maximal mögliche Buslänge 
reduzieren. Besser wäre wohl ein zweiter CAN-Controller, zur Not per 
SPI.

von pegel (Gast)


Lesenswert?


von Clemens L. (c_l)


Angehängte Dateien:

Lesenswert?

Die RX-Logik ist ein Demultiplexer; den gibt es fertig als 
(SN)74LVC1G97.

von H.Joachim S. (crazyhorse)


Lesenswert?


von Konfus'ius (Gast)


Lesenswert?

Clemens L. schrieb:
> Die RX-Logik ist ein Demultiplexer; den gibt es fertig als
> (SN)74LVC1G97.

Cool, eine super alternative zu meinem "Gattergrab"!

H.Joachim S. schrieb:
> Wie wärs mit PhotoMos-Relais direkt am Bus?
> 
https://www.panasonic-electric-works.com/cps/rde/xbcr/pew_eu_en/ds_x615_en_aqs225r2s.pdf

Auch Cool! Nur habe ich gerade gesehen, das der Verlinkte Chip gute 15€ 
@ 100Stück kostet... Doch schon recht teuer :-(

von Eric B. (beric)


Lesenswert?

Konfus'ius schrieb:
> Ich brauchen den zweiten Bus also nur im
> Notfall (wir hatten häufiger Kabelbrüche durch unachtsame "Benutzer" -
> das möchte ich aber nicht weiter ausführen!).

Und dieser 2. Bus liegt nicht direkt neben dem 1.?

von H.Joachim S. (crazyhorse)


Lesenswert?

War nur ein Beispiel alles in einem Chip zu haben.
Gibts in vielen Varianten, auch in billig. Z.T. auch als Umschalter bzw 
NC/NO-Kombi.
Musst halt sehen nach passenden Teilen suchen. RDSon sollte nicht so 
hoch sein.
Einkanalige gibts ab 40Ct, da brauchst du dann eben 4 Stk.

von Konfus'ius (Gast)


Lesenswert?

Eric B. schrieb:
> Und dieser 2. Bus liegt nicht direkt neben dem 1.?

Nein!

H.Joachim S. schrieb:
> War nur ein Beispiel alles in einem Chip zu haben.
> RDSon sollte nicht so hoch sein.

Wie sollte ich denn damit verfahren? Ich gehe davon aus, das ich damit 
die I/Os der zwei Transceiver-ICs auf den µC "umlenke". Oder soll ich 
damit gleich CAN_H/L der Busse auf einen Transceiver switchen?

von pegel (Gast)


Angehängte Dateien:

Lesenswert?

Der von mir vorgeschlagene Dual Transceiver ist keine Option?

von H.Joachim S. (crazyhorse)


Lesenswert?

Konfus'ius schrieb:
> Oder soll ich
> damit gleich CAN_H/L der Busse auf einen Transceiver switchen?

Genau das.
Es sei denn, deine Beschädiguungsorgien gehen soweit, dass auch der 
Transceiver mit zerstört wird :-)

von Steffen R. (steffen_rose)


Lesenswert?

Ich werfe mal die Nutzung mehrerer Transceiver in den Raum.

Der µC kann dann wahlweise das Enable-Pin des jeweiligen Tranceivers 
aktivieren. Vielleicht sogar automatisch, wenn die entsprechende Leitung 
zusammen mit dem CAN verlegt wird und genauso vom Kabelbruch betroffen 
ist...

Ich gehe mal davon aus, dass der CAN auf allen seiten gemeinsam 
umgeschaltet werden muss. Die Insellösung nur bei einem Prozessor dürfte 
nicht zielführend sein.

von Peter D. (peda)


Lesenswert?

Konfus'ius schrieb:
> Hat jemand so etwas schon mal gemacht? Würde das so gehen?

Nein, der nichtaktive TXD muß auf high bleiben.
Ein 74HC157 wäre geeignet, 1 MUX für RXD und 2 MUXe für die beiden TXD, 
der 4. MUX bleibt frei.

von Konfus'ius (Gast)


Lesenswert?

pegel schrieb:
> Der von mir vorgeschlagene Dual Transceiver ist keine Option?

Doch, prinzipiell schon! Doch bevorzuge ich Chips, die ich durch einen 
anderen auch ersetzten könnte. CAN-Transceiver gibt es von zig Firmen 
mit ziemlich einheitlichen Funktionen und Footprints - die kann man 
schnell austauschen.

Der Chip von dir ist sehr interessant, das ohne Zweifel! Aber ich kann 
kein Replacement dafür finden :-(

Selbst der von mir eingesetzte µC hat replacement Kompatible Ersatztypen 
die!

Zwischenzeitlich habe ich noch das 
http://www.ti.com/lit/ug/sllu172/sllu172.pdf gefunden, das kommt meiner 
Idee schon recht nahe!

Peter D. schrieb:
> Nein, der nichtaktive TXD muß auf high bleiben.
> Ein 74HC157 wäre geeignet, 1 MUX für RXD und 2 MUXe für die beiden TXD,
> der 4. MUX bleibt frei.

Ich habe mir gerade mal u.A. den TJA1051 angesehen. Wenn der EN-Pin Low 
gezogen wird, gehen die Ausgänge in Floating über, egal was an den 
Eingängen an liegt... Dann könnte ich einfach die TX Pins verbinden und 
die RX Pins per "Oder" Verknüpfen, oder?

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.