Forum: Mikrocontroller und Digitale Elektronik Arduino Datenübertragung über Signalstrom


von Sebastian T. (sebastian_tr)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich möchte für einen Versuchsaufbau ein Steuergerät mit einem Signal 
versorgen, welches im Fahrzeug über die Stromstärke übertragen wird. Es 
ist ein Datenprotokoll mit High und Low Pegeln, wie in anderen 
Bussystemen, mit dem Unterschied dass die Pegel über die Stromaufnahme 
definiert sind (High Pegel 28mA, Low Pegel 7mA) und das über einen 
Spannungsbereich von 5-24V bei einer Frequenz bis 2500 Hz. Die 
Ansteuerung würde ich gerne per Arduino machen, allerdings fehlt mir bis 
jetzt jeglicher Ansatz einer Schaltung um die Stromstärke so präzise zu 
regeln.
Habt ihr da eine Idee zu?
Viele Grüße und ein schönes Wochenende,
Sebastian

von Jens M. (schuchkleisser)


Lesenswert?

Ich bin mir reichlich sicher, das es da nur "unter X" und "über X" gibt, 
und das da einfach ein Lastwiderstand eingeschaltet wird.

Wenn du unbedingt die Werte exakt replizieren willst, geht das mit zwei 
simplen Konstantstromquellen, die bestehen nur aus 2 Widerständen, einem 
Transistor und zwei Dioden, dabei lässt du eine an, die andere schaltest 
du, fertig ist die Laube.

von Christoph M. (mchris)


Lesenswert?

Sebastian T. (sebastian_tr)
12.03.2022 16:12
>ich möchte für einen Versuchsaufbau ein Steuergerät mit einem Signal
>versorgen, welches im Fahrzeug über die Stromstärke übertragen wird.

Apropos: Kennst Du das HART-Protokoll? Das wird seit ein paar 
Jahrzehnten in der Industrie verwendet:
https://silo.tips/download/berner-fachhochschule-hochschule-fr-technik-und-informatik-hti

von Falk B. (falk)


Lesenswert?

Sebastian T. schrieb:
> ich möchte für einen Versuchsaufbau ein Steuergerät mit einem Signal
> versorgen, welches im Fahrzeug über die Stromstärke übertragen wird.

Das ist ein "alter Hut", gibt es ain verschiedensten Varianten.

> definiert sind (High Pegel 28mA, Low Pegel 7mA) und das über einen
> Spannungsbereich von 5-24V bei einer Frequenz bis 2500 Hz.

Alles entspannt.

> Die
> Ansteuerung würde ich gerne per Arduino machen, allerdings fehlt mir bis
> jetzt jeglicher Ansatz einer Schaltung um die Stromstärke so präzise zu
> regeln.

Mit einer Konstantstromquelle auf OPV-Basis. Der Sollwert kann von 
einem Digitalpin vom Arduino aus gesteuert werden. Man muss nur den 
passenden Spannungsteiler verwenden.

von Christoph M. (mchris)


Lesenswert?

Und dann gibt es da noch die Weihnachtsbeleuchtungen, die man genau 
genommen auch mit einer "Stromschnittstelle" betreibt:
https://cpldcpu.wordpress.com/2022/01/23/controlling-rgb-leds-with-only-the-powerlines-anatomy-of-a-christmas-light-string/

von Dieter R. (drei)


Lesenswert?

Sebastian T. schrieb:
> Hallo zusammen,
> ich möchte für einen Versuchsaufbau ein Steuergerät mit einem Signal
> versorgen, welches im Fahrzeug über die Stromstärke übertragen wird.

Zur Klarstellung:

1. Der Arduino ist der Master (?)

2. Die Signalübertragung erfolgt bidirektional oder unidirektional? Die 
Signalbezeichnungen SDA/SCL lassen eher ersteres vermuten.

von Sebastian T. (sebastian_tr)


Lesenswert?

Jens M. schrieb:
> Ich bin mir reichlich sicher, das es da nur "unter X" und "über X" gibt,
> und das da einfach ein Lastwiderstand eingeschaltet wird.
>
> Wenn du unbedingt die Werte exakt replizieren willst, geht das mit zwei
> simplen Konstantstromquellen, die bestehen nur aus 2 Widerständen, einem
> Transistor und zwei Dioden, dabei lässt du eine an, die andere schaltest
> du, fertig ist die Laube.

Also laut Datenblatt sind es genau die Stromwerte mit einer Toleranz von 
+-20%. Mein Problem ist, dass die Spannung von 5-24V aus dem Steuergerät 
kommt und ich quasi nur die Last auf den beiden Leitungen regeln muss, 
unabhängig von der Spannung. Die Spannung die ich am realen Steuergerät 
gemessen habe (zwischen den beiden Signalleitungen) liegt bei 10.4V. 
Wenn ich jetzt davon ausgehe, dass die sich nicht ändert, dann kann ich 
ja einfach einen Widerstand als High-Pegel dauerhaft anschließen und 
einen zweiten für einen Low-Pegel bei Bedarf dahinterschalten. Würde 
heißen ich nehm einen 370 ohm Widerstand für den High-Pegel und einen 
1k1 bei Bedarf für einen Low-Pegel in Reihe?
Danke & Grüße,
Sebastian

