Forum: Projekte & Code 3-Phasen Leistungsmessung mit STM32


von Alex H. (alex93)


Angehängte Dateien:

Lesenswert?

Hallo,
möchte hier mein kleines Projekt vorstellen: Eine 
Strom-/Spannungs-/Leistungsmesser für 3 Phasen Wechselstrom. Das ganze 
läuft mit einem STM32 MCU der die Wirk-, Blind- und Scheinleistung 
berechnen soll.

Aufbau
Die Spannungsmessung wird über einen ISO224 (galv. getrennter 
Verstärker) realisiert, der die Spannung der drei Phasen über einen 
Spannungsteiler misst und galvanisch trennt. Der Strom wird über drei 
ACS723 (galv. getrennter Hall-Currentsensor) von Allegro gemessen, der 
hat ein Ausgangssignal von 100mV/A. Die Spannungs- und Stromsignale 
werden mittels ADS7945/46 gesampled und über SPI vom einem STM32L072 
(192k Flash, 20k RAM) verarbeitet.
Um die Phasenverschiebung zwischen Spannung und Strom möglichst genau 
messen zu können habe ich zusätzlich noch jeweils einen Komparator (mit 
Hysterese) verwendet, der in den Nulldurchgängen schaltet. Über einen 
schnellen Optokoppler werden die Signale dann direkt an den STM 
geleitet. Ich möchte dann die Phasenverschiebung mittels Interrupt und 
Timer messen. Für den Strom hab ich dasselbe an den Ausgängen der 
ACS732's angehängt.

Zusätzlich hat die Platine noch einen Bus-Anschluss um die 
Strom/Spannungs- und Leistungsdaten dann an ein anderes Board 
weiterzuleiten, welches ein LC-Display und Bedienelemente hat.
Weiters hab ich noch 30 Ausgänge für LEDs eingebaut um mittels dreier 
"10-Fach Bargraph" die Belastung direkt am Modul anzeigen zu können.

Eingebaut wird das Ganze in ein "BC" Hutschienengehäuse von Phönix 
(siehe Bilder)
Das Layout hab ich auf eine 4 Lagen Platine geroutet.

Ich würde mich über positive Kritik und Tipps für Verbesserungen freuen. 
Falls ihr Fehler findet oder bei bestimmten Dingen bedenken habt dürft 
ihr mich auch gerne darauf aufmerksam machen. Wenn ich mir dann sicher 
bin, dass ich keine Fehler mehr in der Schaltung haben werde ich eine 
Platine bestellen und beginnen die Software zu schreiben.

mfg Alex

von Flo (Gast)


Lesenswert?

Servus,

hab nur mal grob drüber geschaut, mir sind folgende Punkte grad 
aufgefallen:

- wo ist denn die Spannungsversorgung der Elektronik?

- Warum externe ADC? Nicht die internen vom STM?

- Warum die galvanische Trennung?

- Wenn galvanische Trennung und externe ADC, dann wären die ADC auf 
HV-Seite sinnvoller und nur SPI über Opto ziehen

- Sicherheitsabstände auf HV-Seite fehlen

- Evtl. besser eine PCB mit Messung und HV zu machen und eine mit Logik 
und Anzeige? Dann wäre auch die Baugröße kleiner

- Schnittstellen nach Außen?

- SCH für Anzeigen fehlt noch? Wäre evtl. über Decoder universeller und 
einfacher?

Viele Grüße,
Flo

von temp (Gast)


Lesenswert?

Was ich mich bei diesem Projekt frage ist, warum steckt man so viel 
Energie in etwas das man für ca. 100€ fix und fertig kaufen kann? Klar 
beim Basteln steht auch der Spaß im Vordergrund. Auch eine benötigte 
Eigenschaft die man  schlecht kaufen kann können ein trifftiger Grund 
sein. Selbst wenn es trifftige Gründe gibt für einen 
Selbstbau/Selbstentwicklung, es scheint mir etwas sportlich zu werden 
auch nur annähernd die Parameter der käuflichen Geräte zu erreichen. 
(z.B. SDM630) Die ACS Stromsensoren sind sicher nicht schlecht aber 
Leistungen im Bereich von ein paar Watt sind damit nicht mehr messbar. 
Nach oben hin wird es aber auch knapp. Wenn die 100mV/A haben ist bei 25 
A Spitzenstrom Schluss an 5V. Das sind gerade mal 17,7A effektiv. Bei 
Sinus wohlgemerkt. Stromkurven mit höheren Spitzen gehen noch schneller 
in die Begrenzung.
Ich frage mich ernsthaft warum du nicht die relativ preiswerten Chips 
verwendest die speziell auf diese Anforderungen hin hergestellt werden. 
einen genauen Typ habe ich jetzt nicht im Kopf, aber eine kurze Suche 
hier im Forum hilft garantiert.
Wenn du einen bestimmten Einsatzzweck vor hast den du uns noch nicht 
verraten hast kann das ganze noch Sinn machen, oder wenn es dir ein 
Erfolgserlebniss verschafft. Das andere dem etwas positives abgewinnen 
können sehe ich aber nicht.

