Forum: Mikrocontroller und Digitale Elektronik CAN-Repeater mit Arbitrierung hängt sich auf - falsche Gatter?


von Andy W. (gastandy)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

es gibt mal wieder ein echt interessantes Problem :-)

Habe die Schaltung im Anhang für einen CAN-Repeater nachgebaut, halt nur 
mit 2 statt 3 Abgängen (ist beliebig erweiterbar).
Sowohl die Simulation der Gatter in LTSPICE, als auch die Schaltung real 
funktioniert, ABER:

Es gibt scheinbar einen Zustand, wo der Repeater sich selbst "aufhängt" 
und den Bus dauerhaft lahmlegt,
was mich etwas ratos zurücklässt, da das unterschiediche Delay bei 
Übergang Rez.->Dom. und Dom.->Rez.
dies ja eigentlich verhindern sollte.

Mit dem Freq.-Generator + weiterem PC82C250 habe ich mal testweise 
unterschiedliche Pulse über den CAN eingespeist. Am Oszi sehe ich, daß 
der Repeater anfängt, ungewollt nachzutoggeln, wenn die (dominante) 
Pulsbreite ähnlich kurz oder kürzer als die Verzögerungszeit der 
OR-Gatter mit dem
RC-Glied ist. Schaltungstechnisch gesehen fehlt dann ab dieser 
Pulsbreite das erwähnte asymmetrische Delay, da durch die kurzen Pulse 
der Kondensator nicht so hoch aufgeladen werden kann,
damit der OR-Gatter-Ausgang länger high bleibt als der Puls selber.

Was meine ich mit ungewolltem Toggeln?

Beispiel:
Die Baudrate des CAN-Bus ist mit 38,4kBd eher gemütlich, die Sperrzeit, 
also die der Verzögerungsglieder ist (empfohlen ca. 10-20% der Bitzeit) 
mit ca. 3µs dimensioniert.

Über den CAN-Bus werden testweise 5 dominante Pulse mit 4µs Pulsbreite 
eingespeist, dazwischen jeweils 4ms rezessiv - alles funktioniert wie 
erwartet.
Mache man das Gleiche, nur mit ~3µs Pulsbreite und 3ms rezessiv, toggelt 
die Schaltung nach den 5 Pulsen noch weiter! Anfangs beim Einsetzen nur 
1-2 Mal, verkürze ich
die Pulsbreite weiter, bleibt das Toggeln immer länger bestehen. Als 
wenn das ganze Konstrukt eine Rückkopplungsschleife ergäbe...
Sowohl bei HCxxx als auch HCTxxx sehe ich das Verhalten.
Soweit die Messungen.

Real am Lowspeed-CAN-Haubus funktioniert der Repeater wie erwähnt, aber 
irgendwann, nach Stunden bleibt der halt hängen. Ich vermute, daß dann 
zuvor ein kurzer low-Spike mit t<Sperrzeit über den Bus
gekommen ist, Störungen, evtl. Arbitrierung, keine Ahnung aktuell, was 
das provoziert. :-(

Ich hatte irgendwo im Netz in einem Forum einen Post gefunden, wo man 
sich über obige Schaltung vs. dem isolated reference design von TI für 
einen CAN-repeater unterhält,
das auch als PDF im Netz häufig zu finden ist.
Der Typ von TI hielt beide Schaltungen in Bezug auf die Gatterlogik für 
sehr ähnlich, empfahl aber für obige Schaltung die Verwendung von 
OR-Gattern mit Schmitt-Trigger-Eingängen.

Was haltet Ihr davon? Könnte der falsche Gattertyp genau das 
beschriebene Verhalten verursachen? Frage mich nur, warum das nicht im 
originalen Schaltplan ist...

Bin wie immer dankbar für jeden sachdienlichen Beitrag!

MFG
Andy

von Harald A. (embedded)


Lesenswert?

Was mir dazu einfällt:
- HC vs HCT, alles so wie „Original“?
- Meiner Meinung nach steht die Dimensionierung mit den 
Verzögerungsgliedern auf wackeligen Füßen, da könnte schon eine andere 
Baureihe der Gatter den entscheidenden Unterschied geben. Wie Du schon 
sagst, ob das mit den Umladezeiten immer so hinkommt?
- Sollte man evtl das Gattergrab gegen eine SW in einer CPU tauschen? 
Die muss ja prinzipiell kein 3x CAN haben, das wäre ja reines 
Bitbanging. 32bit CPU 50MHz gibt es ja notfalls für <1€. Ich habe das 
aber nicht bis ins Letzte durchgespielt, ob das in Software so umsetzbar 
ist.

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Andy W. schrieb:
> Sowohl die Simulation der Gatter in LTSPICE, als auch die Schaltung real
> funktioniert, ABER:
> ...

Dann passt die Simulation nicht zur Schaltung/Anregung. Wenn das 
Konstrukt bei passender Anregung schwingt, würde ich das nicht als real 
funktionierend bezeichnen.

von Andy W. (gastandy)



Lesenswert?

Weil es ja viel Text war, dachte ich, ich lass Bilder sprechen :-)
Anbei 3 Oszibilder von 3 Pulsbreiten. Es reicht schon ein genügend 
kurzer Puls, um das Teil zum Schwingen zu bringen. Eingespeist wird 
natürlich von Bussseite her, nicht direkt an RX1.