von Sebastian T. (sebastian_tr)


Lesenswert?

Christoph M. schrieb:
> Sebastian T. (sebastian_tr)
> 12.03.2022 16:12
>>ich möchte für einen Versuchsaufbau ein Steuergerät mit einem Signal
>>versorgen, welches im Fahrzeug über die Stromstärke übertragen wird.
>
> Apropos: Kennst Du das HART-Protokoll? Das wird seit ein paar
> Jahrzehnten in der Industrie verwendet:
> 
https://silo.tips/download/berner-fachhochschule-hochschule-fr-technik-und-informatik-hti

Das kannte ich bis jetzt noch nicht, lese mich gleich mal ein. Danke!

von Sebastian T. (sebastian_tr)


Lesenswert?

Dieter R. schrieb:
> Sebastian T. schrieb:
>> Hallo zusammen,
>> ich möchte für einen Versuchsaufbau ein Steuergerät mit einem Signal
>> versorgen, welches im Fahrzeug über die Stromstärke übertragen wird.
>
> Zur Klarstellung:
>
> 1. Der Arduino ist der Master (?)

Genau, der Arduino soll z.B. ein Poti einlesen und auf dieser Basis die 
Daten für das Signal erzeugen.

>
> 2. Die Signalübertragung erfolgt bidirektional oder unidirektional? Die
> Signalbezeichnungen SDA/SCL lassen eher ersteres vermuten.

Das Signal ist unidirektional. SDA / SCL hatte ich als I2C o.ä. für die 
Steuerung der Schaltung gedacht. Aber das Signal, welches ich am 
Steuergerät emulieren möchte ist unidirektional. Es handelt sich um 
Raddrehzahlsensoren an einem ABS-Steuergerät. Die Sensoren sind aktiv, 
also Drehrichtungserkennend und übertragen so ein Datenprotokoll an das 
ABS-Steuergerät. Das Steuergerät stellt die Versorgungsspannung auf zwei 
Leitungen zur Verfügung und über die Stromaufnahme auf den beiden 
Leitungen überträgt der Sensor Daten an das Steuergerät.

Viele Grüße,
Sebastian

Beitrag #7001725 wurde vom Autor gelöscht.
von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Sebastian T. schrieb:
> (High Pegel 28mA, Low Pegel 7mA)

Hört sich irgendwie nach einer etwas verstellten "4…20 mA Stromschleife" 
an:
- https://de.wikipedia.org/wiki/Stromschnittstelle
- https://de.wikipedia.org/wiki/Einheitssignal

Wie sieht denn die Schaltung am Eingang deines Steuergerätes aus? Ist 
das einfach nur ein definierter Widerstand an dem der Spannungsabfall 
gemessen wird?

von Sebastian T. (sebastian_tr)


Lesenswert?

Irgend W. schrieb:
> Sebastian T. schrieb:
>> (High Pegel 28mA, Low Pegel 7mA)
>
> Hört sich irgendwie nach einer etwas verstellten "4…20 mA Stromschleife"
> an:
> - https://de.wikipedia.org/wiki/Stromschnittstelle
> - https://de.wikipedia.org/wiki/Einheitssignal
>

Ich denke dieser Punkt trifft zu:
"Aktiver Eingang für passive Sensoren: Der Eingang misst den Strom und 
hat eine Spannungsquelle. Der Sensor ist nur eine gesteuerte Stromsenke 
und kann deshalb 2-polig (2-Draht) ausgeführt sein"

> Wie sieht denn die Schaltung am Eingang deines Steuergerätes aus? Ist
> das einfach nur ein definierter Widerstand an dem der Spannungsabfall
> gemessen wird?

Über die Beschaltung im Steuergerät habe ich keinerlei Informationen. 
Ich habe nur Informationen über das Signal selbst, was erwartet wird.

von fet (Gast)


Lesenswert?

Das könnte ein PSI5-Interface sein? Dafür gibt es Transceiver due SPI 
oder UART sprechen.

von Dieter R. (drei)


Lesenswert?

Sebastian T. schrieb:

> Es handelt sich um Raddrehzahlsensoren an einem ABS-Steuergerät. Die
> Sensoren sind aktiv, also Drehrichtungserkennend und übertragen so ein
> Datenprotokoll an das ABS-Steuergerät.

Also nochmal genau, was ist die Aufgabe:

1. Der Arduino ist der Master und muss nur senden.

