Forum: Mikrocontroller und Digitale Elektronik Pegelwandler für Raspberry PI


von Michael R. (greenmike)


Lesenswert?

Hallo,

kurze Vorgeschichte zu meinem Projekt. Ich habe den Smart Meter über die 
Kundenschnittstelle ausgelesen. Hab ein eigenes Python Programm 
entwickelt und auch veröffentlicht. Leider benötigt man dazu einen 
Pegelwandler der nur aus China geliefert werden kann. Dieser 
Pegelwandler hat zusätzlich noch viele Funktionen die nicht benötigt 
werden. Daher im Verhältnis relativ teuer.

Meine Frage ist kann man am Raspberry Pi ein Serielles Signal einlesen 
an den GPIO Pins (14 u. 15)oder auch über USB.

Die Spezifikation von M-Bus ist 36V = Logisch 1 und 24V = Logisch 0. Ich 
möchte die Daten der Schnittstelle nur empfangen und nichts senden, 
daher benötige ich nur RX.

Ich stehe etwas auf dem Schlauch bei der Dimensionierung einer 
Schaltung. Am Anfang dachte ich auf einen einfachen Spannungsteiler mit 
R1= 10k und R2= 1k . Das ergibt dann bei einer Logisch 1 ca. 3,3V. Wenn 
die Spannung bei 24V ist 2,2V also unbrauchbar.

Es müsste eine Transistorschaltung her oder? Aber ich weiß nicht wie ich 
diese Dimensionieren soll. Bzw wie sind die Pegel beim Raspberry Pi gibt 
es Definierte Bereiche für logisch 1 u. 0.

Hoffe es kann mir jemand helfen.

Mein Projekt ist unter der Website michaelreitbauer.at erreichbar.

LG Michael

von HildeK (Gast)


Lesenswert?

Michael R. schrieb:
> Am Anfang dachte ich auf einen einfachen Spannungsteiler mit
> R1= 10k und R2= 1k . Das ergibt dann bei einer Logisch 1 ca. 3,3V. Wenn
> die Spannung bei 24V ist 2,2V also unbrauchbar.

24V Z-Diode vor den Spannungsteiler. Der sieht dann für HIGH 12V und LOW 
0V und der Teiler reduziert dann die 12V auf 3.3V bei HIGH.
Alternativ: Komparator mit deutlich mehr Aufwand.

Sind das nicht ungewöhnliche Pegel für einen Logikausgang? Ich kenne 
mich mit den Smartmetern nicht aus, aber das wundert mich etwas.

von DerEgon (Gast)


Lesenswert?

Michael R. schrieb:
> Ich
> möchte die Daten der Schnittstelle nur empfangen und nichts senden,
> daher benötige ich nur RX.

MBus-Geräte senden nicht ohne Aufforderung eines MBus-Masters. Wenn Du 
Daten eines MBus-Gerätes auslesen willst, brauchst Du einen MBus-Master. 
Und der wiederum braucht RX und TX.

Ein Pegelwandler, der von RS232-Pegel auf MBus konvertiert, ist z.B. 
hier Beitrag "Erklärung Schaltung für mBus" beschrieben.

Du brauchst dafür allerdings noch einen zweiten Pegelwandler, um von den 
RX-/TX-Signalen Deines Raspberrys auf RS232-Pegel zu bekommen.

von Michael R. (greenmike)


Lesenswert?

Danke für die schnelle Antwort.

HildeK schrieb:
> Sind das nicht ungewöhnliche Pegel für einen Logikausgang? Ich kenne
> mich mit den Smartmetern nicht aus, aber das wundert mich etwas.

Ich werde es heute bei meinem Smart Meter nochmal nachmessen mit einem 
Multimeter da ich leider kein Oszilloskop habe. Ich habe es schonmal 
gemessen und es war sicher größer 20V. Aber laut Norm sind das die 
Pegel.

von Michael R. (greenmike)



Lesenswert?

Hallo,

