Forum: Analoge Elektronik und Schaltungstechnik ACS712 effiziente Berechnung der Stromstärke


von MOBA 2. (Gast)


Lesenswert?

Hallo,

ich nutze einen ACS712, 5A (185mV/A).

Ich berechne meine werte zzt. so: dummy += abs(512-ADCW);

Wenn 5 Samples addiert wurden, dann berechne ich den Mittelwert.

Jetzt habe ich gemessen einen Wert von 20. Das entspricht ca. 0,55A. 
Nachvollzogen fließen ca. 0,6A, aber ist ok für die Anwendung.

Es ist kein Problem, das zu berechnen, also aus den digitalen 20 einen 
Stromwert zu bekommen. Das Problem hingegen ist eine effiziente 
Implementierung. Ich habe da gerade ein Brett vor dem Kopf. Wenn ich das 
Berechne komme ich nur mit Float hin, das ist einfach zu träge für meine 
Anwendung. Ich will bei 16-Bit bleiben.


Ich benötige dA (dezi-Ampere). Also quasi von den gemessenen 0,55A 
möchte ich einfach 5 haben (ggf. kann man ja runden aber dann wäre man 
bei 6 = 0,6A).

Kann mir jmd. helfen? Ich stehe im Wald und sehe keine Bäume.



Ich habe jetzt aktuell in Vorschlag:

i_in_deziAmpere = (((ADCW * 50) + 128) / 185);


Das funktioniert rechnerisch. Nutzt auch keine floats. +128 ist für's 
runden. Problem: Das habe ich durch testen herausgefunden, ich kann 
nicht erklären warum ich das * 50 rechnen muss?!!!?

von THOR (Gast)


Lesenswert?

ADCH und ADCL kenne ich, was ist ADCW? Und welcher Controller, wenn wir 
schonmal dabei sind?

Schaltplan (mindestens Spannungsversorgung Controller und Beschaltung 
ADC Pin) und ADC-ISR sowie ADC-Init würden auch stark helfen.

TL;DR: Was, wann, warum, wer, wie, was, weshalb?

von eProfi (Gast)


Lesenswert?

Wie THOR schon gesagt hat, fehlen wichtige Angaben und Links zu den 
Datenblättern der verwendeten Bauteile.
Deine Angaben sind auch widersprüchlich / mehrdeutig.
Meine Glaskugel sagt atMegaxxx mit 10bit ADC.

Was schon mal nicht stimmt, sind die 128 zum Runden. Das muss der halbe 
Wert des 185 sein.
Dann ist es besser, statt ADCW * 50 lieber die Summe von 50 Wandlungen 
zu verwenden.
Statt einer Division kann man eine Multiplikation (kann der atMega in 
Hardware) mit nachfolgender Division durch ein Vielfaches von 2 
verwenden, was auf ein SHR shift right rausläuft.
Also überlegt: wie hoch ist die Referenzspannung?
wie hoch ist die Auflösung.
Was ist die Spannung pro LSB (Referenz / maxAdc)?
Wieviele mA entspricht das.

Das ist doch Grundschulmathematik.

Außerdem: wie ist die Samplerate, wie hoch die Anzeige-Rate?

Ich verwende am ADC fast immer ein PT1-Filter, z. B.
adcsum += ADCW - adcsum/64;

> Wenn ich das Berechne komme ich nur mit Float hin, das ist einfach
> zu träge für meine Anwendung. Ich will bei 16-Bit bleiben.
Obwohl ich selten Float verwende, ist die "Trägheit" meist kein Grund.
Eine Division läuft im Millisekundenbereich, d.h. 1000 Divisionen pro 
Sekunde - warum sollte das zu langsam sein?


Außerdem, was soll das abs(512-ADCW)?

von eProfi (Gast)


Lesenswert?

Warum machst Du plötzlich einen neuen Thread auf, noch dazu ohne auf ihn 
zu verlineken?
Hier sind die Hintergründe erklärt:
Beitrag "Re: ACS712 Stromsensor defekt?!"
µC ist ein tiny85 mit 10bit-ADC.

Warum misst Du den Strom nicht vor der H-Brücke?

von MOBA 2. (Gast)


Lesenswert?

THOR schrieb:
> ADCH und ADCL kenne ich, was ist ADCW? Und welcher Controller, wenn wir
> schonmal dabei sind?
>
> Schaltplan (mindestens Spannungsversorgung Controller und Beschaltung
> ADC Pin) und ADC-ISR sowie ADC-Init würden auch stark helfen.
>
> TL;DR: Was, wann, warum, wer, wie, was, weshalb?

Ein Tiny 85. ADCW ist,  wie bei allen Atmels,  das 16 bit Register des 
adc. Dort ist ADCH/L zusammen gefasst.

Schaltung funktioniert mir geht's wirklich nur um die Berechnung. Es ist 
ein ACS712 in der 5A Variante. Er gibt 185mV/A am Ausgang aus und ich 
digitalisiere diese.

Der ADC läuft in free running Modus,  kein isr.  10 Bit Auflösung mit 
VCC als Referenzen.

von MOBA 2. (Gast)


Lesenswert?

eProfi schrieb:
> Warum machst Du plötzlich einen neuen Thread auf, noch dazu ohne auf ihn
> zu verlineken?
> Hier sind die Hintergründe erklärt:
> Beitrag "Re: ACS712 Stromsensor defekt?!"
> µC ist ein tiny85 mit 10bit-ADC.
>
> Warum misst Du den Strom nicht vor der H-Brücke?

Weil es ein Kehrschleifenmodul ist und das ans Gleis angeschlossen wird. 
Die Zentrale die das DCC Signal erzeugt,  hat damit nichts zu tun.

Der Thread ist erledigt,  deswegen neu.

von MOBA 2. (Gast)


Lesenswert?

eProfi schrieb:
> Wie THOR schon gesagt hat, fehlen wichtige Angaben und Links zu den
>> Wenn ich das Berechne komme ich nur mit Float hin, das ist einfach
>> zu träge für meine Anwendung. Ich will bei 16-Bit bleiben.
> Obwohl ich selten Float verwende, ist die "Trägheit" meist kein Grund.
> Eine Division läuft im Millisekundenbereich, d.h. 1000 Divisionen pro
> Sekunde - warum sollte das zu langsam sein?
>
>
> Außerdem, was soll das abs(512-ADCW)?


Das abs kommt von ACS712 den der gibt bei 0A vcc/2 aus. Da die Spannung 
ein digitales Signal ist wechselt es und daher abs.

Float ist schnarchlarm. Der Tiny85 muss neben der Stromüberwachung des 
Gleises auch noch das DCC Signal auswerten (20khz Signal). Das geht 
nicht,  vll mit Interrupts,  aber der macht auch noch andere Sachen und 
diese ständigen Unterbrechungen sind nicht gut. Früher als ich die dcc 
library geschrieben habe habe ich so einiges getestet und dad 20 kHz 
Signal mit einem Timer ohne Interrupts zu detectieren ist am 
effizientesten. Dann darf allerdings alles was noch kommt in der loop 
nicht allzu lange dauern. Klappt aber hervorragend.

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.