Mit ACS 712 Wechselstrom messen

strohhirn:
Tut mir wirklich leid. Ich hatte das ganze mit dem Wechselstrom und Phasenanschnitt nicht so in der Schule und im internet ist das auch sehr kompliziert umschrieben.

Ich verfolge das Drama mit Deiner 3-KW Heizung auch schon den ganzen Sommer lang mit.

Irgendwie weiß ich trotz Deiner vielen Postings in der Sache immer noch nicht, was Du da genau machen möchtest. Aber für mich klingt vieles davon ziemlich kompliziert, überflüssig und fehlerhaft in der Ausführung, was Du versuchst und nicht hinbekommst.

Was in der Schule auch bei Dir drangekommen sein sollte: Technische Geräte sollte man nicht überlasten, das kann zu schweren Fehlfunktionen oder zum Defekt führen.

Im Sommer hatte ich Dir daher irgendwann mal vorgeschlagen, den KEMO-Regler wegzulassen, das Schalten/Regeln über ein Solid-State-Relais zu machen, und die Heizleistung in Prozentschritten von 10% bis 90% mit einer Ein-Aus-Modulation im 10-Sekunden-Takt zu regeln.

Es geht mir neben diversen anderen Ungereimtheiten nicht in den Kopf, wieso Du unbedingt diesen Regler mit 400 Watt oberhalb der maximalen Spezifikation belasten möchtest (3000W Heizung an Regler für max. 2600W zulässiger Anschlußleistung). Dabei ist doch schon vorherbestimmt, dass der so überlastete Regler entweder nicht wie beabsichtigt funktioniert oder er irgendwann mit einem kleinen Rauchwölkchen den Geist aufgibt.

Wenn Du so weiter machst und mit Deiner Bastelei einen Brand verursachst, weil überlastete Bauteile anfangen zu schmoren und irgendwas in Brand setzen, kannst Du nur hoffen, dass bei dem Feuer dann alle Beweise für Dein unfachmännisches Gebastel vernichtet werden.

Um es Dir nochmal deutlich zu sagen:
Ein Regler für "maximal 2600 Watt" ist in keiner Weise zum Anschließen einer 3000-Watt-Heizung geeignet!

MIt R kommst noch weit bei einer Phasenanschnittssteuerung. Es handelt sich hier nicht mehr um einen rein ohmschen Widerstand.

Meinst du nicht weit? Warum ist die Heizung kein rein ohmscher Wiederstand?

Technische Geräte sollte man nicht überlasten, das kann zu schweren Fehlfunktionen oder zum Defekt führen.

Ich überlaste den Kemo nicht da ich garnicht die maximale Leistung erreiche.

Der Kemo reguliert auch nur von 10-90%. Ich dachte mir da das ja funktioniert und das andere kompliziert zu messen ist lasse ich den Kemo.

Nun fällt aber auf das der Kemo ja ein Phasenanschnittregler ist und mein sketch wohl nur für normale Sinus-Schwingungen ausgelegt ist.

Jetzt hat uwefed einen lösungsvorschlag gemacht den ich nicht umsetzen kann und euch nach hilfe frage.

Viel mehr als Phasenanschnittsteuerug bleibt doch beim Regeln doch fast garnicht über. Macht doch keinen Sinn, Energie an einem Vorwiderstand zu verheißen. Dann braucht man nicht regeln. Nehm dir jurs Tipp mit dem SSR Relais zu Herzen! Dieser ist deutlich einfacher zu berechnen, hierbei verhält sich die Leistung annähernd zur Taktung. Dein Schaltpunkt befindet sich jedesmal um Schnittpunkt der SinusWelle auf der x-Achse.

Die Heizung ist und bleibt ein rein ohmscher Widerstand. Jedoch nur hinter dem Kemo. Warum sollte der Kemo nur von 10% - 90% regeln? Nur weil auf Türen steht "Drücken", heißt es nicht, das sich jeder daran hält.

Ich glaube du hast dir das falsche Projekt ausgesucht.
Mit Wechselspannung > 50V sollte keiner experimentieren, der sich nicht mit deren Gefahren und Umgang auskennt. Und das Prinzip sowie die Berechnung der Phasenanschnittssteuerung sollte gekonnt sein. Jedoch nicht mit deinen gegeben Messgeräten am Arduino.

Viel mehr als Phasenanschnittsteuerug bleibt doch beim Regeln doch fast garnicht über.

