Wie kann ich die Kapazität eines elektrische Leiters reduzieren?

CatsEyes  22.03.2022, 20:41

Brauchst Du unbedingt alle 40 Adern?

mikroFahrrad 
Fragesteller
 22.03.2022, 20:45

hab über dieses Kabel auch noch andere Signale, deshalb dieses Kabel

7 Antworten

Nimm doch einfach mehrere LAN-Kabel, die sind zumindest störunanfälliger als ein 40-adriges Kabel und eher geeignet, Störungen zu vermeiden.

Kapazität: Da gibt es zwei Arten in dem Falle, die parallel nebeneinander liegenden Adern haben zueinander eine Kapazität, das kann Signalübersprechen von einer zu anderen Adern bewirken. Die andere Kapazität ergibt sich nach "außen", aber die dürfte geringer sein, solange das Kabel nicht dicht an andere Kabel bzw. metallischen Flächen oder so verlegt ist.

Mit Widerständen von Ader zu Masse kann man nicht die Kapazität verringern, aber das gegenseitige Übersprechen wird geringer.

Ansonsten hat PeterKremsner schon viel geschrieben dazu.

Die Widerstände verschlechtern das ganze nur und helfen nicht.

Das Problem was du bei I2C bekommst ist die Flankensteilheit und diese hängt von wesentlich von den Pullupwiderständen und dem Leitungswiderstand ab.

Je nachdem welche Pullups oben sind gelten andere Grenzwerte, die 400pF gelten nur wenn da die richtigen Pullups verbaut sind.

Du kannst die Buskapazität eigentlich nur verringern indem du die Leitungen möglichst weit Weg von Leitfähigen Materialien verlegst und die Leitungen untereinander aufspaltest, sodass eben alle Kapazitäten kleiner sind. Beides sind aber keine wirklich anwendbaren Methoden.

Das einzige was hier verlässlich funktioniert sind sogenannte Aktive Pullups zB dieser IC

https://docs.rs-online.com/0412/0900766b814b7eab.pdf

Ansonsten gibt es auch noch sogenannte I2C Busextender bzw Repeater die in die Mitte der Leitung geschalten werden können. Allerdings habe ich mit diesen schon mal Probleme gehabt, wenn zB Slaves Clock Stretching machen.

https://eckstein-shop.de/AdafruitLTC4311I2CExtender2FActiveTerminator-STEMMAQT2FQwiic?gclid=EAIaIQobChMI2Y6SsL7a9gIVvo9oCR3G6gcfEAQYASABEgLR7PD_BwE

Weiters sei aber angemerkt, dass der I2C Bus nie für solche Anwendungen gemacht war, also der Bus war dafür gedacht, dass du auf der selben Platine oder zumindest im selben Gerät etwas verschaltest aber nicht über ein 8m Langes Kabel. Das richtige wäre hier eigentlich der Einsatz eines Feldbusses wie zB CAN. SPI würde hier aufgrund der Push Pull Architektur auch noch besser funktionieren.

mikroFahrrad 
Fragesteller
 22.03.2022, 21:05

Habe mit i2c extendern das Problem gehabt, dass die i2c verbindung teilweise abgebrochen ist. also dass 100 zyklen die übertragung gut ging und dann plötzlich kein gerät mehr erkannt wird. könnte das ebenfalls mit clock stretching zusammenhängen? habe dazumals den P82B715 verwendet. Werde es mit einem aktiven pullup austesten. dank

0
PeterKremsner  22.03.2022, 21:44
@mikroFahrrad

Kann damit zusammenhängen ja.

Ich kenne aber diesen Extender nicht, aber mir ist auch aufgefallen, dass der I2C Treiber am Pi auch manchmal nicht all zu stabil ist, besonders wenn am Bus was nicht so läuft wie es soll kann es sein, dass sich hier die Softwareseite aufhängt.

1
CatsEyes  23.03.2022, 09:39

<< Die Widerstände verschlechtern das ganze nur und helfen nicht. >>
Das würde ich so nicht meinen: Niederohmigkeit kann kapazitive und induktive Einflüsse reduzieren.

0
PeterKremsner  23.03.2022, 09:45
@CatsEyes

Auch wenn du kleine Widerstände rein hängst vergrößerst du damit nur den Gesamtwiderstand der Leitung.

Die Leitung bildet, bezogen auf das Design des I2C Buses im wesentlichen einen RC Tiefpass, gebildet aus den Pullups dem Leitungswiderstand und der Leitungskapazität.

Ein größerer Leitungswiderstand führt jetzt dazu, dass die Flankensteilheit am anderen Ende der Leitung abnimmt und das ist das Problem und der Grund warum hier 400pF genannt werden. Wenn die Flankensteilheit zu gering wird kann nämlich der zweite Busteilnehmer die Kommunikation nicht mehr korrekt auswerten. Dagegen kann man dann entweder nur die Flankensteilheit steigern oder die Übertragungsrate verkleinern.

