Forum: Mikrocontroller und Digitale Elektronik Strommessung mit dem ACS712 und dem ESP32: Fragen zur Beschaltung und der Messgenauigkeit


von Johannes B. (groovycat)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte den Effektivwert eines Wechselstroms potentialfrei im
230V-Netz messen. Dazu habe ich mir den Hallsensor ACS712 für einen
Strombereich von -20A bis +20A herausgesucht. Der Ausgang liefert eine
zum Strom proportionale Spannung im Bereich von 0 bis 5V.
Der ESP32 verfügt über einen AD-Wandler mit einer Auflösung von 12 Bit.
Der Spannungsbereich des ADC bewegt sich zwischen 0 bis 1V und kann auf
bis zu 3,3V erhöht werden.
Im Datenblatt des ACS712 ist eine Schaltung mit einem Spannungsteiler
aufgeführt, um die Ausgangsspannung auf einen kleineren Bereich
herunterzuteilen. Dabei ergaben sich für mich folgende Fragen:

1. In der im Anhang aus dem Datenblatt angehängten Schaltung sind zwei
Widerstände R_f = 2kOhm und R_1 = 10KOhm als Spannungsteiler enthalten.
Es ergibt sich also eine neue Ausgangsspannung für den ADC von

U_adc = U_out * R_1 / (R_1 + R_f) = 5V * 10kOhm / (2kOhm + 10kOhm) =
4,167V

Im Datenblatt ist die Rede von einer heruntergeteilten Spannung von
3,3V. Warum sind die Widerstände dann so gewählt, dass sich maximal
4,167V ergibt?

2. Ich nehme an, dass die Diode und der Kondensator nach dem
Spannungsteiler zur Gleichrichtung und Glättung gedacht sind? Wenn ja,
wäre dann 10nF für den Kondensator ein guter Wert?

3. Der ACS712 hat eine Empfindlichkeit von 100mV/A. Angenommen ich teile
die Ausgangsspannung von 0 bis 5V auf 0 bis 1V für den ADC herunter,
dann müsste sich doch folgende Auflösung ergeben:

1V / 2^12 = 1V / 4096 = 0,000244V = 0,244mV (Auflösung ADC)
100mV/A / 5 = 20mV/A  (Neue Empfindlichkeit nach Spannungsteiler)
0,244mV * 1A / 20MV = 0,0122A = 12,2mA (Auflösung Strom)

Da ich mindestens eine Auflösung von 50mA brauche, würde ich theoretisch
im Rahmen liegen. Kann das jemand bestätigen?


Vielen Dank im Voraus
Johannes

: Bearbeitet durch User
von apollo2mond (Gast)


Lesenswert?

Hi,
ja ich kann bestätigen, dass das NICHT stimmt und gebe dir hier nur 
kurze hinweise ...

der null wert des gewählten stromwandlers liegt theoretisch/ideal in der 
mitte des adc, daher hättest du auch nur 6bit zur verfügung, davon 
kannst du wahrscheinlich nochmals 2 bit vergessen, weil die adc ref 
spannung entsprechend verrauscht ist und der fehler des adc 
berücksichtigt werden muss

ohne vorverstärkung kommst du nie in die richtung 50ma stabil zu messen

wichtig ist die adc ref bzgl. grösse und qualität, also nicht den 
stromwandler hub weiter verschlechtern durch teilung sondern die adc ref 
runter setzen und gute stabiltät+geringes rauschen garantieren

die schaltung kannst du so in die tonne geben, wenn du diese auflösung 
haben willst.


dk4ug

p.s.
der attiny85 wäre besser geeignet, weil interne 1.1ref und verstärker 
x20 vorhanden

von Johannes B. (groovycat)


Lesenswert?

apollo2mond schrieb:
> der null wert des gewählten stromwandlers liegt theoretisch/ideal in der
> mitte des adc, daher hättest du auch nur 6bit zur verfügung

Stimmt, daran hatte ich gar nicht gedacht, also ist 2,5V = 0A. Aber dann 
habe ich doch trotzdem noch eine Auflösung von 12 Bit? Es ändert sich 
doch dann der Spannungsbereich, aber nicht die Auflösung des ADC. Wenn 
man wieder von der heruntergeteilten Spannung ausgeht, ergibt sich:

0,5V / 2^12 = 0,5V / 4096 = 0,000122V = 0,122mV

Die Auflösung wird besser? Das kann irgendwie nicht sein. Wo ist mein 
Denkfehler?

apollo2mond schrieb:
> ohne vorverstärkung kommst du nie in die richtung 50ma stabil zu messen

Was soll ich vorverstärken, um eine höhere Auflösung zu erzielen?

apollo2mond schrieb:
> wichtig ist die adc ref bzgl. grösse und qualität, also nicht den
> stromwandler hub weiter verschlechtern durch teilung sondern die adc ref
> runter setzen

Ein hilfreicher Hinweis, aber ich verstehe es nicht. Ich bin auf den 
ESP32 angewiesen, meine Referenzspannung für den ADC ist somit meine 5V 
Versorgungsspannung. Ich sollte also meine Referenzspannung des ADC 
heruntersetzen. Sind Spannungsbereich des ADC und Referenzspannung des 
ADC nicht zwei völlig verschiedene Dinge? Ich möchte ja den 
Spannungsbereich des ACS217 an den des ADC anpassen, da ich diesen nicht 
auf 5V erhöhen kann.

von Manfred (Gast)


Lesenswert?

Johannes B. schrieb:
> Hallsensor ACS712

Platinchen bestellen, sind beim Chinamann billiger als einzelne ICs und 
dann den Lötkolben an! Zur AC-Stromsimulation nutze ich einen Trafo 12V 
100VA, eigentlich die komplette Halogenlampe, am Stelltrafo.

Wie apollo2mond schon schrieb, das wird so einfach nichts: Ohne Strom 
hast Du am Ausgang des ACS712 die halbe Betriebsspannung, also 2,5V. Bei 
positivem Strom steigt sie um 100mV/A an, bei negativem Strom geht sie 
runter.

Du hast Wechselstrom, da wird sie also um die 2,5V herum wechseln. Mit 
der Diode hast Du einen Gleichrichter, damit sollte der Spitzenstrom als 
Spannung am Kondensator abgebildet werden. Es wird nur die positive 
Halbwelle gleichgerichtet, damit liegt Dein vom ADC zu messendes Signal 
zwischen 2,5V (= 0 Ampere) und 4,5V bei 20A Spitze entsprechend 14A 
effektiv.

Nun rechne neu ... die Auflösung wird nicht sehr toll.

Eine ähnliche Schaltung habe ich neulich aufgebaut, da geht es mir aber 
nur darum, zu erkennen, ob mehr als 3,5A fließen oder nicht. Eine 
Messung mit Wertausgabe hätte ich mich mit dieser Schaltung von 
vornherein nicht getraut.

von Manfred (Gast)


Lesenswert?

Johannes B. schrieb:
> Stimmt, daran hatte ich gar nicht gedacht, also ist 2,5V = 0A.

Du bekommst am Ausgang eine dem Strom proportionale Wechselspannung. Es 
wäre einen Versuch wert, mit einem Kondensator in Reihe die 2,5V 
DC-offset zu entfernen und das Wechselsignal aktiv gleichzurichten 
(OP-Schaltung).

von apollo2mond (Gast)


Lesenswert?

hi,
ich würde mich auch/erstmal mit dem esp32 tiefer beschäftigen bzgl. ...

When VDD_A is 3.3V:
    0dB attenuaton (ADC_ATTEN_0db) gives full-scale voltage 1.1V
    2.5dB attenuation (ADC_ATTEN_2_5db) gives full-scale voltage 1.5V
    6dB attenuation (ADC_ATTEN_6db) gives full-scale voltage 2.2V
    11dB attenuation (ADC_ATTEN_11db) gives full-scale voltage 3.9V

das problem hier ist die doku selbst weil unvollständig und nicht immer 
klar bzw. eindeutig. da musst du auch weiter im internet nach infos 
rumsuchen.

dann sollte überhaupt mal klar sein was die themen sind

- min/max messbereich
- auflösung/genauigkeit
- dc/ac und wenn ac/max frequenz

der sensor selbst hat auch einen erheblich rauschwert am ausgang.
im internet wurde schon viel über die probleme mit dem sensor berichtet 
bzgl. ghost values ohne last und best minimum oder so ... und 
wiederholbarkeit der messwerte.