Es gibt eine Alternative bei einer Heizung: Vollwellensteuerung. Eine Vollwelle wird alle x Vollwellen durchgelassen und durch das Verhältnis zu durchglassenen und nicht durchgelassenen Vollwellen wird die LEistung bestimmt.
Eien Vollwellensteuerung ist zudem viel einfacher zu realisieren als eine Phasenanschnittsteuerung. Die Phasenanschnittsteuerung muß mit der Netzfrequenz synchronisiert werden: der Nulldurchgang gemessen werden und der SSR / Triac muß mit einer gewissen Zeitverzögerung eingeschaltet werden. Beieiner Vollwellensteuerung braucht es nur ein Zero Crossing SSR oder einen Zero Crossing Optokoppler und dieses/dieser muß einfach ein vielfaches der Periodendauer der Netzfrequenz (20mS) angesteuert werden. Ein weiterer Vorteil ist daß die Vollwellensteuerung deutlich weniger Störungen produziert da immer eine Sinuswelle ohne Oberwellen durchgelassen wird.

Das von sschultewolter gesagte bezüglich der Gefährlichkeit der Netzspannung und daß man wissen muß, was man macht, teile ich vollens.

Grüße Uwe

Och mensch warum schweift das denn jetzt wieder in eine andere richtung

uwefed hatte doch schon einen anreiz gegeben:

Wenn Du die Leistung eines mit Phasenanschnittsteuerung geregelten Verbrauchers messen willst, dann mußt Du den quadatischen Mittelwert der Spannung bzw des Stroms aus den Momentanwerten berechen und dann Strom und Spannung multiplizieren. Bei ohmschen Verbrauchern mußt Du das nur einmal machen, wenn Du die Nennleistung/den Nennstrom kennst. Die Spanung ist dann Phasengleich mit dem Strom und steht im gleichen Verhältnis wie momentane der Effektivwert des Stromes zum Nennstrom.

Können wir nicht dabei bleiben. Ich kann das bloß nicht im programm umsetzen und bitte euch drum mir zu helfen.

Das das ganze gefährlich ist weiß ich, da bastelt auch ein anderer Elektriker dran rum.

An eine alternative zum Kemo will estmal nicht denken.

Ich will doch nur mit dem ACS712 Richtig den strom messen und ihn anschließend über die Formel (I*I)*R=P in watt umwandeln.

Bitte ändert doch einfach die messformel so das sie mit dem phasenanschnittregler funktioniert und erklärt sie mir.

Oder ist es Unmöglich mit dem ACS 712 den Wechselstrom von einem Phasenanschittregler zu messen?

Ein gewisser strohhirn hat am 5. April "im Internet die Lösung gefunden", sagt er,
http://forum.arduino.cc/index.php?topic=143265.msg1187503#msg1187503
wie man den Effektiv-Wert eines Wechselstroms berechnen kann,
auch wenn es kein Sinus, sondern etwas angeschnittenes -- oder was auch immer -- ist.

(Die Sache mit dem Nullpunkt ist seit dem 20.April sauber ?)

strohhirn:
Bitte ändert doch einfach die messformel so das sie mit dem phasenanschnittregler funktioniert und erklärt sie mir.

Das geht nicht! Zumindest nicht mit lediglich einem Strommesser. Du kannst den ua. den Anschnittswinkel nicht berechnen. Belasse es bei deinem Versuch und nehm ohmsche Verbraucher oder aber lehne dich an die anderen alternativen Lösungen! Das dringend im Threadtitel finde ich ne Frechheit :wink:

Ja, schuldigung, wie es so aussieht war das nur die lösung für Sinus. :slight_smile:

Der Nullpunkt hält sich bei 0 und springt auch nicht rum. (evt. kleine abweichungen)

Nun habe ich das ganze mit dem Kemo M028 der wohl ein Phasenanschnittregler ist ausprobiert und der sketch funktioniert nicht.

  1. Der wert springt in einem bestimmten bereich rum, anstatt wie vorher vllt alle 2 sec sich minimal zu ändern

  2. Der Wert ist falsch

es wurde zB. etwas um den wert 1000W angezeigt, gemessen habe ich jetzt mit einem True RMS messgerät 150V Was Ja nach (U*U)/R (R = 16 ohm) 1400W ergibt.

Nun hat Uwe ja schon einen lösung vorgeschlagen:

Wenn Du die Leistung eines mit Phasenanschnittsteuerung geregelten Verbrauchers messen willst, dann mußt Du den quadatischen Mittelwert der Spannung bzw des Stroms aus den Momentanwerten berechen und dann Strom und Spannung multiplizieren. Bei ohmschen Verbrauchern mußt Du das nur einmal machen, wenn Du die Nennleistung/den Nennstrom kennst. Die Spanung ist dann Phasengleich mit dem Strom und steht im gleichen Verhältnis wie momentane der Effektivwert des Stromes zum Nennstrom.

