Forum: Mikrocontroller und Digitale Elektronik Funktionsweise CAN <-> LWL <-> CAN


von Martin (m-ge)


Lesenswert?

Hi,

es gibt von Peak System ein Gerät PCAN-LWL (Ankopplung für optische 
Übertragung von CAN- und CAN-FD-Daten). Mit dem kann man eine 
CAN-Verbindung über LWL betreiben: 
https://www.peak-system.com/PCAN-LWL.214.0.html .

Man schaltet 2 dieser Teile in eine bestehende CAN-Verbindung mit LWL 
dazwischen.

Wie funktioniert so eine Umsetzung technisch? Die Kommunikation geht ja 
in beide Richtungen, das ist dadurch nicht trivial. Ist das mit einem 
Mikrocontroller gelöst oder geht das auch ohne?
von Helmut -. (dc3yc)


Lesenswert?

Beim analogen Telefon nennt man das Gabelschaltung. Für digitale Signale 
kann man das auch nachbauen ohne Prozessor. Ist halt etwas Logik 
dahinter, aber geht schon. Das ist ähnlich einem CAN-Repeater oder einem 
optischen Isolator mit Optokopplern. Genaue Beschreibungen finden sich 
bei diversen Herstellern und im Wikipedia.
von Martin (m-ge)


Lesenswert?

Helmut -. schrieb:
> Genaue Beschreibungen finden sich
> bei diversen Herstellern und im Wikipedia.

Könntest Du mir einen Tipp geben, mit welchen Begriffen ich genau suchen 
muss? Bisher bin ich selbst nicht weiter gekommen.
Bzw. einen konkreten Link zu entsprechenden Infos nennen? Ein Schaltplan 
einer solchen Schaltung wäre super.
von Gerd E. (robberknight)


Lesenswert?

Helmut -. schrieb:
> Beim analogen Telefon nennt man das Gabelschaltung. Für digitale Signale
> kann man das auch nachbauen ohne Prozessor. Ist halt etwas Logik
> dahinter, aber geht schon.

Naja, ganz so einfach ist das nicht. Der schwierige Teil ist das enge 
Timing. Denn bei CAN musst Du die CRC prüfen und hast dann nur wenige 
Takte Zeit zu entscheiden ob Du ACK sendest oder nicht. Und ein 
gesendetes ACK muss dann im richtigen Moment auf dem Rest des gesamten 
Busses ankommen.

Weil das bei höheren Datenraten auch schon mit normalem, direkt 
verbundenem, CAN-FD schwer wird, haben die dieses ACK-Konzept beim 
Nachfolger CAN-XL rausgeworfen.
von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