dran bleiben!

von temp (Gast)


Lesenswert?

Also die Diode würde ich weglassen, damit handelst du dir nur 
Unliniaritäten ein. Der AD-Wandler im ESP32 ist doch schnell genug. Ich 
würde empfehlen mit z.B. 10kHz zu Samplen und die Werte zu berechnen. 
Damit bekommst du dann auch einen Effektivwert und nicht nur die 
gleichgerichteten Spitzen.

von apollo2mond (Gast)


Lesenswert?

... der esp32 adc ist wohl eine "grosse" baustelle

https://github.com/espressif/esp-idf/issues/164

von soundso (Gast)


Lesenswert?

[q]
der null wert des gewählten stromwandlers liegt theoretisch/ideal in der
mitte des adc, daher hättest du auch nur 6bit zur verfügung,
[/q]

sicher ?

ich tendiere da eher auf 11 Bit pro Polarität wobei dann 1-2 Bits 
flakern werden, ausser du bekommst die Analoge Schaltung sehr gut hin 
...

von spess53 (Gast)


Lesenswert?

Hi

Kleiner Hinweis: Am Anfang des aktuellen Datenblatt von Allegro steht

"Not for New Design"
...
Recommended Substitutions:
For existing customer transition, and for new customers or new 
applications,
use ACS723.

MfG Spess

von Johannes B. (groovycat)


Lesenswert?

apollo2mond schrieb:
> der null wert des gewählten stromwandlers liegt theoretisch/ideal in der
> mitte des adc, daher hättest du auch nur 6bit zur verfügung

soundso schrieb:
> ich tendiere da eher auf 11 Bit pro Polarität wobei dann 1-2 Bits
> flakern werden, ausser du bekommst die Analoge Schaltung sehr gut hin

Sehe ich auch so, weil das letzte Bit das Vorzeichen kodiert. Was sich 
halbiert ist die Anzahl der Werte, also von 2^12 = 4096 auf 2^11 = 2048.

apollo2mond schrieb:
> also nicht den
> stromwandler hub weiter verschlechtern durch teilung
Ich verstehe nach wie vor nicht so ganz, wieso ein Spannungsteiler den 
Ausgangswert verschlechtert. Mir ist bewusst, dass die Widerstände durch 
Rauschen zu einer Verschlechterung des Signals beitragen. Das dürfte 
doch aber bei entsprechender Güte vernachlässigbar klein sein. Der 
Spannungsteiler an sich verkleinert doch lediglich die Spannung, 
verändert doch aber nicht die Signalform?

Manfred schrieb:
> Du hast Wechselstrom, da wird sie also um die 2,5V herum wechseln. Mit
> der Diode hast Du einen Gleichrichter, damit sollte der Spitzenstrom als
> Spannung am Kondensator abgebildet werden. Es wird nur die positive
> Halbwelle gleichgerichtet, damit liegt Dein vom ADC zu messendes Signal
> zwischen 2,5V (= 0 Ampere) und 4,5V bei 20A Spitze entsprechend 14A
> effektiv.

Ich hatte es gar nicht auf dem Schirm, dass dann natürlich auch meine 
Spannung am Ausgang dann um die 2,5V herum schwankt. Dann verstehe ich 
jetzt auch den Sinn der Diode und des Kondensators.

Manfred schrieb:
> Du bekommst am Ausgang eine dem Strom proportionale Wechselspannung.

Das heißt also, ich habe am Ausgang des ACS712 eine sinusförmige 
Spannung mit einer Frequenz 50Hz/60Hz bei Netzspannung.

temp schrieb:
> Also die Diode würde ich weglassen, damit handelst du dir nur
> Unliniaritäten ein. Der AD-Wandler im ESP32 ist doch schnell genug. Ich
> würde empfehlen mit z.B. 10kHz zu Samplen und die Werte zu berechnen.
> Damit bekommst du dann auch einen Effektivwert und nicht nur die
> gleichgerichteten Spitzen.

Dann wird es wohl das Vernünfigste sein, Diode und Kondensator 
wegzulassen und stattdessen den Peak des sinusförmigen Ausgangs zu 
erkennen und darüber den Effektivwert zu berechnen.