Du hattest ja schon mal meinen sketch kommentiert:

uint32_t sum2=0;
     uint16_t n=0;
     uint32_t StartTime, StopTime;
     int16_t adc;
     uint32_t avrg=0xFFFF;
     float I; 
  
     StartTime=millis()+1; 
     StopTime=StartTime+MEAS_INT;
     while(StartTime>millis());  // Wir warten bis eine neue Millisekunde anfängt...
     while(StopTime>millis()) // Dann summieren wir bis zur StopTime
  {
     adc=(MEDIAN-analogRead(ACS_ADC)); // die Differenz zum Mittelwert
     sum2+=(uint32_t)adc*adc;                 // wird quadriert und aufsummiert
     n++;
  }
  if (n>0)
  {
    avrg=sqrt(sum2/n);   // ... und am Ende die Wurzel aus dem Durchschnitt der Quadrate
  }

  I=(float)avrg*5/(K_ACS*1024);
  W =(I*I)* R; // R=16 Ohm

Nun schaffe ich es aber nicht anhand dieses Vorschlags den sketch zu ändern und bitte euch drum und es mir zu erklären.

Ich weiß zum Beispiel nicht wie man den Momentanwert berechnet und anschließend mit strom und spannung multiplizieren soll, wenn ich den strom ersmal errechnen muss und die spannung höhstens anhand von dem gemessenen Stroms und R ausrechnen kann.

Das geht nicht! Zumindest nicht mit lediglich einem Strommesser. Du kannst den ua. den Anschnittswinkel nicht berechnen.

Also kann ich nicht nur mit hilfe des ACS 712 den strom von einem Phasenanschnittregler messen.

Steht das 100% fest? Wenn ja muss ich nach alternativen suchen wie zB:

Im Sommer hatte ich Dir daher irgendwann mal vorgeschlagen, den KEMO-Regler wegzulassen, das Schalten/Regeln über ein Solid-State-Relais zu machen, und die Heizleistung in Prozentschritten von 10% bis 90% mit einer Ein-Aus-Modulation im 10-Sekunden-Takt zu regeln.

Steht das 100% fest? Wenn ja muss ich nach alternativen suchen wie zB:

Denke schon...weil

Bin zwar auch kein Profi, aber dein Vorhaben mit Phasenanschnittsteuereung würde sich meiner Meinung nach nur lösen lassen wenn die Steuerung der Arduino auch übernimmt.
Das erfordert u.a. das Ermitteln des Nulldurchgangs um ein prazises Zünden des Triacs zu erreichen.

Der Arduino hätte den Anschnittswinkel.
Um dann die Leistung zu ermitteln braucht es die Funktionsvorschrift aus dem Sinus Stromfluss/Zeit.
Daraus das Integral bilden und mit dem Anschnittswinkel rechnen wäre dann die Leistung.

Ich schreibe im konjunktiv, weil das nur so mein Gedanke wäre dieses Problem anzugehen.
Würde mich interessieren ob ich halbwegs richtig liege ?

Hab noch nicht mit digitalen Potentiometer gearbeitet. Wenn man hier von 2 von einander getrennten Netzen reden kannst, würde es gehen. Du gibt dem Widerstand, sollte zwischen ~0Ohm und 100k Ohm linear regeln.

@sschultewolter
Ich habe nicht verstenden was Du mit digitalen Potentiometern machen willst aber die meisten verkraften nur 5V und unter 1mA auf dem Widerstandspins. Einige "Hochspannungsversionen" vertragen einige Volt mehr.
Sicher kannst Du digitalen Potentiometern nicht in die Phasenanschnittsteuerung enbauen. Da müssen die 315V ( spitzenwert von 230VAC) aushalten.

Wie schon gesagt ist eine Vollwellensteuerung einfacher zu realisieren und einfacher zu vermessen.

Grüße Uwe

Könnte ich bitte eine klare antwort bekommen das der ACS 712(alleine) keinen Strom von Phasenanschnittreglern messen kann.

NEIN!

@Uwe: Der Kemo hat einen Potieingang zur Ansteuerung. Der läuft nicht mit 325V (Us= Wurzel(2) * Ueff). Wie genau Messtrom/spannung ist, kann ich nicht sagen. Ist aus dem DB nicht ersichtlich.
Die Möglichkeit wäre nun, den linearen Poti (nicht 100k, sonder 470k, hatte mich vertan) mit einem digitalen Poti zu ersetzen.

Ob das in der Form möglich ist, kann ich nicht sagen, geht aus keinem mir bekannten DB vom Kemo hervor.

Danke für die klare Antwort.

Nun will ich es wieder mit dem Vorschlag von jurs mit der SSR Ein-Aus-Modulation versuchen.

