Forum: Mikrocontroller und Digitale Elektronik Pegelwandler für 18V Signal


von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

Das abgebildete Signal ist ein Serial-Signal wo die logische 0 einem 10V 
Spannungspegel und die logische 1 einem 18V Pegel entspricht.

Wie kann ich das am einfachsten lesen/erzeugen? Ich habe mir div. 
Level-Shifter angeschaut aber die liegen meist nur im Logikbereich, 
vielleicht mal 7V aber dann ist schluss.

Ich möchte es an einem 5V RX/TX Serial-Modul betreiben.

von Claus (Gast)


Lesenswert?

Die 10V/18V runterteilen (R-Teiler 1:2) auf 5V/9V - dann über eine 
Z-Diode (5.1V) auf 0V/4V - dann direkt auf eine 5V-Logik.

von H. H. (Gast)


Lesenswert?

Olli Z. schrieb:
> Das abgebildete Signal ist ein Serial-Signal wo die logische 0
> einem 10V
> Spannungspegel und die logische 1 einem 18V Pegel entspricht.

Fernspeisung? Dann solltest auch sagen wieviel Strom nötig ist.

von Wolfgang (Gast)


Lesenswert?

Bei so einem unsymmetrisch verschliffenen Signal ist es wahrscheinlich 
besser, wenn die Schaltschwellen für L->H und H-L unterschiedlich 
liegen. Da hilft ein Schmitt-Trigger um das Timing im pegelgewandelten 
Ausgangssignal wieder vernünftig zu reproduzieren. Die Zeitauflösung vom 
Screenshot ist leider etwas mager, um irgendwelche Details abzulesen.

von Olli Z. (z80freak)


Lesenswert?

H. H. schrieb:
> Fernspeisung? Dann solltest auch sagen wieviel Strom nötig ist.
Du meinst aufgrund des Grundpegels von 10V? Das wäre in diesem Fall 
egal, das übernimmt die Spannungsqulle. Ich muss eigentlich zum senden 
nur die richtigen LOW's generieren.

von Gerald K. (geku)


Lesenswert?

H. H. schrieb:
> Olli Z. schrieb:
>
>> Das abgebildete Signal ist ein Serial-Signal wo die logische 0
>> einem 10V
>> Spannungspegel und die logische 1 einem 18V Pegel entspricht.
>
> Fernspeisung? Dann solltest auch sagen wieviel Strom nötig ist.

Wird für bidirektionalen M-Bus, z.B. Brandmelder, verwendet.

- Fernspeisung
- Telegramme Zentrale - Melder: Absenkung der Spannung durch Zentrale
- Telegramme Melder - Zentrale: Stromerhöhung durch Melder

H: < 100μA pro Melder
L: > 10mA pro Melder

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Olli Z. schrieb:
> Ich muss eigentlich zum senden nur die richtigen LOW's generieren.

Woher kommt das Signal (Bussystem, Impedanz der Quelle)?
Was genau hast du vor?
Wer soll mit wem kommunizieren und wie willst du dort eingreifen?

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Ich würde das Signal als AC mit einem Kondensator auskoppeln und dann 
durch einen Schmitt Trigger schicken. Eventuell noch einen Tiefpass 
dazwischen, um Störungen heraus zu filtern.

Anm: Der angehängte Plan ist nur ein Lösungsansatz. Ich habe das weder 
getestet noch durch gerechnet.

von Wolfgang (Gast)


Lesenswert?

Stefan F. schrieb:
> Ich würde das Signal als AC mit einem Kondensator auskoppeln und dann
> durch einen Schmitt Trigger schicken.