2. Der erwähnte Sensor ist nicht physisch vorhanden, vielmehr soll der 
Arduino diesen Sensor emulieren, also gegenüber dem Steuergerät als 
Sensor erscheinen? Der Arduino muss also das Stromsignal erzeugen? Es 
gibt eine Spannungsversorgung (positiv? welche Spannung?) und einen 
gemeinsamen Massepunkt mit dem Steuergerät? Wie groß ist der 
Spannungsabfall am Eingang des Steuergeräts bzw. dessen Innenwiderstand?

3. Das Protokoll kannst du folglich auch nicht frei definieren, sondern 
musst das emulieren, was der Sensor liefern würde und das Steuergerät 
erwartet?

von Sebastian T. (sebastian_tr)


Lesenswert?

fet schrieb:
> Das könnte ein PSI5-Interface sein? Dafür gibt es Transceiver due SPI
> oder UART sprechen.

Das könnte passen. Schaue ich mir mal an.

von Sebastian T. (sebastian_tr)


Lesenswert?

Dieter R. schrieb:
> Also nochmal genau, was ist die Aufgabe:
>
> 1. Der Arduino ist der Master und muss nur senden.
>
> 2. Der erwähnte Sensor ist nicht physisch vorhanden, vielmehr soll der
> Arduino diesen Sensor emulieren, also gegenüber dem Steuergerät als
> Sensor erscheinen? Der Arduino muss also das Stromsignal erzeugen? Es
> gibt eine Spannungsversorgung (positiv? welche Spannung?) und einen
> gemeinsamen Massepunkt mit dem Steuergerät? Wie groß ist der
> Spannungsabfall am Eingang des Steuergeräts bzw. dessen Innenwiderstand?
>
> 3. Das Protokoll kannst du folglich auch nicht frei definieren, sondern
> musst das emulieren, was der Sensor liefern würde und das Steuergerät
> erwartet?

Richtig. Der Arduino soll als Sensor fungieren und dem Steuergerät das 
Signal emulieren. Also quasi den Raddrehzahlsensor emulieren, damit das 
ABS-Steuergerät eine Raddrehzahl erkennt. Die Spannungsversorgung kommt 
über die beiden Signalleitungen vom Steuergerät (10.4V), über die auch 
per Stromsenke das Geschwindigkeitssignal vom Sensor zum Steuergerät 
übertragen wird. Innenwiderstand kann ich am Montag mal messen. Das 
Protokoll ist fix und muss nach Datenblatt emuliert werden.

von Dieter R. (drei)


Lesenswert?

Ein paar Gedanken dazu:

1. Von PSI5 habe ich keine Ahnung. Dieses Datenblatt 
https://www.st.com/en/automotive-analog-and-power/l9663.html

passt aber kaum zu deinen Angaben, weshalb ich mal vermuten würde, dass 
es eher nicht PSI5 ist.

2. Bevor man an Schaltungsdetails geht, solltest du erst einmal das 
Übertragungsprotokoll klären.

3. Ein Datenblatt des zu emulierenden Sensors wäre hilfreich. Daraus 
sollten dann auch so Randbedingungen wie Toleranzen, Slew Rate usw. 
hervorgehen.

von Dieter R. (drei)


Lesenswert?

Nachtrag: High Pegel 28mA, Low Pegel 7mA hat mich doch neugierig 
gemacht, weil es überhaupt nicht dem entspricht, was man in Daten- und 
Industrietechnik sonst gewohnt ist.

Der hier:

https://www.infineon.com/cms/en/product/sensor/magnetic-sensors/magnetic-speed-sensors/tle4943c/

entspricht z. B. dieser Spezifikation, allerdings mit einem 
interessanten Protokoll mit DREI Zuständen 7/14/28 mA, 
Manchester-Codierung und unterschiedlichen Signaltelegrammen mit 2 bis 9 
Bit Länge je nach Drehzahl. Das verkompliziert die Anforderungen ein 
kleines bisschen.

Ich würde was mit OP-Amp, PNP-Treibertransistor und Simulation in 
LTSpice designen. Das ist problemlos machbar, aber nicht mal so eben als 
Foren-Schnellschuss erledigt. Vielleicht kann man auch einen 
handelsüblichen 20mA-Treiber dazu überreden, innerhalb dieser Parameter 
zu funktionieren.

von Manfred (Gast)


Lesenswert?

Sebastian T. schrieb:
> Würde
> heißen ich nehm einen 370 ohm Widerstand für den High-Pegel und einen
> 1k1 bei Bedarf für einen Low-Pegel in Reihe?

1k5 für dei 7mA und mit einem FET 500 Ohm parallel scheint einfacher.

Falk B. schrieb:
> Mit einer Konstantstromquelle auf OPV-Basis.

Die dann entweder schwingt oder langsam ist?

Weiter unten legt er "20% Toleranz" nach. Da käme mir ein BC_irgendwas 
NPN mit Emitterwiderstand in den Sinn, wo der Arduino die Basisspannung 
umschaltet.

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.