von Alex H. (alex93)


Angehängte Dateien:

Lesenswert?

Danke für eure Antworten :)

Flo schrieb:
> wo ist denn die Spannungsversorgung der Elektronik?

Im zweiten Bild auf der Linken Seite J3 ist der Anschluss für das 12V 
Netzteil. Im unteren Bereich sind die Spannungsregle, für 12V->5V ein 
TPS709B50, für die 3,3V ein S-812-33 und für die Galv. getrennte Seite 
ein RB1212S DC/DC Converter von Recom.

Flo schrieb:
> Warum externe ADC? Nicht die internen vom STM?

In diesem Fall weil die ISO224's eine Symmetrische Ausgangsspannung 
liefern und ich die soweit ich weiß nicht mit dem STM auswerten kann. 
Kleiner Nebeneffekt die ADCs haben 14Bit statt nur 12 (wie die 
internen), auch wenn mir das nicht viel bringt.

Flo schrieb:
> Wenn galvanische Trennung und externe ADC, dann wären die ADC auf
> HV-Seite sinnvoller und nur SPI über Opto ziehen

Wäre auch eine Möglichkeit, aber dann sollte die Galv. getrennte 
Versorgung der ADCs sauber sein und ich vertraue den eingesetzten DC/DC 
Converter nicht ganz, weil ich damit nicht so gute EMV-Erfahrungen 
gemacht habe.

Flo schrieb:
> Warum die galvanische Trennung?

Damit ich mir keine Sorgen machen muss wenn ich mit angesteckten 
Programmierstecker meine Software einspiele und um die LED-Anzeige in 
späterer folge ohne Bedenken berühren zu können. Zusätzlich möchte ich 
mit dem 12V Netzteil auch noch andere Komponenten versorgen unter 
anderem ein Bedienpanel und das wäre sonst nicht so möglich, denke ich.

Flo schrieb:
> Sicherheitsabstände auf HV-Seite fehlen