das ist kein normaler M-Bus Zähler. Der Smart Meter schickt automatisch 
alle 5 Sekunden die Daten. Ohne das man diese Anfordern muss. Leider 
würde bei dieser Schnittstelle nicht alles nach Norm gemacht.

Im Anhang ist die Beschreibung.

von HildeK (Gast)


Lesenswert?

Michael R. schrieb:
> Ich werde es heute bei meinem Smart Meter nochmal nachmessen mit einem
> Multimeter da ich leider kein Oszilloskop habe. Ich habe es schonmal
> gemessen und es war sicher größer 20V. Aber laut Norm sind das die
> Pegel.

War nur eine nebensächliche Frage, aber mit einem Multimeter wirst du 
wenig sinnvolles messen können.
Ja, ich hab mal gesucht: MBus verwendet wohl die Stromversorgung über 
die selbe Schnittstelle mit den Pegeln HIGH bis 42V und LOW nicht unter 
12V.
Bei dem Bereich ist mein Vorschlag mit der Z-Diode natürlich 
grenzwertig, dann müsste man schon messen, welche Pegel dein Exemplar 
abgibt oder eben doch einen Komparator zwischenschalten.

von Michael R. (greenmike)


Lesenswert?


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


Lesenswert?

Michael R. schrieb:
> Derzeit verwende ich diesen Pegelwandler.
Wenn der zufriedenstellend funktioniert, dann könnte man a) den 
Schaltplan einfach abzeichnen und ihn nachbauen. Bis zur TTL-RS232 sind 
das ja nur ein paar Bauteile.
Oder b) mit dem Oszi mal die Pegel messen und sich selbst was 
ausdenken...

: Bearbeitet durch Moderator
von Zeno (Gast)


Lesenswert?

Beim M-Bus werden die Slaves, wie z.B. Gas oder Wasserzähler, oftmals 
auch durch den Bus selbst mit versorgt. Bedeutet die Slaves sind in 
diesem Sinne nicht selbständig, woraus dann auch die genannten Pegel 
resultieren. Wichtig ist auch noch das die Daten vom Master zum Slave 
durch die Modulation der Versorgungsspannung übertragen werden, während 
die Daten vom Slave zum Server via Modulation des Stromes übertragen 
werden. Das ein einfache Anzapfen via Spannungsteiler und Z-Diode, wie 
von Hilde vorgeschlagen, wird da nicht funktionieren wird.
Ein Verzicht auf TX, wie vom TO vorgeschlagen ist aus 2 Gründen nicht 
möglich. Da an einem Bus bis zu 250 Slaves hängen können, muß der 
gewünschte Slave selektiert werden, was i.d.R. durch Senden einer 
Adresse über den Bus erfolgt. Zweiten muß das Übermitteln der Daten 
initiiert werden, sonst kommt da nichts.

Es loht sich auf alle Fälle mal hier 
https://www.wachendorff-prozesstechnik.de/fileadmin/wp/fileserver/technical_notes/TN_0301_Grundlagen_M-Bus.pdf 
nachzulesen, da ist der M-Bus genau beschrieben.

Ansonsten gibt es hier https://www.m-bus.de/pw1.html einen Pegelwandler 
der mit dem auch die Bereitstellung der Versorgungsspannung 
funktioniert. Die dort dargestellte RS232-Schnittstelle wird die 
klassischen Pegel bereitstellen,also -12V für 1 und +12V für 0. Für 
einen RasPi müßte man also noch einen Pegewandler nachschalten, z.B 
einen MAX232. Damit wäre man schon mal bei TTL-Pegel. Beim Raspi müßte 
man den RX-Eingang noch mit einen Widerstand begrenzen. Allerdings würde 
ich da lieber in einen ordentlichen Pegelwandler für RX und TX 
investieren. Bei mir hat sich diese Schaltung 
https://elektro.turanis.de/html/prj146/index.html bestens bewährt. Der 
aufwand mit 2 FET's und 4 Widerständen hält sich ja auch in Grenzen.