CAN funktioniert mit einen dominanten ('0) und einen rezessiven('1') 
Signal und der Erkennung der Kanalbelegung wenn bei der Arbitrierung ein 
dominates Signal erkannt wird obwohl man selbst nur rezessiv "sendet". 
Das geht auch mit Licht, 'Licht an' ist dominant, Licht aus rezessive. 
Man darf aber nur mit solchen Baudraten senden, das die Erkennung noch 
innerhalb  des Taktes erfolgen kann.
von Dieter S. (ds1)


Lesenswert?

Wenn man in das PCAN-LWL Benutzerhandbuch schaut bekommt man einige 
Hinweise zur Funktion, z.B. gibt es jeweils zwei CAN Transceiver 
(Low-/High-Speed, maximal 500 kBit/s bei High-Speed) von denen man einen 
auswählen muss und die Verbindung zwischen den beiden Modulen erfolgt 
durch zwei Lichtwellenleiter.
von Thomas F. (igel)


Lesenswert?

Martin schrieb:
> Wie funktioniert so eine Umsetzung technisch? Die Kommunikation geht ja
> in beide Richtungen, das ist dadurch nicht trivial.

Man muss nur die Bedienungsanleitung lesen:

https://www.peak-system.com/produktcd/Pdf/Deutsch/PCAN-LWL_UserMan_deu.pdf

Auf Seite 7 steht dann:
1
Ein PCAN-LWL-Modul hat zwei standardisierte ST-Steckverbinder für die
2
Lichtwellenleiter. Die Anschlüsse sind gesondert für das Senden und Empfangen von Lichtsignalen zuständig.
3
Die beiden Lichtwellenleiter der Duplexleitung sind an den Anschlüssen farblich gekennzeichnet (rot/schwarz). Verbinden Sie jeweils den LWL-Ausgang eines Moduls mit dem LWL-Eingang des anderen.

Also zwei Leitungen, eine für jede Richtung.
von Martin (m-ge)


Lesenswert?

Thomas F. schrieb:
> Also zwei Leitungen, eine für jede Richtung.

Schon klar, dass man 2 Leitungen benötigt.

Aber wenn ich am Gerät 1 eine "0" sende, geht der CAN-Bus an Gerät 1 auf 
dominanten Pegel. Zeitverzögert auch auf CAN-Bus an Gerät 2. Das Ganze 
wird über den LWL Rückkanal zu CAN-Bus an Gerät 1 zeitverzögert 
zurückgegeben. Und dann hat man dauerhaft dominanten Pegel auf den 
CAN-Bussen (Selbsthaltung). Das Gerät 1 kann die "0" wegnehmen, aber der 
Pegel bleibt durch die "0" den Rückkanal erhalten. Zumindest so lange, 
bis der CAN-Transceiver seinen Timeout hat und den dominanten Pegel vom 
Bus trennt. Kann somit nicht funktionieren.
: Bearbeitet durch User
von Dieter S. (ds1)


Lesenswert?

Für die Bus Arbitrierung findet man einige Beispiele, z.B. das hier ("TI 
Designs: TIDA-01487 - Isolated CAN FD Repeater Reference Design" unter 
"2.4.3 CAN Bus Arbitration Logic"):

https://www.ti.com/lit/pdf/tidudb5
von Harald A. (embedded)


Lesenswert?

Hier in diesem Artikel wurde das aufgebaut, leider ohne nähere 
Beschreibung der Hardware.
https://www.spiedigitallibrary.org/conference-proceedings-of-spie/13699/136995G/CAN-bus-communication-over-optical-wireless/10.1117/12.3075349.full

Dort wird auch beschrieben, dass das ACK durch die Kette eine 
Herausforderung bleibt. Und dann gibt es noch das Problem mit dem 
dominanten Pegel, so wie in anderen Repeater-Konzepten auch.

Man könnte all diesen Probleme aus dem Weg gehen, in dem man auf beiden 
Seiten einen ganz normalen CAN-Knoten aufbaut und die Information via 
RX/TX (z.B. LAWICEL) seriell austauscht. Ja, ich weiß, ist in vielen 
Aspekten nicht das identische Verhalten (Remoteframes werden schwierig - 
wenn man es denn unbedingt braucht), wird aber für viele Anwendungen 
trotzdem reichen.
von Helmut -. (dc3yc)


Lesenswert?

Martin schrieb:
> Könntest Du mir einen Tipp geben, mit welchen Begriffen ich genau suchen
> muss? Bisher bin ich selbst nicht weiter gekommen.

Mit "CAN repeater" hatte ich schon ein Stichwort gegeben. Hier ist mal 
ein konkreter Link: 
https://www.ems-wuensche.com/can-technology/can-repeater-inhibit-time/
Diese Inhibit time ist wichtig, damit man keinen dominanten Loop 
bekommt. Soo schwierig ist das nicht. Ich habe selber in den 90er 
Jahren, als wir mit der CAN-Steuerung unserer Geräte anfingen, so ein 
Ding designed. War ein kleines EPLD mit zwei Optokopplern und zwei 
CAN-Transceivern. Für LWL-Anschluss braucht man halt die optischen 
Interfaces und die Logik dazwischen.
Viele Specs über CAN findest du bei der CiA 
(https://www.can-cia.org/news). Wir waren damals Gründungsmitglied und 
hatten viel mit Holger Zeltwanger zu tun.
von Dieter S. (ds1)


Lesenswert?

Helmut -. schrieb:
>
> Viele Specs über CAN findest du bei der CiA
> (https://www.can-cia.org/news). Wir waren damals Gründungsmitglied und
> hatten viel mit Holger Zeltwanger zu tun.

Und Holger Zeltwanger verweist hier

https://www.can-cia.org/fileadmin/cia/documents/publications/cnlm/march_2019/19-1_p26_galvanic_isolated_canfd_repeater_reference_design_holger_zeltwanger_cia.pdf

auf das oben bereits verlinkte Design von TI.
von Helmut -. (dc3yc)


Lesenswert?

Dieter S. schrieb:
> Helmut -. schrieb:
>>
>> Viele Specs über CAN findest du bei der CiA
>> (https://www.can-cia.org/news). Wir waren damals Gründungsmitglied und
>> hatten viel mit Holger Zeltwanger zu tun.
>
> Und Holger Zeltwanger verweist hier
>
> 
https://www.can-cia.org/fileadmin/cia/documents/publications/cnlm/march_2019/19-1_p26_galvanic_isolated_canfd_repeater_reference_design_holger_zeltwanger_cia.pdf
>
> auf das oben bereits verlinkte Design von TI.

Früher hatten wir gelernt, sich die Infos selber zu suchen. Dieses 
Vorgehen ist anscheinend heutzutage verloren gegangen, wenn man bei 
Eingabe von "CAN" und "Repeater" nichts passendes findet. CiA war halt 
damals ausser Steinbeis in Ravensburg der Nabel der (deutschen) 
CAN-Welt.
von Rainer W. (rawi)


Lesenswert?

Martin schrieb:
> Schon klar, dass man 2 Leitungen benötigt.

So klar ist das überhaupt nicht. Du kannst eine Faser genauso im 
Duplexbetrieb nutzen, z.B. verschiedene Wellenlängen für die beiden 
Richtungen. Es ist eine wirtschaftliche Abwägung, ob eine zweite Faser 
oder der zusätzliche Aufwand für bedirektionalen Betrieb günstiger ist.
von Martin (m-ge)


Lesenswert?

Dieter S. schrieb:
> Für die Bus Arbitrierung findet man einige Beispiele, z.B. das hier ("TI
> Designs: TIDA-01487 - Isolated CAN FD Repeater Reference Design" unter
> "2.4.3 CAN Bus Arbitration Logic"):
>
> https://www.ti.com/lit/pdf/tidudb5


Vielen Dank für den Link! Das ist genau das, was ich gesucht habe.
von Martin (m-ge)


Lesenswert?

Helmut -. schrieb:

> Früher hatten wir gelernt, sich die Infos selber zu suchen. Dieses
> Vorgehen ist anscheinend heutzutage verloren gegangen, wenn man bei
> Eingabe von "CAN" und "Repeater" nichts passendes findet.

Ich habe schon gesucht, aber nicht die Kombination CAN + Repeater, 
sondern z.B. CAN + LWL bzw. CAN + Fiber. Und da bekommt man keine 
vernünftigen Treffer. Die Kunst ist, die passenden Suchbegriffe zu 
kennen. Auf die Idee "Repeater" zu verwenden, wäre ich nie gekommen.
von Matthias S. (dachs)


Lesenswert?

Martin schrieb:
> Ich habe schon gesucht, aber nicht

Auf jeden Fall hast Du nicht einmal das Bild auf der von Dir verlinkten 
Seite angesehen, das zeigt ganz deutlich zwei optische Stecker an jeder 
Einheit (1xrot 1xschwarz)
von Martin (m-ge)



Lesenswert?

Hi,

ich habe nun eine Platine gemacht, die die Arbitrierungslogik 
beinhaltet. Wenn jeweils nur eine LWL-Leitung gesteckt ist, ist die 
Datenübertragung in beide Richtungen OK. Wenn man beide LWL-Leitungen 
gemeinsam gesteckt hat und noch nichts sendet, ist noch alles OK. Aber 
wenn ein Signal von einem CAN-Teilnehmer kommt, schwingt das System 
dauerhaft, auch wenn man den CAN-Teilnehmer trennt (es ist aktuell nur 
auf einer Seite einer dran). Oszibild des Schwingkreises anbei. Da gibt 
es irgendwo einen Kopplungszweig, der das Schwingen verursacht. Der 
CAN-Bus ist jeweils mit 120R abgeschlossen.

Die Übertragungsstrecke ist wie folgt:

CAN Transceiver 1 - Arbitrierungslogik - LWL Transceiver - 20 m LWL 
(separat für TxD und RxD) - LWL Transceiver - CAN Transceiver 2

TI hat in seinem Dokument separate ICs für die Arbitrierungslogik 
verwendet, ich habe die selben Gattertypen zu einem IC zusammengefasst. 
Könnte dadurch die unerwünschte Kopplung entstanden sein? Oder ist die 
Leitungsführung im Layout ungünstig, so dass die Rückkopplung entsteht?
von Martin (m-ge)


Angehängte Dateien:

Lesenswert?

Mir ist gerade was aufgefallen: TI hat in der Delay-Line im "realen" 
Schaltplan noch weitere Komponenten eingefügt, um die Verzögerungszeit 
zu erreichen. Dumm gelaufen, dass ich mir die Delaytime des 74HC04 nicht 
im Datenblatt angeschaut habe.

Aber ob das zu der Schwingung führt?
: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Martin schrieb:
> Da gibt es irgendwo einen Kopplungszweig, der das Schwingen verursacht.

Das ist gewöhnlich so, ohne Kopplung würdest du nie eine Schwingung 
bekommen. Damit eine Kopplung zu einer Schwingung führt, muss immer auch 
die Phasenlage/Zeitpunkt stimmen. Querverbindungen zwischen den Zweigen 
gibt es ja.

Anhand eines Oszibildes des resultierenden Signals siehst du zwar die 
Schwingung, erkennst aber nicht, wo du eine Zeitbedingung verletzt. 
Dafür musst du tiefer rein gucken und mit den Worst-Case Daten für 
Flankentiming aus den Datenblättern vergleichen. Sonst kann es dir 
passieren, dass das System bei Temperaturerhöhung um 5°C wieder 
schwingt.
: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Thomas F. schrieb:
> Also zwei Leitungen, eine für jede Richtung.

Das wäre nicht nötig, man kann natürlich LWL auch bidirektional nutzen, 
indem man auf unterschiedlichen Wellenlängen sendet. So machts auch der 
Glasfaseranschluss, über den manche ihr Internet bekommen.
von Martin (m-ge)


Lesenswert?

Harald K. schrieb:
> Thomas F. schrieb:
>> Also zwei Leitungen, eine für jede Richtung.
>
> Das wäre nicht nötig, man kann natürlich LWL auch bidirektional nutzen,
> indem man auf unterschiedlichen Wellenlängen sendet. So machts auch der
> Glasfaseranschluss, über den manche ihr Internet bekommen.

Ja, prinzipiell schon, aber die Hardware ist nun für 2 LWL ausgelegt und 
wird diesbezüglich nicht geändert.
von Harald A. (embedded)


Lesenswert?

Martin schrieb:
> noch weitere Komponenten eingefügt

So ganz ist das aus deinem Post nicht ersichtlich, sind die RC-Glieder 
in deiner aktuellen Schaltung nicht drin?
von Martin (m-ge)


Angehängte Dateien:

Lesenswert?

Harald A. schrieb:
> Martin schrieb:
>> noch weitere Komponenten eingefügt
>
> So ganz ist das aus deinem Post nicht ersichtlich, sind die RC-Glieder
> in deiner aktuellen Schaltung nicht drin?

Nein die sind nicht drin!
Anbei nochmal die 2 Schaltpläne von TI. Ich habe die zweite Version 
leider erst heute entdeckt.
von Harald A. (embedded)


Lesenswert?

Die Zeitglieder sind entscheidend wichtig, aber das ist Dir ja auch 
selber klar geworden. Nachrüsten in der Form schwierig.
: Bearbeitet durch User
von Martin (m-ge)


Lesenswert?

Harald A. schrieb:
> Die Zeitglieder sind entscheidend wichtig, aber das ist Dir ja auch
> selber klar geworden. Nachrüsten in der Form schwierig.

Wird man schon irgendwie reinflicken können. Gibt halt ein etwas 
Bastelarbeit.

Ob die fehlende Verzögerung die Ursache für das Schwingen ist? Die Logik 
setzt ja nur den Pegel auf High, wenn von beiden Seiten gesendet wird.
von Helmut -. (dc3yc)


Lesenswert?

Laut meiner Erfahrung mit > 10 Jahren CAN und Repeatern ist die 
Delayline ZWINGEND nötig! Und auch sollte man Tests machen, wie das 
Temperaturverhalten der Bauteile ist. Wir hatten das früher mit einem 
FPGA gelöst, bei dem man die Delayzeit programmieren konnte. So musste 
die Leiterplatte nicht geändert werden.
von Martin (m-ge)


Lesenswert?

Helmut -. schrieb:
> Laut meiner Erfahrung mit > 10 Jahren CAN und Repeatern ist die
> Delayline ZWINGEND nötig! Und auch sollte man Tests machen, wie das
> Temperaturverhalten der Bauteile ist. Wir hatten das früher mit einem
> FPGA gelöst, bei dem man die Delayzeit programmieren konnte. So musste
> die Leiterplatte nicht geändert werden.

Dass man die Delayzeit benötigt ist mir klar. Aber kann es durch die zu 
kleine Zeit (weil ohne RC-Glied) zu dem Schwingen kommen? Ich vermute es 
gibt im System noch ein zweites Problem, dass das Schwingen verursacht.
von Rainer W. (rawi)


Lesenswert?

Harald K. schrieb:
> Das wäre nicht nötig, man kann natürlich LWL auch bidirektional nutzen,
> indem man auf unterschiedlichen Wellenlängen sendet.

Das ändert nur etwas auf unterstem Level des physical Layers im ISO 
Modell. Für die Signale bleiben das dabei weiterhin zwei unabhängige 
Strecken (WL-Multiplex).
von Rainer W. (rawi)


Lesenswert?

Martin schrieb:
> Dass man die Delayzeit benötigt ist mir klar. Aber kann es durch die zu
> kleine Zeit (weil ohne RC-Glied) zu dem Schwingen kommen?

Natürlich. Wenn Zeitspezifikationen der Reihenfolge der Signale verletzt 
werden, hängt es nur von der Schaltung ab, wie sich das nach außen 
bemerkbar macht.
von Harald A. (embedded)


Lesenswert?

Ich weiß, per FPGA oder diskreter Logik ist das alles viel toller aber 
man könnte mal schauen, ob man das nicht mit einem ATTINY1616 
hinbekommt. Der hat min. 2 Blöcke „programmable custom logic“, dazu 
viele Timer und sonstigen Kram. Programmierung über einen Pin, Spannung 
2..5V, keine Außenbeschaltung. Also nicht als CAN-Komponente sondern auf 
reiner Bitebene das nachbilden, was diese Schaltung macht. Nur eben 
etwas abgesicherter. Bei 20MHz Takt dürfte das schnell genug sein für 
CAN.
Hauptvorteile wären der sehr geringe Bauteileaufwand, Platz und die 
leichte Anpassbarkeit.
von Rainer W. (rawi)


Lesenswert?

Harald A. schrieb:
> Ich weiß, per FPGA oder diskreter Logik ist das alles viel toller aber
> man könnte mal schauen, ob man das nicht mit einem ATTINY1616
> hinbekommt.

Früher (TM) hat man die Flankenlage über Gatterlaufzeit oder einen 
kleinen Kondensator passend hingeschoben und sich vorher Gedanken 
gemacht, welche Zeit genau verletzt wird.
Auch bei „programmable custom logic“ wird man nicht umhin kommen, sich 
genauer mit dem Timing zu beschäftigen.
von Harald A. (embedded)


Lesenswert?

Mache gerne wie früher, ich habe nichts dagegen. Früher(TM) habe ich 
auch gemacht wie früher. Alles kann, nichts muss.
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.