Forum: Mikrocontroller und Digitale Elektronik 1-Draht Datenübertragung möglichst störfest machen


von Olli Z. (z80freak)


Lesenswert?

Ich möchte eine einzige, ca. 5 m lange Kupfer-Ader 400 kbaud übertragen. 
Aufgrund baulicher Gegebenheiten habe ich nur diese eine Ader zur 
Verfügung. Ansonsten liegen noch + und GND parallel dazu. Die Leitung 
ist wedergeschirmt noch verdrillt.

Die Betriebsspannung (+) liegt zwischen 5 und 12 V. Der fliessende Strom 
bei max. 600 mA. Die Datenleitung hat einen 5 V TTL-Pegel.

Was kann ich tun um die Übertragung möglichst störfest und mit minimalen 
EMV-Emmissionen zu betreiben?

Ich dachte da an Transceiver aus dem KFZ-Bereich, z.B. den MCP2551 und 
dann nur eine Leitung nutzen oder einen Single-Wire-CAN Transceiver 
nutzen. LIN-Transceiver scheiden aus, die gehen nur bis 20 kbaud.

: Bearbeitet durch User
von Nimmst du (Gast)


Lesenswert?

Antenne, dann bauchst du nur eindraht

von H.Joachim S. (crazyhorse)


Lesenswert?

Wie lang?

von Olli Z. (z80freak)


Lesenswert?

H.Joachim S. schrieb:
> Wie lang?

Sorry, habs korrigiert. Sind ca. 5 m.

von Kurt (Gast)


Lesenswert?

Olli Z. schrieb:
> Ich möchte eine einzige Kupfer-Ader 400 kbaud übertragen. Aufgrund
> baulicher Gegebenheiten habe ich nur diese eine Ader zur Verfügung.
> Ansonsten liegen noch + und GND parallel dazu. Die Leitung ist
> wedergeschirmt noch verdrillt.
>
> Die Betriebsspannung (+) liegt zwischen 5 und 12 V. Der fliessende Strom
> bei max. 600 mA. Die Datenleitung hat einen 5 V TTL-Pegel.
>
> Was kann ich tun um die Übertragung möglichst störfest und mit minimalen
> EMV-Emmissionen zu betreiben?

Eingeprägten Strom, Optokoppler, Wiederherstellung defekter Zeichen oder 
deren Wiederholung, "schräge Flanken".

Überspannungsschutz nicht vergessen!


 Kurt

von georg (Gast)


Lesenswert?

Kurt schrieb:
> "schräge Flanken"

Richtig, aber dazu müsste man wissen, welche Übertragungsrate, was der 
TO natürlich geheimhält. Auf jeden Fall sind ihm 20 kBaud zu wenig.

Georg

von H.Joachim S. (crazyhorse)


Lesenswert?

?
Olli Z. schrieb:
> 400 kbaud

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


Lesenswert?

Olli Z. schrieb:
> Ich möchte eine einzige, ca. 5 m lange Kupfer-Ader 400 kbaud übertragen.
Nur zur Sicherheit nochmal gefragt: musst du mit dieser 
Geschwindigkeit übertragen? Brauchst du diese Datenrate kontinuierlich 
und dauernd?

: Bearbeitet durch Moderator
von Audio (Gast)


Lesenswert?

Spezielle Singlewire-CAN Transceiver mal ansehen:
https://www.onsemi.com/pub/Collateral/NCV7356-D.PDF

denke aber, da scheitert es an der baudrate.

wie kommst du auf die Datenrate?

von georg (Gast)


Lesenswert?

H.Joachim S. schrieb:
> ?
> Olli Z. schrieb:
>> 400 kbaud

Sorry, übersehen - aber das ist über einen 5m langen Draht schon 
sportlich. Ich würde das nicht riskieren.

Georg

von Olli Z. (z80freak)


Lesenswert?