Es stimmt zwar dass der höher Leitungswiderstand die Flankensteilheit am Anschlussort der Pullup Widerstände erhöht, aber dort ist genau genommen die Flankensteilheit komplett egal, diese muss bei den Busteilnehmern stimmen.

1
CatsEyes  23.03.2022, 09:53
@PeterKremsner

Haben wir was missverstanden? Widerstände nicht in Reihe mit der Leitung, sondern gegen Masse meinte ich.

0
PeterKremsner  23.03.2022, 09:58
@CatsEyes

Dann müssen die Widerstände aber hochohmig sein sonst schließt du am Ende nur deinen Bus kurz.

Auf der anderen Seite bilden diese Widerstände einen Spannungsteiler mit den Pullups, was zu einer Verkleinerung des High Levels und damit geringeren SNR führt.

Also ja die Flankensteilheit steigt in diesem Fall an, weil der Effektive Widerstand im RC kleiner wird, das wird aber durch eine geringer Bussspannung erkauft, was eben kleineres SNR und damit keine Verbesserung in der Übertragung bedeutet.

1
CatsEyes  23.03.2022, 10:02
@PeterKremsner

Da kann ich nur zustimmen; vielleicht pull-up-Widerstände hinzufügen, parallel zu den existierenden?

0
PeterKremsner  23.03.2022, 10:13
@CatsEyes

Das geht und wird auch oft so gemacht. Die I2C Spezifikation sieht glaube ich für die Fast Rate 20mA Sink Rate für die I2C Pins vor, also kann man die Widerstände so wählen, dass man 20mA erreicht nur überschreiten darf man es nicht, da das eben zu Schäden führen kann.

Bei einem 3V3 Bus ist also der Minimale Widerstand 165 Ohm, allerdings hängt das auch von der Gesamten Sink Kapazität der IO Bank ab. Beim Pi empfiehlt es sich 5mA pro Pin nicht zu überschreiten was dann eben zu einem Widerstand von 660 Ohm führt. Am Pi verbaut sind hier 2k7 wenn ich mich recht erinnere, also da kann man mit kleineren Pullups noch was raus holen.

Allerdings würde ich mir bei Leitungslängen von 8m schon langsam auch Gedanken über den Wellenwiderstand der Leitung und Reflexionen machen und da endet leider, das ganze, weil der I2C Bus keinen definierten Wellenwiderstand hat und eine Busterminierung wie gesagt hier auch schwer möglich ist. Feldbussystem wie zb CAN sehen das ja vor, so definiert CAN eine Single Ended Impedanz von 120 Ohm und 60 Ohm differentiell. Am Ende wird man also die Datenrate runter drehen müssen.

1
CatsEyes  23.03.2022, 10:32
@PeterKremsner

Da kann ich nur zustimmen, auch bez. Wellenwiderstand. Ich wäre neugierig, wie der Fragesteller damit klar kommt, umgeht und ob es klappt.

1
PeterKremsner  23.03.2022, 10:39
@CatsEyes

Die Übertragung wird in den meisten Fällen funktionieren. Aber vielleicht nicht bei 100% aller Nachrichten.

Das Problem ist nur, dass I2C so definiert ist, dass man eigentlich davon ausgeht, dass alles funktioniert, aus diesem Grund haben die meisten Sensoren auch keine Checksums auf den Daten.

Also ich würde bei dieser Länge schon mit gelegentlich Problemen rechnen und da kommts dann stark darauf an, wie die Software programmiert ist und wie sie mit solchen Fehlern umgeht.

1
CatsEyes  23.03.2022, 10:56
@PeterKremsner

Habe selber mit I2C zu wenig Erfahrung, denke aber, auch hier nur zustimmen zu können.

1

Die Kapazität ist eine Eigenschaft des Kabels, die kannst Du nur durch Austausch des Kabels reduzieren.

Von Experte deruser1973 bestätigt

Kapazitäten hat nicht ein einzelner Leiter, sondern haben mehrere Leiter unter sich oder gegen Erde oder Abschirmung.
Diese Kapazitäten lassen sich primär durch mehr Distanz der Leiter unter sich verringern.

Hallo,

I2C ist dafür nicht erfunden worden, um dieses über 8m zu betreiben..

aber wieso nutzt du nicht andere Bus-Protokolle? wie z.B. 1Wire oder Modbus TCP oder RS485 ?

Ich nutze übrigens den Modbus TCP um 15m weiten I2C-Output zu nutzen, die Werte werden 1:1 übertragen..Funktioniert..

Woher ich das weiß:Hobby – Zuerst Hobby, dann Beruflich, jetzt beides :)