Ganz tolle Idee :-(
Dann bräucht jedes Datenpaket eine Präambel, damit sich das Signal am 
Empfängereingang erstmal richtig einpegeln kann.

von Olli Z. (z80freak)


Lesenswert?

Der Bus hat einen Ruhepegel von 18V. Dieser wird vermutlich irgendwo 
durch einen Pullup erzeugt. Die restlichen Teilnehmer können ggf. 
einfach OC angeschlossen sein.

Meine Tests am Bus haben gezeigt das ich das LOW-Symbol (=10 V Pegel) 
erreiche wenn ich mit 180 Ohm gegen Masse gehe. Rechnerisch wären das 
also 44mA für die 8V Spannungsabfall über dem Widerstand.

Nun könnte man einfach mit einem NPN schalten, hat dann aber das Problem 
das der dauerhafte 0 Pegel dann auch die Bus-Leitung dauerhaft auf 10V 
zieht. Es bräuchte also noch eine Output-Enable logik, die das nur macht 
wenn etwas über das TTL-Serial Interface gesendet wird. Die andere 
Möglichkeit wäre das Signal senderseitig zu invertieren, sodass im 
Ruhezustand am Bus die 18V (HIGH) anliegen und nur die 0en aufgelegt 
werden.

von Olli Z. (z80freak)


Lesenswert?

Claus schrieb:
> Die 10V/18V runterteilen (R-Teiler 1:2) auf 5V/9V - dann über eine
> Z-Diode (5.1V) auf 0V/4V - dann direkt auf eine 5V-Logik.

Wie soll das denn funktionieren? Die Z-Diode würde ja nur dafür sorgen 
das die Spannung zwischen ihrer Kathode und dem Vorwiderstand nicht über 
5,1V geht. D.h. bei 9V würde sie den Strom nach Masse ableiten, im 
Endeffekt wäre am "Digitalausgang" dann eine 5,1V=HIGH. Bei 5V leitet 
sie nichts mehr ab und das wäre auch ein HIGH.

von H. H. (Gast)


Lesenswert?

Was für ein merkwürdiger Bus ist das denn?

von Olli Z. (z80freak)


Lesenswert?

Wolfgang schrieb:
> Bei so einem unsymmetrisch verschliffenen Signal ist es wahrscheinlich
> besser, wenn die Schaltschwellen für L->H und H-L unterschiedlich
> liegen. Da hilft ein Schmitt-Trigger um das Timing im pegelgewandelten
> Ausgangssignal wieder vernünftig zu reproduzieren. Die Zeitauflösung vom
> Screenshot ist leider etwas mager, um irgendwelche Details abzulesen.

Ja, ich denke auch der Schmitt-Trigger oder ein mit OpAmp (LM393) 
aufgebauter Komparator wäre hier das Richtige Mittel. Es würde ja 
reichen oberhalb von 14V alles als HIGH und unterhalb alles als LOW zu 
erkennen. Hysterese müsste vermutlich nicht sein, würde aber sicher das 
Ausgangssignal stabilisieren.

Ein 7414 könnte hier vermutlich schon genügen, der wäre gleich auch 
invertierend was für den TTL-Eingang gut ist. Dann schaue ich mal wie 
ich den für meine zwei Schaltschwellen um 14V rum dimensionieren müsste.

von Olli Z. (z80freak)


Lesenswert?

H. H. schrieb:
> Was für ein merkwürdiger Bus ist das denn?

Ein Viessmann 2-Draht-Bus aus den 90ern, intern zwischen Regelung und 
Leistungsteil.

von H. H. (Gast)


Lesenswert?

Olli Z. schrieb:
> H. H. schrieb:
>> Was für ein merkwürdiger Bus ist das denn?
>
> Ein Viessmann 2-Draht-Bus aus den 90ern, intern zwischen Regelung und
> Leistungsteil.

Ach so, das ist die Verlängerung von diesem Thread:

Beitrag "Viessmann Eurola OC mit 2-Drahtbus nachrüsten"

von Olli Z. (z80freak)


Lesenswert?

H. H. schrieb:
> Olli Z. schrieb:
>> H. H. schrieb:
>>> Was für ein merkwürdiger Bus ist das denn?
>>
>> Ein Viessmann 2-Draht-Bus aus den 90ern, intern zwischen Regelung und
>> Leistungsteil.
> Ach so, das ist die Verlängerung von diesem Thread:
> Beitrag "Viessmann Eurola OC mit 2-Drahtbus nachrüsten"
Es ist ein anderer Weg, weil ich beim EXTERNEN 2-Draht-Bus nicht weiter 
komme (interessiert niemand, bzw. gibt keine Erfahrungswerte hier).

von H. H. (Gast)


Lesenswert?

Kannst du nicht nachsehen wie Viessman das gelöst hat, hardwaremäßig.

von Wolfgang (Gast)


Lesenswert?

Olli Z. schrieb:
> Der Bus hat einen Ruhepegel von 18V. Dieser wird vermutlich irgendwo
> durch einen Pullup erzeugt.

Nein, dann nicht die fallenden Flanken rund, sondern die steigenden.

von Wolfgang (Gast)


Lesenswert?

Olli Z. schrieb:
> Es würde ja reichen oberhalb von 14V alles als HIGH und unterhalb alles
> als LOW zu erkennen.

Damit handelst du dir wegen der unterschiedlichen Zeitkonstanten der 
Flanken für steigende und fallende Flanken unterschiedliche 
Verzögerungen in dem rekonstruierten Signal ein. Wenn das egal ist, 
kannst du natürlich einen einfachen Komparator verwenden.

von Johannes F. (Gast)


Lesenswert?

Olli Z. schrieb:
> Wie soll das denn funktionieren? Die Z-Diode würde ja nur dafür sorgen
> das die Spannung zwischen ihrer Kathode und dem Vorwiderstand nicht über
> 5,1V geht. D.h. bei 9V würde sie den Strom nach Masse ableiten, im
> Endeffekt wäre am "Digitalausgang" dann eine 5,1V=HIGH. Bei 5V leitet
> sie nichts mehr ab und das wäre auch ein HIGH.

Claus meinte es so:
1
18V/10V ——— R ——•————|<—————•——— 4V/0V
2
                |    Z 5V1  |
3
                R          10R
4
                |           |
5
               ——— GND     ———

von Olli Z. (z80freak)


Lesenswert?

H. H. schrieb:
> Kannst du nicht nachsehen wie Viessman das gelöst hat, hardwaremäßig.

Könnte man, dazu müsste ich die VR18 aber ausbauen und hätte 
währenddessen keine Heizung. Da wäre es besser eine alte Platine an der 
Hand zu haben..

von Claus (Gast)


Lesenswert?

Johannes F. schrieb:
> Olli Z. schrieb:
>> Wie soll das denn funktionieren? Die Z-Diode würde ja nur dafür sorgen
>> das die Spannung zwischen ihrer Kathode und dem Vorwiderstand nicht über
>> 5,1V geht. D.h. bei 9V würde sie den Strom nach Masse ableiten, im
>> Endeffekt wäre am "Digitalausgang" dann eine 5,1V=HIGH. Bei 5V leitet
>> sie nichts mehr ab und das wäre auch ein HIGH.
>
> Claus meinte es so:
> 18V/10V ——— R ——•————|<—————•——— 4V/0V
>                 |    Z 5V1  |
>                 R          10R
>                 |           |
>                ——— GND     ———

Ich habt natürlich beide recht: Der Schaltungsteil rechts der Z-Diode 
muss sicherstellen, dass die Z-Diode immer bestromt ist. Entweder das 
leistet der Eingang der empfangenden Schaltung, oder da muss der 
zusätzliche "10R" Widerstand mit rein.

Danke Johannes: Mit "10R" ist die Idee hinter der Schaltung um 100% 
besser beschrieben.

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

Johannes F. schrieb:
> Claus meinte es so:
1
18V/10V ——— R ——•————|<—————•——— 4V/0V
2
                |    Z 5V1  |
3
                R          10R
4
                |           |
5
               ——— GND     ———

Ok, das hatte ich wirklich falsch verstanden, so funktioniert es. Habe 
es mit R=1k aufgebaut, allerdings eine 4,7V Z-Diode verwendet, nur zur 
Sicherheit...
Bekomme so ein sauberes TTL-Signal mit entsprechend tiefen (unter 20%) 
LOW Flanken.

Das konnte ich direkt auf das TTL-Serial -> USB Interface geben (RX) und 
mit der Einstellung 1200-8E1 bekam ich sofort die Bytewerte ins 
Terminal. Da ist es dann auch egal ob der Ruhepegel logisch "0" oder "1" 
ist.

Dann fehlt mir jetzt nur noch die Sendeseite. Hier müsste ich ja mit 
Open-Collector arbeiten, d.H. nur die LOW-Pulse sind zu erzeugen. Die 
Leitung ist ja intern auf 18V gezogen und ich hatte ja bereits über 
einen Poti den Widerstandswert ermittelt der notwendig ist um die 
Leitung auf 10V zu "ziehen", was dem logischen "0" entspricht. Das waren 
ca. 180 Ohm, wobei dann ca. 44 mA Strom fließen.

Könnte man das nicht ganz leicht über einen PNP mit entsprechendem 
Widerstand im Emitter lösen? Der BC557 verträgt bis zu 100mA 
Kollektorstrom.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Olli Z. schrieb:
> Das konnte ich direkt auf das TTL-Serial -> USB Interface geben (RX) und
> mit der Einstellung 1200-8E1 bekam ich sofort die Bytewerte ins
> Terminal. Da ist es dann auch egal ob der Ruhepegel logisch "0" oder "1"
> ist.

Das ist soetwas von überhaupt nicht egal. Das "TTL-Seriel -> USB" 
Interface braucht als Ruhepegel ein H, damit sich das Start Bit mit 
seinem L-Pegel davon unterscheidet. Du hast Glück gehabt - sonst nix.

von Claus (Gast)


Lesenswert?

Olli Z. schrieb:
> Dann fehlt mir jetzt nur noch die Sendeseite. Hier müsste ich ja mit
> Open-Collector arbeiten, d.H. nur die LOW-Pulse sind zu erzeugen. Die
> Leitung ist ja intern auf 18V gezogen und ich hatte ja bereits über
> einen Poti den Widerstandswert ermittelt der notwendig ist um die
> Leitung auf 10V zu "ziehen", was dem logischen "0" entspricht. Das waren
> ca. 180 Ohm, wobei dann ca. 44 mA Strom fließen.

Zieh die 18V/10V-Leitung über 180 Ohm auf GND, z.B. über einen 
NPN-Transistor. BC547 wär mit zu sehr auf Kante genäht. Ich würde eine 
Nummer 'größer' gehen, z.B. sowas wie BC337, 2N2222, BC140 ...

Basiswiderstand ist klar? Vermutlich brauchst Du aber noch einen 
Inverter in der Basis-Ansteuerung.

von Olli Z. (z80freak)


Lesenswert?

Gerald K. schrieb:
> - Telegramme Zentrale - Melder: Absenkung der Spannung durch Zentrale
> - Telegramme Melder - Zentrale: Stromerhöhung durch Melder
> H: < 100μA pro Melder
> L: > 10mA pro Melder

Wie würde sich das denn auf dem Oszilloskop darstellen? Nicht das ich 
mit meiner Messung lediglich eine Kommunikationsrichtung erkenne?

Zum erkennen eines Teilnehmers an einem Shared-Bus habe ich sonst immer 
einen 100 Ohm Widerstand vor dem Abzweig zum Teilnehmer eingeschliffen 
um damit einen Spannungsabfall zu provozieren der sich von den anderen 
Teilnehmern unterscheidet.

Mit einem solchen Widerstand in der Leitung müsste ich ja auch eine 
indirekte Strommessung durchführen können. Dieser verhält sich dann 
entweder analog zur Spannung oder nicht. Das müsste die Frage doch 
beantworten?

: Bearbeitet durch User
von Olli Z. (z80freak)


Lesenswert?

Ich glaube inzwischen eher das es sich hier um den besagten Meter-Bus 
handelt.

Ich kann einem an dem Bus angeschlossenen Bedienteil eindeutig 
Botschaften über den Bus senden auf die es reagiert, z.B. mit einer 
Temperaturanzeige im Display. Die Botschaften habe ich zuvor vom 
arbeitenden Bus mit dem RX-Pegelwandler ermittelt. Das Bedienteil 
verfügt über ein LCD-Display mit Hintergrundbeleuchtung, besitzt aber 
auch eine eigene Stromversorgung mittels Batterien, funktioniert auch 
ohne Bus-Anschluss, jedoch dann auch ohne Hintergrundbeleuchtung des 
Displays. Diese geht an, sobald ich mind. 10V auf den Bus lege.

Mit dem weiter oben gezeigten Pegelwandler habe ich somit die 
Spannungsabsenkung eines Meter-Bus-Master simuliert. Nur die Antwort des 
Slave kann ich nicht lesen, da hierzu eine Stromabsenkungserkennung 
notwendig ist und da fehlt mir gerade die Idee wie man dieses 
detektieren und in ein Binärsignal wandeln könnte. Leider habe ich für 
mein DSO keinen Stromwandler-Tastkopf. Ich werde es mal mit einem 
niederohmigen Widerstand, zwei Messspitzen und einer 
Differenz-Berechnung dieser versuchen, bin aber noch wenig optimistisch 
das ich hier was sinnvolles erkenne.
So oder so denke ich das es einfacher ist mal auf Gut-Glück einen M-Bus 
/ TTL (oder USB) Adapter zu besorgen. Für Meter-Bus Interfaces gibt es 
ja einige spezialisierte Chips von TI und ON.

von Achim M. (minifloat)


Lesenswert?

Olli Z. schrieb:
> Nur die Antwort des Slave kann ich nicht lesen, da hierzu eine
> Stromabsenkungserkennung notwendig ist und da fehlt mir gerade die Idee

Ich würde kurzerhand einen Stromspiegel zwischen Bedienteil und die 18V 
hängen.

Mit ungleichen Emitterwiderständen lässt sich der Strom dann auf einen 
proportionalen Strom nach GND abbilden. Wie der einfache 
Bipolar-Stromspiegel 
https://de.wikipedia.org/wiki/Stromspiegel#Beispiele nur eben mit PNP 
gebaut.

Den gespiegelten runterskalierten Strom lässt man über einen Widerstand 
laufen, die Spannung da dran kann Massebezogen ausgewertet werden.

Edit: brauchst halt 18.5V oder 19V zu Beginn, sollte aber kein Problem 
sein.

mfg mf

: Bearbeitet durch User
von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

Ich habe jetzt etwas rumgesucht um einen M-Bus Adapter für USB oder 
wenigstens TTL zu finden, jedoch war praktisch alles was hier angeboten 
wird nur über China verfügbar. Da bin ich auf das OpenSource-Projekt 
hier gestoßen: 
https://gitlab.com/jm_wtal/mbus-usb-converter/-/tree/master/
die einen M-Bus Pegelwandler mit Transistoren aufgebaut haben. Den Teil 
des Wandler-Schaltplans habe ich hier als Grafik mal eingefügt.

Da ich alle Bauteile zuhause hatte habe ich das flux mal auf einem 
Breadboard nachgebaut und tatsächlich kann ich nun auch Antworten von 
meinem Bedienteil sehen!
Dazu muss man natürlich Master "spielen" und die entsprechenden Anfragen 
senden, denn von sich aus dürfen M-Bus Slaves ja nichts auf den Bus 
senden.

Einen kleinen Nachteil hat die Schaltung dennoch, sie ist wohl auf die 
M-Bus typischen 36V ausgelegt, mein Viessmann M-Bus hat jedoch nur 18V. 
Und die Schaltung arbeitet rein als Master (Spannungsabsenkung beim 
senden, Stromabtastung beim empfangen) und lässt sich nicht einfach 
umkehren, wenn man Slave sein will.

Ich suche jetzt mal weiter, es gibt hier und da ganz interessante 
Interfaces für andere Geräte wie z.B. das 3013272 für den "Diehl Sharky 
775" (siehe Foto). Da ist sogar ein TSS721A drauf, der sollte ja 
Bidirektionales M-Bus können.

Vermutlich lässt es sich auch rein über Transistoren aufbauen, jedoch 
habe ich die Schaltung aus dem OpenSource-Projekt nicht in der Tiefe 
verstanden als ich daraus eine Slave-Schnittstelle umkonstruieren 
könnte.

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.