OK hier hast du wohl recht, ich hab nachgelesen man sollte zwischen L/N 
und Niederspannungsseite mindestens 6mm abstand haben, ich hab nur ca 
2,8 - 3mm 
(https://www.mikrocontroller.net/articles/Leiterbahnabst%C3%A4nde). Hier 
werde ich die Leiterbahnen, bei denen es knapp wird, auf einen 
Innen-Layer verlegen.

Flo schrieb:
> Schnittstellen nach Außen?

Habe ich eine Busschnittstelle am J3 nach draußen geführt (Bild 2 links 
oben). Damit kann ich alle meine Daten abrufen.

Flo schrieb:
> SCH für Anzeigen fehlt noch? Wäre evtl. über Decoder universeller und
> einfacher?

Ich könnte einen IO-Expander mit I2C verwenden, dann hätte ich weniger 
Leitungen zur Anzeige, jedoch hat der Controller so viele Pins die ich 
ansonsten nicht nutze und so spar ich mir die Implementierung der 
Ansteuerung für den Expander. Mit einem 4 zu 16 Decoder könnte ich auch 
arbeiten aber: Selbes Argument wie beim I2C und ich spar mir den 
zusätzlichen IC auf kosten eines Kabels mit mehr Polen. Jedoch hab ich 
ein Flachbandkabel zur Verfügung und die Leitungslänge beträgt auch nur 
ein paar cm.

temp schrieb:
> Was ich mich bei diesem Projekt frage ist, warum steckt man so viel
> Energie in etwas das man für ca. 100€ fix und fertig kaufen kann? Klar
> beim Basteln steht auch der Spaß im Vordergrund. Auch eine benötigte
> Eigenschaft die man  schlecht kaufen kann können ein trifftiger Grund
> sein. Selbst wenn es trifftige Gründe gibt für einen
> Selbstbau/Selbstentwicklung, es scheint mir etwas sportlich zu werden
> auch nur annähernd die Parameter der käuflichen Geräte zu erreichen.
> (z.B. SDM630)

In gewisser weiße hast du recht jedoch hat der von dir vorgeschlagene 
SDM630 nur eine MODBUS Schnittstelle und die kann ich ohne größeren 
Aufwand nicht wirklich in meine µC's einbauen. Sicher spielt auch der 
Reiz am Selbstbau etwas mit.

temp schrieb:
> Die ACS Stromsensoren sind sicher nicht schlecht aber
> Leistungen im Bereich von ein paar Watt sind damit nicht mehr messbar.
> Nach oben hin wird es aber auch knapp. Wenn die 100mV/A haben ist bei 25
> A Spitzenstrom Schluss an 5V. Das sind gerade mal 17,7A effektiv. Bei
> Sinus wohlgemerkt. Stromkurven mit höheren Spitzen gehen noch schneller
> in die Begrenzung.

Ich hab mit das Ziel gesetzt ca. 10kW messen zu können, größere Lasten 
werde ich voraussichtlich sowieso nicht anhängen und da sollten die ACS 
ausreichen. Die Messung von geringen Lasten muss ich mir dann bei den 
ersten Versuchen anschauen ich kann so noch nicht abschätzen was der 
geringste vernünftig messbare Strom sein wird, aber ich denke das 
dasselbe Problem auch bei allen anderen Messmethoden auftritt?

temp schrieb:
> Ich frage mich ernsthaft warum du nicht die relativ preiswerten Chips
> verwendest die speziell auf diese Anforderungen hin hergestellt werden.
> einen genauen Typ habe ich jetzt nicht im Kopf, aber eine kurze Suche
> hier im Forum hilft garantiert.
> Wenn du einen bestimmten Einsatzzweck vor hast den du uns noch nicht
> verraten hast kann das ganze noch Sinn machen, oder wenn es dir ein
> Erfolgserlebniss verschafft. Das andere dem etwas positives abgewinnen
> können sehe ich aber nicht.

Ja ich kenne die Leistungsmesschips von Analog Devices (z.B. ADE7858), 
jedoch ist die Konfiguration und Auswertung von diesen Chips mMn auch 
nicht ganz trivial. Vielleicht werde ich so einen Chip in der V2 meiner 
Platine verwenden.

@Flo Ich hab die SCH von der Anzeige-Platine auch noch angehängt, ist 
aber nicht sehr aufregend ;)

Danke nochmals für eure Tipps!

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Alex H. schrieb:
> hat der von dir vorgeschlagene SDM630 nur eine MODBUS Schnittstelle und
> die kann ich ohne größeren Aufwand nicht wirklich in meine µC's
> einbauen.

Welcher größere Aufwand? Modbus über RS485 braucht nur eine 
RS485-Schnittstelle, die Software dafür ist ziemlich simpel.

von temp (Gast)


Lesenswert?

Alex H. schrieb:
> In gewisser weiße hast du recht jedoch hat der von dir vorgeschlagene
> SDM630 nur eine MODBUS Schnittstelle und die kann ich ohne größeren
> Aufwand nicht wirklich in meine µC's einbauen.

Ich schätze mal der Entwicklungsaufwand für dein Projekt ist ca. 30mal 
so groß wie die Implementierung der Modbusabfragen an den Sdm630. Dafür 
findest du auch Code im Netz.
Was höchstens nochmal von Bedeutung ist, wäre eine Art Broadcast wenn 
mehrere weitere Geräte die Informationen benötigen. Dafür kann man dann 
CAN verwenden oder ein selbstgestricktes serielles Protokoll was die 
Daten zyklisch sendet. Der Aufwand dafür ist ein einziger kleiner µC mit 
einmal RS485 und einer weiteren Schnittstelle deiner Wahl. Da hast du 
dann immer noch eine Spielwiese wenn nötig. Und hast mehrerer Fliegen 
mit einer Klappe geschlagen. Einmal hast du ein industriell gefertigtes 
Gerät welches sogar ein deutscher Händler vertreibt für relativ kleines 
Geld. Alle Sicherheitsfragen und mechanischen Aspekte sind damit gelöst. 
Du kannst dich um die Hardware/Softwarezwischenschicht kümmern die das 
Messgerät mit deinen weiteren µCs verbindet und bewegst dich damit auf 
relativ ungefährlichen Terrain.

von Martin (Gast)


Lesenswert?

Guten Tag,