Lothar M. schrieb:
> Olli Z. schrieb:
>> Ich möchte eine einzige, ca. 5 m lange Kupfer-Ader 400 kbaud übertragen.
> Nur zur Sicherheit nochmal gefragt: musst du mit dieser
> Geschwindigkeit übertragen? Brauchst du diese Datenrate kontinuierlich
> und dauernd?
Ja, leider. Bauliche gegebenheit und ich kann da nichts dran ändern.
Die Daten die ich übertragen möchte sind nur bei Änderung anliegend. Es 
handelt sich um Daten von einem WS2812 Controller für eine 
LED-Beleuchtung. Nur beim dimmen/farbwechsel werden Daten übertragen. 
Ich kann die LEDs und den Controller von normal 800 kbaud auf 400 kbaud 
zurückschalten, was für meine wenigen LEDs (8 pro Strang) ausreichend 
ist.

von Olli Z. (z80freak)


Lesenswert?

Audio schrieb:
> Spezielle Singlewire-CAN Transceiver mal ansehen:
> https://www.onsemi.com/pub/Collateral/NCV7356-D.PDF
> denke aber, da scheitert es an der baudrate.
Hatte ich schon geprüft und aus dem Grund, wie auch die LIN-Transceiver 
ausgenommen. Übrig blieben nur Dual-Wire-CAN Transceiver. Die machen 
durch die Bank bis 1 mbaud.

> wie kommst du auf die Datenrate?
Siehe Antwort zuvor.

von Olli Z. (z80freak)


Lesenswert?

georg schrieb:
> H.Joachim S. schrieb:
>> ?
>> Olli Z. schrieb:
>>> 400 kbaud
>
> Sorry, übersehen - aber das ist über einen 5m langen Draht schon
> sportlich. Ich würde das nicht riskieren.
>
> Georg

Der Witz ist ja, das im Datenblatt des WS2811-Chips der in meiner 
LED-Beleuchtung zum Einsatz kommt, ein Abstand von bis zu 10 m zwischen 
den LEDs als möglich angegeben ist. Ich bezweifle aber das die im Chip 
integrierten Senderstufen das wirklich leisten können.
Leider gibt es keine Checksummen oder Fehlerkorrektur im Protokoll. D.H. 
eine falsche Übertragung lässt wenigstens eine LED falsch anzeigen. Um 
das zu verhindern müsste ich, auch wenn sich nichts ändert, den 
aktuellen Wert periodisch (alle 0,5 oder 0,25 Sekunden) senden, was aber 
wiederum nicht dolle fürs EMV ist.

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


Lesenswert?

Serienterminierung bringt vielleicht was, aber letztlich gilt: 
Ausprobieren.

Dass die Daten nur bei Änderungen übertragen werden, ist übrigens ganz 
schlecht, denn wenn dann mal 1 Telegramm korrupt ist, dann kommt halt 
Käse raus und der bleibt mindestens bis zur nächsten Änderung...

von H.Joachim S. (crazyhorse)


Lesenswert?

Da Einzelstück, würde ich es mal mit RS232 versuchen. Gibt ne ganze 
Menge Chips, die mehr als die üblichen 120k können. MAX3243, typisch 
500kBaud. Für so eine Anwendung kann man schon gerne mal typische Werte 
nehmen.

von Rainer U. (r-u)


Lesenswert?

Olli Z. schrieb:
> Es
> handelt sich um Daten von einem WS2812 Controller für eine
> LED-Beleuchtung.

Und wenn Du nun den Controller auf die LED-Seite tust und 
"fernbedienst"?

von Olli Z. (z80freak)


Lesenswert?

Lothar M. schrieb:
> Serienterminierung bringt vielleicht was, aber letztlich gilt:
Habe ich vor. Laut Datenblatt soll man 33 Ohm Widerstände in Reihe zu 
den Datenleitungen schalten um Reflextionen zu mindern und 
Hot-Plug-Effekte zu minimieren.