Es scheint auch noch ein fertiges Projekt zu geben, s. hier 
https://pc-projekte.lima-city.de/MBus-Konverter.html.

von DerEgon (Gast)


Lesenswert?

Es scheint ja kein echter MBus zu sein:

Michael R. schrieb:
> das ist kein normaler M-Bus Zähler. Der Smart Meter schickt automatisch
> alle 5 Sekunden die Daten. Ohne das man diese Anfordern muss.

von Hp M. (nachtmix)


Lesenswert?

Für einen experimentellen Aufbau würde ich überhaupt keine galvanische 
Verbindung, also auch keinen Pegelwandler nehmen, sondern einen 
Optokoppler.
Zu gross wäre mir die Gefahr den Raspi z.B. wegen einer fehlenden 
Masseverbindung zu grillen.

2400 Bd kann man damit auch ohne zusätzliche Versorgung machen.

von Michael R. (greenmike)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
> Wenn der zufriedenstellend funktioniert, dann könnte man
ja er funktioniert super
>a) den Schaltplan einfach abzeichnen und ihn nachbauen. Bis zur TTL-RS232 >sind 
das ja nur ein paar Bauteile.

Ich habe schon nach den Bauteilen gesucht hab auch ein Datenblatt 
gefunden wo es beschrieben ist wie es funktioniert und die Schaltung zu 
sehen ist die auf dem Stick verbaut ist. (siehe Anhang FC722)
Leider finde ich den IC nicht zu kaufen.


> Oder b) mit dem Oszi mal die Pegel messen und sich selbst was
> ausdenken...

Am Wochenende wird ein Kollege kommen der ein Oszi hat und dann schicke 
ich Bilder in das Forum.

LG Michael

von Falk B. (falk)


Lesenswert?

Lothar M. schrieb:
> Wenn der zufriedenstellend funktioniert, dann könnte man

c) Das Ding einfach benutzen und glücklich sein.

Wenn man davon nicht Millionen herstellen will, wird es nicht billiger!

von Michael R. (greenmike)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe am Wochenende ein Oszibild (siehe Anhang) von einem Kollegen 
erhalten.

Die Pegel sind 37,6 und 22,0V. Meine Frage kann man das noch mit einer 
Zenerdiode machen ?

LG Michael

von Stefan B. (stefan_b278)


Angehängte Dateien:

Lesenswert?

Zeno schrieb:
> Die dort dargestellte RS232-Schnittstelle wird die
> klassischen Pegel bereitstellen,also -12V für 1 und +12V für 0. Für
> einen RasPi müßte man also noch einen Pegewandler nachschalten, z.B
> einen MAX232. Damit wäre man schon mal bei TTL-Pegel.

Wieso alles doppelt moppeln?
Gleich direkt rein in den RasPi UART mit Optokoppler, in dem speziellen 
Fall mit nur einer Gegenstelle die auch die Spannungsversorgung liefert 
braucht er auch keinen galvanisch getrennten DC-DC-Wandler wie ich ihn 
in meiner Schaltung verwende (siehe Bild).

Da er auch nicht senden braucht kann er auch den unteren Optokoppler und 
noch ein paar Bauteile weglassen (ausprobieren)! Ich würds aber gleich 
als fertige Platine machen (evtl. sogar als passendes RasPi HAT) die 
auch als MBus Master mit Spannungsversorgung fungieren kann.

Hier die simulierte Version von mir:

http://falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWEBOaBmAHAFgOyQ2AGwJhZaREgKFUhZpUCmAtGGAFABOdlWGPNNgCYoIIUPgxJ0yGnYB3AXX5ZCWZVAVLhdNeDAjIWrL35oJGowCUlkJcz6i75EGjvuo0BOyIjzzswsdEQATRgAzAEMAVwAbABdmWMYQ8DT3WA5uf30-IJwaOyE8I3IcVxEiO3NwAvB2MorXSHUanI4AB111R1V1HQh3dnjXBBEhDECiydEIZiFUSbdkcUJkMfpxT0hCAmQW0jRCIVIcBjA4EDCouPjh112xfCUJfjtWbbAVkjBqPiE0CtduVmDBCJASBhkFgEPscFDikgLnZrjEEsZKDoTIIVppuNiKs5KJh1M4cBiaOIepQJm8KWIZmgxgy6YoCbSlDkjNwqbkxEJ+nVqm44FpeY4co4jIojvxXvz1PLpQrapSBU9WYTmq0LCTNABzLV6yWXIY89VuRUW7CzDDwMUWloqpUO1pOgxmJ3K3l6sB1PXKv00X3+o6aRRB1xhj1RwpaHLFPJiHCGeOVXE1RPhppVcCCcHZzEFmkuZUJlztIVaEvVCwCoYAZxAzDaTtbpNEUViDcYXCaaDDLb8NrsuyMADdm20bUPtU46HYkB4YN5fOAJhoY8hKVcImjEslUhBBp92JPc5Hc1LRC4l04vNXi3UY19UxGN44r3TuFvBBvc0UEiwDIMhyNwagBCAEF8oBopsnojhjComp9HysKVAYmhoHgVAfvw6Gbk47BNgRjjQdeEBdj2YrUK4No5AGabVDaBKMdhgE9HK6oDER3CkfhuI6LBcFUIJmHQUJ7DsbYSifkRXRCLRlpiEpNonhwiiKcGNo+iONHBk6PpeuwXSoViei+rM9J6qhjFAA

Schaltung original von hier: 
https://gitlab.com/jm_wtal/mbus-usb-converter
Diese könnte auch funktionieren: 
https://www.packom.net/wp-content/uploads/2021/05/mbus-master-hat-schematic-v1.7f.pdf

von Michael R. (greenmike)


Lesenswert?

Hallo,

danke für die Antwort.

Ich habe vorhin noch eine einfachere Schaltung gefunden.

https://inator.at/?p=1492

Bei der Z-Diode habe ich einfach eine 5,6V + 18V in Serie geschalten. Da 
hatte ich alle Bauteile zuhause.

Ich habe dann alles auf einem Steckbrett zusammengebaut und über eine 
USB TTL Adapter angeschlossen und es hat funktioniert.

Diesen USB Adapter habe ich verwendet. (auf 3,3V Umgelötet)
https://www.reichelt.at/at/de/raspberry-pi-usb-zu-ttl-0-9-m-pl2303hx-rpi-usb-ttl-p150567.html?PROVID=2807&gclid=Cj0KCQjwio6XBhCMARIsAC0u9aHNNt6V6Fcf5vZbpiRMRbfeBCZXX7CbH0Oc3Xxvnjb7wRyLoEkC6mcaApRlEALw_wcB

Gibt es von dem einen Schaltplan? will die Schaltung fertig per USB 
Stick an den Raspberry Pi anschließen.

LG Michael

von Michael R. (greenmike)


Lesenswert?

Hallo nochmal ein Nachtrag von mir ist es mit diesem Chip möglich ?

https://prolificusa.com/app/uploads/2019/06/DS-23181002_PL2303GL.pdf

LG Michael

von Wolfgang (Gast)


Lesenswert?

Zeno schrieb:
> Ein Verzicht auf TX, wie vom TO vorgeschlagen ist aus 2 Gründen nicht
> möglich. Da an einem Bus bis zu 250 Slaves hängen können, muß der
> gewünschte Slave selektiert werden, was i.d.R. durch Senden einer
> Adresse über den Bus erfolgt. Zweiten muß das Übermitteln der Daten
> initiiert werden, sonst kommt da nichts.

Das würde Zweiwegkommunikation voraussetzen, die hier aber nicht gegeben 
ist.
Das Gerät sendet seine Daten selbständig alle 5s.

In der Schnittstellenbeschreibung des SmartMeters auf S.4 steht:
"Diese Schnittstelle ermöglicht nur eine Einwegkommunikation, indem
sie Daten alle fünf Sekunden an ein angeschlossenes Gerät sendet."

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.