Wenn ich mir das Ganze nun erneut durch den Kopf gehen lassen, komme ich 
auf folgende neue Auflösung für die Strommessung:

ESP32:
Auflösung ADC: 12 Bit
Messbereich ADC:  0 bis 3,3V (Annahme)

ACS712:
Mit 2,5V = 0A und einer Empfindlichkeit von 100mV/A ergibt sich ein 
Messbereich von 0,5V bis 4,5V. Diesen teile ich herunter auf den Bereich 
meines ADC, also bei 3,3V circa um den Faktor 1,5. Damit ergibt sich ein 
neuer Bereich nach dem Spannungsteiler von 0,33V bis 3V. Doch sinkt 
dadurch nun meine Messgenauigkeit? Nach meinem bisherigen Verständnis 
verkleinere ich dadurch nur die Amplitude meiner sinusförmigen Spannung.
Jetzt kann man die Auflösung neu berechnen:

100mV/A / 1,5 = 66,67mV/A (Empfindlichkeit nach dem Spannungsteiler)
3,3V / 2^11 = 3.3V / 2048 = 0,00161V = 1,61mV (ADC Auflösung der 
Spannung)

66,67mV = 1 A
1,61mV = x A

x = 1,61mV * 1A / 66,67mV = 0,024A = 24 mA

Das wäre für meine gewünschten 50mA ausreichend. Oder habe ich immer 
noch eine Art Denkfehler drin?

spess53 schrieb:
> Kleiner Hinweis: Am Anfang des aktuellen Datenblatt von Allegro steht
>
> "Not for New Design"

Es gibt für den ACS712 auch ein fertiges Modul. Auf diesem ist aber 
nichts weiter als der ACS712-Chip und zwei Kondensatoren enthalten, die 
in der von mir verlinkten Schaltung aus dem Datenblatt auch bereits 
vorhanden sind.

von apollo2mond (Gast)


Lesenswert?

[q]
der null wert des gewählten stromwandlers liegt theoretisch/ideal in der
mitte des adc, daher hättest du auch nur 6bit zur verfügung,
[/q]

sicher ?

ich tendiere da eher auf 11 Bit pro Polarität wobei dann 1-2 Bits
flakern werden, ausser du bekommst die Analoge Schaltung sehr gut hin
...

was ich schrieb, das stimmt so nicht wirklich, weil der esp32 mit 3.3v 
interner referenz arbeitet und der sensor mit 2.5+-v am output, daher 
der nullwert liegt erstmal asymetrisch! ...wenn nicht verschoben durch 
vorteiler.

aber 11bit pro polarität schliesse ich sicher aus, oder ich fresse einen 
besen.

dazu bräuchtest du wohl eher einen adc mit bipolar input mode.


keep going

von Georg (Gast)


Lesenswert?

Johannes B. schrieb:
> ich möchte den Effektivwert eines Wechselstroms

Was immer hier schon diskutiert wurde, den Effektivwert misst so eine 
Schaltung nicht, sondern den Spitzenwert des Stroms. Daraus kann man den 
Effektivwert schätzen, wenn man Sinusform voraussetzt, eine echte 
Effektivwertmessung, z.B. bei Phasenanschnitt, wäre VIEL aufwendiger.

Georg

von apollo2mond (Gast)


Lesenswert?

... Empfindlichkeit von 100mV/A

wenn du die ausgangsspannung teilst, dann doch auch die 100mV/A
daher verringert sich dann der spannungshub pro ampere

von apollo2mond (Gast)


Lesenswert?

Effektivwert/Spitzenwert ...

ich habe das teil auch in benutzung aber ohne gleichrichter ... und 
messe/suche nur den positiven/negativen spitzenwert und berechne den 
effektivwert bei sinus/50hz netzspannung

von Johannes B. (groovycat)


Lesenswert?

Georg schrieb:
> Was immer hier schon diskutiert wurde, den Effektivwert misst so eine
> Schaltung nicht, sondern den Spitzenwert des Stroms.

Das habe ich mittlerweile verstanden. Diode und Kondensator deshalb 
weglassen und aus der sinusförmigen Spannung mit entsprechender 
Abtastung die Spitzenwerte erkennen und daraus den Effektivwert mit dem 
ESP32 berechnen.