Harald A. schrieb:
> - HC vs HCT, alles so wie „Original“?

Ich habe zwei PCBs, jeweils komplett mit HC/HCT bestückt. Neben den 
unterschiedlichen Zeitkonstanten wegen der unterschiedlichen 
Schaltschwellen ist das Verhalten prinzipiell gleich.

Rainer W. schrieb:
> Dann passt die Simulation nicht zur Schaltung/Anregung.

Die Gatterschaltung an sich zu simulieren, war kein Problem, das passt 
auch von den Zeitkonstanten. Nur sobald ich noch einen CAN-Transceiver 
(LTC2875) mit eingebunden hatte, hörte LTSPICE nicht mehr auf zu 
rechnen, weiß nicht warum - das wäre sicher gut für einen neuen Thread.

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


Lesenswert?

Andy W. schrieb:
> Habe die Schaltung im Anhang für einen CAN-Repeater nachgebaut, halt nur
> mit 2 statt 3 Abgängen
Hast du mal die Originalschaltung probiert und nur 2 der 3 "Abgänge" in 
Betrieb genommen?

> Könnte der falsche Gattertyp genau das beschriebene Verhalten
> verursachen?
Meine Erfahrung: solche rückgekoppelte Schaltungen kann alles mögliche 
ins Schwingen bringen. Und wenns mal läuft, dann solltest du unbedingt 
genau gar nichts dran ändern. Auf keinen Fall den Hersteller der ICs.

BTW und weil da kein einziger Kondensator im Schaltplan zu sehen ist:
die Versorgung an den 6 ICs hast du schon ordentlich geblockt?

: Bearbeitet durch Moderator
von Andy W. (gastandy)


Lesenswert?

Das sind Platinen mit zwei Abgängen, die ich sowohl einzeln als auch im 
Verbund (=4 CANs) getestet habe, ohne angeschlossene Busteilnehmer oder 
mit - macht keinen Unterschied. Termininierung natürlich immer vorhanden 
und jeder IC hat seinen 100n Keramikkondensator. :-)

von Rainer W. (rawi)


Lesenswert?

Andy W. schrieb:
> Nur sobald ich noch einen CAN-Transceiver (LTC2875) mit eingebunden
> hatte, hörte LTSPICE nicht mehr auf zu rechnen, weiß nicht warum

Ohne zu wissen, was du da genau simuliert hast, ist es schwer zu sagen, 
womit du LTSpice in die Verzweiflung treibst. Flanken zu steil?

> Weil es ja viel Text war, dachte ich, ich lass Bilder sprechen :-)

Erstmal sagen sie, dass du anscheinend weder eine Screenshot Funktion zu 
nutzen weißt, noch eine Möglichkeit besitzt, halbwegs parallaxenfrei zu 
photographieren?
scnr

Wer erzeugt die Spikes auf Kanal TX1 und TX2 in Puls_3_3? Allein Ein- 
und Ausgang zu betrachten, wird nicht reichen, um zu verstehen, was die 
Rückkopplung erzeugt.

: Bearbeitet durch User
von Andy W. (gastandy)


Angehängte Dateien:

Lesenswert?

So, habe jetzt die 4 Kapazitäten an den RC-Gliedern mal testweise Faktor 
10 nach oben gesetzt. Das Verhalten ist gleich, d.h. die Schaltung 
schwingt nach Ende des Pulses, nur dann halt schon startend bei größerer 
Pulsbreite.
Dann im Gegenzug wieder die Kapazitäten auf die 100pF laut Plan 
verkleinert und voilá, da sehe ich nur noch bei ganz kurzen Pulsen <1µs 
ein paar Artefakte, eine Schwingung stellt sich aber nicht mehr ein, 
d.h. der Plan ist prinzipiell korrekt. Mit 68pF ist es dann perfekt.

Fazit:
Meine eigenmächtige Vergrößerung der Zeitkonstanten um die 10% der 
Bitbreite für die Sperrzeit @38,4kBd einzustellen, hat die Schaltung 
durch die Neigung zum Oszillieren unbrauchbar gemacht.

Ich werde jetzt erstmal damit fahren.
Was das jetzt für die angesprochenen Sperrzeiten bedeutet, vermag ich 
nicht zu sagen, d.h. ob das überhaupt relevant ist, wenn ich die für 
höhere Baudraten ~500kBd "optimierte" Schaltung für niedrigere 
Busgeschwindigkeiten einsetze - ich denke eher nicht.