> Ausprobieren.
Das werde ich. Nur ist es für mich nicht so einfach mögliche Störquellen 
zu simulieren. Ich kann halt nen Trafo in die Nähe stellen, oder ne 
Mikrowelle, oder was weiss ich ;-)

> Dass die Daten nur bei Änderungen übertragen werden, ist übrigens ganz
> schlecht, denn wenn dann mal 1 Telegramm korrupt ist, dann kommt halt
> Käse raus und der bleibt mindestens bis zur nächsten Änderung...
Rischdisch. Daher hab ich grad zuvor ja geschrieben das ich vermutlich 
zyklisch wiederholen muss. Es gibt auch kein Feedback oder Readback der 
gesendeten Werte. Es muss einfach stimmen.

von Olli Z. (z80freak)


Lesenswert?

Rainer U. schrieb:
> Olli Z. schrieb:
>> Es
>> handelt sich um Daten von einem WS2812 Controller für eine
>> LED-Beleuchtung.
>
> Und wenn Du nun den Controller auf die LED-Seite tust und
> "fernbedienst"?

Geht leider nicht ohne weiteres. Ich hab ja nur eine freie Ader und an 
den Controller möchte ich per USB rankommen zum programmieren. Ist doof, 
ich weiss und hätte man sich alles vorher überlegen können, klar, aber 
ich habe das Problem mit der Datenübertragung über 1-Draht schlichtweg 
unterschätzt.

von Der Andere (Gast)


Lesenswert?

Die eigentliche Nutzdatendichte ist doch jetzt um 3-5 Größenordungen 
kleiner als die durch das WS2812 Protokoll notwendige Bandbreite.
Ich gehe jetzt davon aus: Du hast einen fertigen Controller den du 
benutzen willst. Weil du an den mit USB drankommst kann der auch nicht 
zu den Leds.

Jetzt kannst du entweder durch geeignete Hardwaremaßnahmen die 
Bandbreite entsprechend erhöhen, oder (alternative "dumme" Idee) du 
nimmst 2 µCs.
Mit dem einen liest du das WS2812 Protokoll des Controllers aus und 
schickst die Daten dann wesentlich langsamer zu dem 2. µC. Der sitzt 
direkt bei den Leds und wandelt die Daten aus dem langsamen störsicheren 
Protokoll wieder in WS2812 um und steuert damit die Leds an.

Ist von hinten durch die Brust ins Auge, aber vieleicht eine suboptimale 
Lösung wenn es keine bessere gibt.

Siehe auch
https://www.mikrocontroller.net/articles/WS2812_Ansteuerung

von Falk B. (falk)


Lesenswert?

@ Olli Z. (z80freak)

>Die Daten die ich übertragen möchte sind nur bei Änderung anliegend. Es
>handelt sich um Daten von einem WS2812 Controller für eine

Dieses "Detail" wäre im Ursprungsbeitrag sinnvoll platziert gewesen. 
Naja, besser spät als nie.

>LED-Beleuchtung. Nur beim dimmen/farbwechsel werden Daten übertragen.
>Ich kann die LEDs und den Controller von normal 800 kbaud auf 400 kbaud
>zurückschalten, was für meine wenigen LEDs (8 pro Strang) ausreichend
>ist.

Das ist nur die halbe Wahrheit. WS2812 LEDs arbeiten mit Pulse von 0,4 
oder 0,8us, welche sie auch relativ genau sehen wollen, wenn sie nicht 
rumzicken sollen. Damit sind wird schon weit im MHz-Bereich, vor allem 
was die Schaltflanken angeht. Damit wird das Thema Wellenwiderstand 
relevant. D.h. du brauchst eine Serienterminierung UND halbwegs 
konstanten Wellenwiderstand des Kabels. Das muss nicht zwingend 
verdrillt sein, sollte aber nicht lose mit großem Abstand rumliegen.

von Olli Z. (z80freak)


Lesenswert?

