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?
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.
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.
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 ;)
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.
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.?
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.
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?
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 :-)
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.
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.
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?