apollo2mond schrieb:
> wenn du die ausgangsspannung teilst, dann doch auch die 100mV/A
> daher verringert sich dann der spannungshub pro ampere

Ich weiß jetzt, wie du das meinst.

Johannes B. schrieb:
> 100mV/A / 1,5 = 66,67mV/A (Empfindlichkeit nach dem Spannungsteiler)

Dementsprechend habe ich einen kleineren Spannungsbereich und werde 
ungenauer.

: Bearbeitet durch User
von apollo2mond (Gast)


Lesenswert?

... noch was zum gleichrichter der macht für mich nur "sinn", wenn die 
frequenz zu hoch für den adc ist, daher besser den spitzwert einer 
halbwelle messen, bei 50hz also tonne!

von Johannes B. (groovycat)


Lesenswert?

apollo2mond schrieb:
> ... noch was zum gleichrichter der macht für mich nur "sinn", wenn die
> frequenz zu hoch für den adc ist, daher besser den spitzwert einer
> halbwelle messen, bei 50hz also tonne!

Ich habe keine Ahnung wozu dieser Gleichrichter nun wirklich gut sein 
soll, aber mir war vorher einfach nicht bewusst, dass das 
Ausgangssignal, da es ja proportional zum Strom ist, auch sinusförmig 
ist und sich mit 50Hz problemlos mit dem ESP32 abtasten lässt. Damit hat 
sich die Frage für mich erübrigt. Ich hätte zu Beginn erwähnen sollen, 
dass es sich um Netzspannung handelt.

Bleibt noch die Frage, wie hoch ich letztendlich den Strom mit dem ESP32 
auflösen kann? Ich werde das am besten mal praktisch ausprobieren.

Vielen Dank für die hilfreichen Antworten, das hat mir einiges klar 
gemacht.

von Manfred (Gast)


Lesenswert?

Johannes B. schrieb:
> Ich werde das am besten mal praktisch ausprobieren.

Genau das habe ich vor ein paar Wochen getan: Vorne Wechselstrom und 
hinter der Gleichrichterdiode die Gleichspannung aufgenommen.

Wie gesagt: Du könntest mal probieren, den Ausgang des ACS über einen 
Elko, Hausnummer über den Daumen 10µF, an die Diode zu koppeln. Dann 
sollte sich die Spitzenspannung ergeben, aber die 2,5V DC weg sein = 
0..2 Volt.

Ist theoretisch, habe ich nicht probiert!

von Manfred (Gast)


Angehängte Dateien:

Lesenswert?

Manfred schrieb:
> hinter der Gleichrichterdiode die Gleichspannung aufgenommen.

Anhang!

Die Versorgungsspannung betrug 5,2 Volt.

von apollo2mond (Gast)


Lesenswert?

>
... Wie gesagt: Du könntest mal probieren, den Ausgang des ACS über 
einen
Elko, Hausnummer über den Daumen 10µF, an die Diode zu koppeln. Dann
sollte sich die Spitzenspannung ergeben, aber die 2,5V DC weg sein =
0..2 Volt.

dann treibst du aber den input mit der negativen halbwelle unter gnd?!

wenn der analog pin keine schutzschaltung hat, dann ist er vielleicht 
gleich tot oder die clipping diode muss den strom ableiten der 
hoffentlich begrenzt wird  sonst wird es auch ungesund.


leider ist die hw doku des esp32 bescheiden und schweigt zu vielen 
fragen.


also diese idee ist für mich "ungesund" für den esp32!


besser pegelkonverter mit verstärkung vorschalten um den nullpunkt 
zuverschieben und um mehr empfindlichkeit zu erreichen.

sprich 1-2 op's spendieren

trotz alledem die accuracy bleibt bei dem ansatz "grausam" die 
resolution lässt sich oft relative leicht verbessern.

der absolute fehler blieb bei dem kleinen diskus hier immer gleich nur 
der relative bezogen auf den messbereich hat sich durch den teiler 
weiter delatiert.

von apollo2mond (Gast)


Lesenswert?

... ungesund

komando zurück, ich dachte an direkt ankoppeln ohne diode und so!

von Manfred (Gast)


Angehängte Dateien:

Lesenswert?

apollo2mond schrieb:
> komando zurück

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.