Falk B. schrieb:
> Dieses "Detail" wäre im Ursprungsbeitrag sinnvoll platziert gewesen.
Ja, da hast Du natürlich recht. Ich dachte es gibt eine eher generische 
Lösung bei der digitalen Datenübermittlung mit einer Ader. Leider lässt 
sich ein Beitrag später auch nicht mehr ergänzen, sodass sich andere 
Mitglieder durch die ganzen Antworten quälen müssen... sonst hätt ich 
das schon ergänzt :-)

> Das ist nur die halbe Wahrheit. WS2812 LEDs arbeiten mit Pulse
Chips mit nachfolgenden LEDs. An der ersten LED ist ein Jumper mit der 
sich die Geschwindigkeit umstellen lässt.

> relevant. D.h. du brauchst eine Serienterminierung UND halbwegs
> konstanten Wellenwiderstand des Kabels.
Wie ermittele ich diese Widerstände? Kann ich das mit nem Oszi auch 
ausmessen? Hab von HF Technik leider keinen Plan, war immer ein Buch mit 
sieben Siegeln für mich. Werde mal versuchen aus dem Inhalt der 
verlinkten Seiten schlau zu werden.

Es ist leider oft so, das man ein scheinbar triviales Problem hat und 
dann plötzlich in Grundlagenforschung stecken bleibt.

von Olli Z. (z80freak)


Lesenswert?

Der Andere schrieb im Beitrag #5257595
> Ich gehe jetzt davon aus: Du hast einen fertigen Controller den du benutzen 
willst. Weil du an den mit USB drankommst
Genau richtig.

> nimmst 2 µCs.
Die Idee ist grundsätzlich nicht schlecht, ich habe natürlich gehofft 
mit weniger Aufwand hin zu kommen. Dachte Pegelwandler könnten reichen, 
auch um es nicht noch komplizierter und teurer zu machen.

von Falk B. (falk)


Lesenswert?

@Olli Z. (z80freak)

>> Das ist nur die halbe Wahrheit. WS2812 LEDs arbeiten mit Pulse

>Chips mit nachfolgenden LEDs. An der ersten LED ist ein Jumper mit der
>sich die Geschwindigkeit umstellen lässt.

Mag sein, ändert aber am Grundproblem nix.

>> relevant. D.h. du brauchst eine Serienterminierung UND halbwegs
>> konstanten Wellenwiderstand des Kabels.

>Wie ermittele ich diese Widerstände?

Trial & error. Einfach den Serienwiderstand am Sender schrittweise 
erhöhen und schauen wann es stabil läuft. 33, 47, 68, 100 Ohm.

>Kann ich das mit nem Oszi auch
>ausmessen?

Jain. Wenn das Signal am Eingang der 1. LED schön aussieht, ohne 
Klingeln und Überschwinger.

Beitrag "Re: Skurriles Problem mit BS170 Mosfets"

Aber bitte richtig messen.

https://www.mikrocontroller.net/articles/Oszilloskop#Tastk.C3.B6pfe_richtig_benutzen

von Sheeva P. (sheevaplug)


Lesenswert?

Olli Z. schrieb:
> Lothar M. schrieb:
>> Brauchst du diese Datenrate kontinuierlich
>> und dauernd?
> Ja, leider. Bauliche gegebenheit und ich kann da nichts dran ändern.
> Die Daten die ich übertragen möchte sind nur bei Änderung anliegend. Es
> handelt sich um Daten von einem WS2812 Controller für eine
> LED-Beleuchtung. Nur beim dimmen/farbwechsel werden Daten übertragen.
> Ich kann die LEDs und den Controller von normal 800 kbaud auf 400 kbaud
> zurückschalten, was für meine wenigen LEDs (8 pro Strang) ausreichend
> ist.

Wie schnell müssen Deine LEDs denn auf Änderungen reagieren? Oder anders 
gefragt: kannst Du die Daten eventuell puffern?