Das Thema wurde hier schon besprochen ist aber irgendwann kam keine Antwort mehr.

http://forum.arduino.cc/index.php?topic=180102.45

Das problem war das ich nicht wusste wie man den sketch von Jurs mit dem sketch zum Strom messen kombinieren sollte.

Ich habe im sketch zum strommessen eine blockschleife die bei jeder Messung für mindestens 20 Millisek den ganzen sketch einfriert.

Wenn ich aber aus dem while ein if machte so spang der wert schnell hin und her sodass man nichts erkennen konnte.

Aber dieses Problem will ich denn jetzt weiter auch dem anderen Topic diskutieren.

Gruß

strohhirn

static int für den messwert und alle x sekunden aktualiesieren mittels der blinkavoiddelay technik millis()

strohhirn:
Könnte ich bitte eine klare antwort bekommen das der ACS 712(alleine) keinen Strom von Phasenanschnittreglern messen kann.

Der ACS712 kann da schon was. Ist nur die Frage wie.
Ein Messtechnik- und Programmierprofi bekommt sicher besser was gemessen als Du.

Teste mal folgenden Sketch, den ich für Dich zusammengezimmert habe.

Ich habe zwar keinen ACS712, aber ich habe Dir mal was zum Testen programmiert: Einen Sketch, der interruptgesteuert über einen Timer-Interrupt einmal pro Millisekunde (1000 mal pro Sekunde) den Analogwert an einem Analogpin mißt und den Mittelwert bildet. Erstmal nur für den gemessenen Strom (nicht die Leistung). Formeln nach bestem Wissen und Gewissen und Datenblattlage.

Wenn Du die Einstellung an Deinem Regler mal jeweils unverändert läßt:

  • Sehen die angezeigten Werte für den Strom sinnvoll aus?
  • Wie stark streuen die Messwerte, also wie stark schwanken diese bei unveränderter Regler-Einstellung?
#define ACS712PIN A3 
#define BETRIEBSSPANNUNG 4.85    // VSS in Volt
#define SENSITIVITY 100        // Empfindlichkeit in mV/A

#define MEDIAN 512

volatile unsigned long sumMesswerte,countMesswerte;

void einMesswert() {
  sumMesswerte += abs(analogRead(ACS712PIN)-MEDIAN);
  countMesswerte++;
}

void auswertung()
{
  char buffer[35];
  int messwert;
  float strom;
  long spannungMV,stromMA;
  if (countMesswerte>=1000)
  {
    noInterrupts();
    messwert= sumMesswerte/countMesswerte;
    sumMesswerte=0;
    countMesswerte=0;
    interrupts();
    spannungMV= messwert / 1023.0 * BETRIEBSSPANNUNG  * 1000L;
    stromMA=spannungMV*1000/SENSITIVITY;
    snprintf(buffer,sizeof(buffer),"%d - %ld mV - %ld mA",messwert,spannungMV,stromMA);
    Serial.println(buffer);
  }
}


void stopTimer0() {
    // ensure that the standard timer interrupts will not
    // mess with msTimer2
    TIMSK0 = 0;
}

ISR(TIMER2_COMPA_vect) {
  einMesswert();
}

void initTimer2() {
    // Timer 2 CTC mode, prescaler 64
    TCCR2B = (1<<WGM22) | (1<<CS22);
    TCCR2A = (1<<WGM21);
    // 249 + 1 == 250 == 250 000 / 1000 =  (16 000 000 / 64) / 1000
    OCR2A = 249;
    // enable Timer 2 interrupts
    TIMSK2 = (1<<OCIE2A);
}


void setup() {
    Serial.begin(9600);
    Serial.println();
    Serial.println("ACS712 Test Program by 'jurs' for German Arduino Forum");
    Serial.println();
    initTimer2();
    stopTimer0();
}


void loop() {
  auswertung();
}

Passenden Analog-Pin als ACS712PIN im Sketch eintragen nicht vergessen und möglichst auch die genaue Betriebsspannung des Arduino!

strohhirn:
Könnte ich bitte eine klare antwort bekommen das der ACS 712(alleine) keinen Strom von Phasenanschnittreglern messen kann.

Laut Datenblatt hat der ACS712 eine Bandbreite von 80kHz. Darum JA, Du kannst den Spannungsverlauf eine phasenangeschnitten 50Hz Wechselspannung messen. Die Messung der Ausgangsspannung mittels Arduino ist kritisch. Ich habe aber auch keine Lösung wie die Messung richtig zu machen.

Grüße Uwe

Danke, den sketch werde ich auf jeden Fall ausprobieren aber frühstens am montag.