Zwei Hinweise zu den Hallsensoren, vielleicht helfen sie dir. Meiner 
Erfahrung nach ist es sehr wichtig wenig Rauschen in der 
Spannungsversorgung zu haben um kleinere Ströme überhaupt sinnvoll zu 
erfassen. Vielleicht wäre eine Optimierung der Versorgung und eine 
Filterung ein Zugewinn für dich.

Außerdem habe ich gerade bei kleinen Strömen das Rauschen stark messen 
können, es hilft etwas wenn unter dem Hallsensor keine Leiterbahnen 
sind, dazu steht auch etwas im Datenblatt.


Gruß,
Martin

von guest (Gast)


Lesenswert?

Sowas gab es doch hier erst vor kurzem mit deutlich geringerem Aufwand
Beitrag "piMeter - Raspberry Pi Smartmeter"

von Alex H. (alex93)


Lesenswert?

Ich hab mir das Modbus Protokoll jetzt einmal genauer angesehen und es 
ist tatsächlich sehr einfach zu implementieren, ich muss es mit 
Modbus/TCP oder Profinet verwechselt haben.
Ich werde jetzt entweder
 - das vorgeschlagene SDM630 Modul (ca. 140€ bei "stromzähler.eu")
 - oder das Siemens Sentron PAC3100 (ca. 250€ bei Conrad)
Die RS485 Schnittstelle werde ich auf meiner anderen Platine integrieren 
und somit dürfte das die einfachste Lösung sein.

Danke nochmals für den Hinweis!

mfg Alex

von Michel M. (elec-deniel)


Lesenswert?

...zum Vergleich prof. Smart Meter

mit PLC Powerline-Anschluss
und "Testvorführung"

https://www.youtube.com/watch?v=wfLoiwe1fgA

: Bearbeitet durch User
von timertick_t (Gast)


Lesenswert?

Autor: temp (Gast), fragte sich am Datum: 20.01.2019 22:56;
>Was ich mich bei diesem Projekt frage ist, warum steckt man so viel
>Energie in etwas das man für ca. 100€ fix und fertig kaufen kann?

Weil man es kann! Weil man dabei etwas lernt. Weil es cool ist und man 
es vielleicht mal bei einem Arbeitgeberwechsel als Referenz vorzeigen 
kann womit man sich in der Freizeit beschäftigt, während andere 
stattdessen Fußball gucken.

Typisch deutsche Miesepetermentalität.

von timertick_t (Gast)


Lesenswert?

@Autor: Alex H. (alex93)

Probier mal libmodbus. Bei mir hat libmodbusTCP nach geschätzt 15min 
funktioniert. RTU mit nem SDM120 - ich hatte das Fork mit der Benutzung 
der I/O-Leitungen des Raspi, dauerte ne Stunde - wegen 'nem 
Hardwarefehler.

von temp (Gast)


Lesenswert?

timertick_t schrieb:
> Weil man es kann! Weil man dabei etwas lernt.
> Typisch deutsche Miesepetermentalität.


Ach da hat wohl mal wieder einer irgendwo einen tollen Spruch 
aufgeschnappt den er cool findet. Der hat aber auch schon so einen 
langen Bart dass es nur peinlich ist den zu wiederholen.

Außerdem hat Alex nicht das Problem nur Spaß haben zu wollen und was zu 
lernen, sondern die Leistungsmessung ist Teil einer 
Gesamtaufgabenstellung. Und wie er selbst schreibt, hat er der 
Diskussion hier auch entnommen, dass er die Komplexität der 
Modbuskommunikation hier komplett falsch eingeschätzt und überbewertet 
hat. Bisher war der Thread für dieses Forum erstaunlich sachlich 
verlaufen. Allerdings bist du auf dem besten Weg das wieder in Richtung 
Standard zu verschieben.
Am besten wir sparen uns eine weitere Diskussion um das Thema.

timertick_t schrieb:
> Probier mal libmodbus. Bei mir hat libmodbusTCP nach geschätzt 15min
> funktioniert. RTU mit nem SDM120 - ich hatte das Fork mit der Benutzung
> der I/O-Leitungen des Raspi, dauerte ne Stunde - wegen 'nem
> Hardwarefehler.

Hier war nirgends von einem Raspi die Rede. Alex will, dass seine 
Controller über die Leistungsdaten verfügen. In dem Umfeld würde wohl 
keiner auf die Idee kommen noch so einen Klotz wie den Raspi dazwischen 
zu schalten für ein paar popelige Byte UART Kommuinikation.

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.