Ein Mikrocontroller auf der Empfängerseite könnte die Daten empfangen 
und zwischenspeichern (puffern). Wenn dann ein kompletter Datensatz 
empfangen wurde, gibt er den mit den passenden Timings auf die 
LED-Controller aus.

von Falk B. (falk)


Lesenswert?

@Sheeva Plug (sheevaplug)

>Wie schnell müssen Deine LEDs denn auf Änderungen reagieren? Oder anders
>gefragt: kannst Du die Daten eventuell puffern?

>Ein Mikrocontroller auf der Empfängerseite könnte die Daten empfangen

Genau DIESE Idee hat der OP MEHRFACH abgelehnt.

von Rene. K (Gast)


Lesenswert?

Ich stand vor selbigen Problem... Und hatte eine ganz einfache sowie 
simple Lösung die tadellos hier (4,5M) funktioniert:

Ich habe ganz simple eine WS2812 auf die Sendeseite gemacht und bin dann 
von dieser über gut 4,5M Ader auf die anderen LEDs gegangen. Im Code 
gebe ich einfach die erste LED als Dummycode mit aus. Hatte übrigens den 
guten Effekt das man am "anderen Ende" sieht ob das Programm überhaupt 
richtig läuft.

Probiers einfach mal aus.

von Falk B. (falk)


Lesenswert?

@ Rene. K (Gast)

>Ich habe ganz simple eine WS2812 auf die Sendeseite gemacht und bin dann
>von dieser über gut 4,5M Ader auf die anderen LEDs gegangen.

Hmm. Was unterscheidet den Digitalausgang einer WS2812 von einem 
normalen CMOS-Digitalausgang? Ggf. sind die Anstiegszeiten größer und 
damit die Gefahr von Reflektionen auf langen Leitungen geringer. Das 
müßte man mal messen.

von Rene. K (Gast)


Lesenswert?

Falk B. schrieb:
> @ Rene. K (Gast)
>
>>Ich habe ganz simple eine WS2812 auf die Sendeseite gemacht und bin dann
>>von dieser über gut 4,5M Ader auf die anderen LEDs gegangen.
>
> Hmm. Was unterscheidet den Digitalausgang einer WS2812 von einem
> normalen CMOS-Digitalausgang? Ggf. sind die Anstiegszeiten größer und
> damit die Gefahr von Reflektionen auf langen Leitungen geringer. Das
> müßte man mal messen.

Du, das kann ich dir nicht sagen. Mag sein das dies ein normaler CMOS 
Ausgang mit den richtigen Timings auch stemmt. Ich habe als µC vor dem 
WS einen STM32 laufen, die Software ist selbst geschrieben und befeuert 
den WS über DMA - ich gehe mal davon aus, das meine Timings da schon 
relativ "grenzwertig" sind. Weil da schon nach gut 20cm Freikabel nur 
noch Datenmüll an den WS angekommen ist. Alles unter 10cm von µC zu WS 
klappt hier allerdings wunderbar.

Ich muss auch zugeben, das ich mir noch nie ein WS2812 am Datenausgang 
mit einem Oszi angeschaut habe. Kann dazu also nicht wirklich was sagen.

von Falk B. (falk)


Lesenswert?

@ Rene. K (Gast)

>> damit die Gefahr von Reflektionen auf langen Leitungen geringer. Das
>> müßte man mal messen.

>Du, das kann ich dir nicht sagen.

Deswegen müßte mal jemand messen . . .

> Mag sein das dies ein normaler CMOS
>Ausgang mit den richtigen Timings auch stemmt. Ich habe als µC vor dem
>WS einen STM32 laufen,

Dessen Ausgaänge auch in der langsamsten Konfigurationsstufe immer noch 
ziemlich schnell schalten, wahrscheinlich mit 5-10ns Anstiegszeit.

>die Software ist selbst geschrieben und befeuert
>den WS über DMA - ich gehe mal davon aus, das meine Timings da schon
>relativ "grenzwertig" sind. Weil da schon nach gut 20cm Freikabel nur
>noch Datenmüll an den WS angekommen ist.