Rainer W. schrieb:
> Ohne zu wissen, was du da genau simuliert hast, ist es schwer zu sagen,
> womit du LTSpice in die Verzweiflung treibst. Flanken zu steil?

Habe es mal angehängt. Einfach die kommentierte Verbindung zwischen 
RX2/TX2  durch den Transceiver ersetzen der busseitig mit 120R 
abgeschlossen ist + 33k am Rs-Pin gegen GND.

Rainer W. schrieb:
> Erstmal sagen sie, dass du anscheinend weder eine Screenshot Funktion zu
> nutzen weißt, noch eine Möglichkeit besitzt, halbwegs parallaxenfrei zu
> photographieren?

Sorry für die Plots 1) kein USB-Stick zur Hand 2) wollte kein direktes 
Spiegelbild, alle wichtigen Infos entnehmbar und extra noch nachträglich 
beschriftet :-)

MFG
Andy

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


Lesenswert?

Andy W. schrieb:
> So, habe jetzt die 4 Kapazitäten an den RC-Gliedern mal testweise
Ich würde die mal testweise asymmetrisch auslegen. Und nur jeweils 
entweder die geradzahligen bzw. die ungeradzahligen Kondensatoren um den 
Faktor 10 größer machen...

: Bearbeitet durch Moderator
von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Angehängte Dateien:

Lesenswert?

Für CAN Repeater gab es mal den AMIS42770. Wenn man 2 von denen 
eingesetzt hat konnte man sogar eine galvanische Trennung dazwischen 
haben.

Leider gibt es den nicht mehr, vielleicht gibt es davon nun einen 
Nachfolger.

Wegen der Schaltung:
Ich würde bei einem Repeater zugleich noch eine galvanische Trennung 
vorsehen, z.B. mit dem ISO1050

Ich denke mal diese Gatter mit Verzögerungsglieder gehe nicht richtig. 
Ich kann mir eher vorstellen, dass die Logik in etwa so aussehen sollte:
Der Kanal der zu erst das Dominate Bit sendet, setzt ein Flipflop, dann 
muss auch dieser Kanal das Dominante Bit wieder weg nehmen und der 
andere Kanal ist in der Zeit nur Dominat gesetzt (TX) und das Flipflop 
von dem anderen Kanal wird gesperrt bis das erste Flipflop wieder frei 
ist. Bei dem Kanal mit dem gesetzten FlipFlop darf Tx nicht gesetzt 
sein, damit die Gegenstelle das dominate Bit wieder weg nehmen kann.

Wenn man das mit Flipflops aufbaut, ohne Verzögerungen, dann sollte das 
auch mit FD-CAN (5MHz) gehen. Isoliert wäre es dann z.B. ISO1044B

(Es ist jetzt nur so gedacht wie es logisch funktionieren könnte)

Gerade gefunden, von TI gibt es ein Reference Design, incl. Schaltplan:
https://www.ti.com/tool/TIDA-01487

: Bearbeitet durch User
von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Angehängte Dateien:

Lesenswert?

Probiere mal diese 2 Dioden je Kanal ein zu bauen, dann sollte es besser 
gehen.
Bei der Schaltung von TI wurden ein Buffer-Treiber "OC" verwendet (und 
deren Logik beim RC-Glied funktioniert anders herum) und nach dem RC 
Glied ein Schmitt-Trigger. Wenn es mit der Diode immer noch nicht 
korrekt geht müsste man das wohl so ähnlich umbauen.

Wegen den C's, ich denke die kann man auch verkleinern, müsste man 
ausrechnen wie viel ns Verzug diese generieren und wie schnell die 
Gatter sind.

Edit: Noch was gefunden, sieht recht simpel aus:
https://os.mbed.com/users/hudakz/notebook/can-bus-repeater/

: Bearbeitet durch User
von Andy W. (gastandy)


Lesenswert?

Hallo zusammen,

nur als kurze Rückmeldung, da hier noch zwei gute Ansätze vorgeschlagen 
wurden:

Lothar M. schrieb:
> Ich würde die mal testweise asymmetrisch auslegen.

Das bringt schon viel, ich sehe hier nur noch einen einzigen Einbruch 
(<1µs) auf TX1, der so nicht auftreten sollte, ansonsten ist alles 
sauber!

Markus M. schrieb:
> Probiere mal diese 2 Dioden je Kanal ein zu bauen, dann sollte es besser
> gehen.

Mit den Dioden ist das Signal wirklich komplett ohne Störungen, konnte 
hier auch mit den Kapazitäten wieder etwas nach oben gehen, um die 
Sperrzeit zu erreichen. Würde daher aktuell diese Lösung favorisieren.

Danke nochmals für Euren Input!

MFG
Andy

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.