Das ist aber meistens nicht ein Problem des Timings der Software sondern 
ein Prolem mit dem Wellenwiderstand.

> Alles unter 10cm von µC zu WS
>klappt hier allerdings wunderbar.

Ein starkes Indiz für Reflektionen auf dem Kabel, siehe oben.

>Ich muss auch zugeben, das ich mir noch nie ein WS2812 am Datenausgang
>mit einem Oszi angeschaut habe.

Das kannst du nachholen. Anscheinend hast du ja sowohl einen Oszi als 
auch eine WS2812 LED.

von Olli Z. (z80freak)


Lesenswert?

Falk B. schrieb:
> @Sheeva Plug (sheevaplug)
>
>>Wie schnell müssen Deine LEDs denn auf Änderungen reagieren? Oder anders
>>gefragt: kannst Du die Daten eventuell puffern?
>
>>Ein Mikrocontroller auf der Empfängerseite könnte die Daten empfangen
>
> Genau DIESE Idee hat der OP MEHRFACH abgelehnt.

Das kling jetzt ein bischen hart wie Du mich da interpretierst... Ich 
hab die Idee ja verstanden und durchaus auch schon selbst gehabt. Ich 
lehne sie auch nicht grundsätzlich ab, finde nur den Aufwand drumherum 
zu groß. Es ist ja nicht einfach mal nur ein uC. Das Ding braucht ein 
Netzteil, Strom, eine gewisse Umgebung, Software, etc. Mir wäre da was 
wartungsärmeres, einfachereres halt nur lieber.

von Olli Z. (z80freak)


Lesenswert?

Rene. K schrieb:
> Ich habe ganz simple eine WS2812 auf die Sendeseite gemacht und bin dann
> von dieser über gut 4,5M Ader auf die anderen LEDs gegangen. Im Code
> gebe ich einfach die erste LED als Dummycode mit aus. Hatte übrigens den
> guten Effekt das man am "anderen Ende" sieht ob das Programm überhaupt
> richtig läuft.

Du wirst lachen, aber sowas ähnliches hatte ich mir auch schon überlegt. 
Im Datenblatt des WS2811-Chips, sowie der WS2812 LEDs ist nämlich 
vermerkt, das die Strecke zwischen zwei LEDs (und dort steht explizit 
"nach der ersten LED") max. 7,5 Meter betragen darf. Was auch immer die 
als Treiber da drin haben, es ist scheinbar in der Lage das über eine 
normale, ungeschirmte Adern abzukönnen.

Auch wenn ich mich frag, was die anders machen als wir hier über zig 
Mails diksutieren, werde ich das auf jeden Fall mal ausprobieren. Ich 
hab mir die Signale auf meinem Rigol schonmal angeschaut und die sehen 
schon recht gruselig aus. Nach meinem Urlaub stell ich gern mal ein paar 
Screens rein.

von fast (Gast)


Lesenswert?

Olli Z. schrieb:
> Controller möchte ich per USB rankommen zum programmieren.

ich nehme dafür einen ESP8266, der steuert meine LEDs
er lässt sich zB über OTA (over the air, also über WIFI)
programmieren. Geht erstaunlich zuverlässig und einfach
über die Arduino-IDE.

Man benötigt halt WLAN-Empfang

von Olli Z. (z80freak)


Lesenswert?

Ja, weiss ich, kenn ich. Der ist aber entweder immer mit dem Haus-WLAN 
verbunden oder sendet selbst ne Kennung aus. Beides kommt für mich eher 
nicht in Frage. Das Teil soll normalerweise ohne irgendwas laufen. Die 
Lichtsteuerung kommt nicht über ein Tablet oder so, sondern über 
einfache Schalt- und Drehpotisignale. Ich brauch den USB nur zum 
umprogrammieren, falls ich mal was komplett anderes damit machen möchte.

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.