ich will mich wieder daran wagen, habs ja schon paar mal hier versucht. Aber ich hing glaube ich zu sehr an meiner Sache fest und habe auf nichts anderes gehört. Ich will noch mal von vorne Anfangen und hoffe mir wird trotzdem geholfen.
Ich möchte eine 3 kW Heizung(ohmscher Wiederstand) anhand der Leistung regeln können und diese auch messen können.
Bisher habe ich die Heizung mit dem Kemo M028(Phasenanschnittregler) reguliert. Das signal was darauf gebe ist wächst nicht proportional. zB. sind 90% genauso wie 100% und 50% sind nicht 50%.
Um die Leistung zu messen, habe ich es bisher mit dem ACS712 20A-Version versucht. Der kann den Strom messen und den verrechne ich denn mit dem Wiederstand R zur Leistung.
Aber die Messungen sind halt leider nicht richtig. (hab RMS-Formel verwendet)
Also kann ich die Leistung nicht Richtig einstellen und mit der Messungen kann ich es auch nicht vergleichen da diese fehlerhaft sind.
Nun wurden mir zuvor ja schon Vorschläge gemacht von Uwe eine Vollwellensteuerung zu verwenden oder von jurs mit einer SSR-Relais Taktung(hatte aber auch nicht geklappt).
Welche dieser Varianten ist besser und mit dem ACS712 gut messbar? Könnte ich nicht auch mit nem Traffo der die Wechselspannung auf höchsten 5V senkt und diese denn am analogPin messen?
Wie soll ich jetzt vorgehen.
Bitte steigert euch nicht wieder in den Grund des ganzen rein.
Ich kann echt leider nicht sagen wofür das ist.
Fest steht das ich die Leistung(nicht Temperatur) regulieren will und diese auch messen will. Stellt euch zB. vor ich brauche mal eine 3kW Heizung und mal eine mit 1kW(und andere Werte). Es ist 100% gewollt das ich nach der Leistung reguliere und nicht Temperatur.
Mit RMS kannst du nicht rechnen, weil das so aussieht:
Du schneidest da einen Teil der Sinus Welle ab. Wenn man den Phasenanschnittswinkel kennen würde (d.h. der Zeitpunkt ab dem die Halbwelle durchgelassen wird), könnte man den Effektivwert der Spannung einfach ausrechnen. Diesen zu ermitteln wird halt im Vergleich zu anderen Optionen recht kompliziert sein.
Hallo,
was möchtest Du denn messen? Die Wirkleistung?
Wie wäre es denn mit einem elektronischen Wirkstromzähler? Die meisten haben eine Schnittstelle.
Dieser "ACS712 20A" : Da gehst Du mit 220v rein und raus? Der liefert dann einen "RMS-Wert" den Du umrechnest?
Diesen Baustein muss es doch auch für Wirkleistung geben.
Gruß und Spaß
Andreas
Und wenn du ein SSR mit Nullspannungsschalter nimmst? Dann funzt die Formel, weil nix angeschnitten wird. Mit einem Optokoppler an einem Eingang synchronisierst du sich auf Netzferequenz. Die zählst du über einen Counter und steuerst dann entsprechend das SSR an. Da eine Heizung träge ist, kannst du eine Schwingungspaketsteuerung verwenden. Also bei 50% halt 100 Halbwellen ein und 100 Halbwellen aus. Du kannst natürlich auch in einem Arry Pattern für jeden Prozentwert ablegen. So nach dem Motto: 50% 2 Halbwellen an, 2 Halbwellen aus, 33% 2 Halbwellen an, 4 Halbwellen aus. Ich würde immer eine gerade Zahl von Halbwellen bevorzugen, falls mal eben doch keine ohmsche Last als Verbraucher genutzt wird. Fürs Netz ist es auch besser, als wenn immer nur Last auf einer Halbwelle ist. Evntuell mußt du den Zündimpuls vom SSR über eine Variable verzögern, denn wenn der Prozzi wärend der Halbwelle feuert und im Nulldurchgang schon wieder Sendepause hat, dann passiert garnichts ]
Ein bisschen Zeit braucht er ja auch zum Rechnen
nix_mehr_frei:
Und wenn du ein SSR mit Nullspannungsschalter nimmst? Dann funzt die Formel, weil nix angeschnitten wird. Mit einem Optokoppler an einem Eingang synchronisierst du sich auf Netzferequenz. Die zählst du über einen Counter und steuerst dann entsprechend das SSR an. Da eine Heizung träge ist, kannst du eine Schwingungspaketsteuerung verwenden. Also bei 50% halt 100 Halbwellen ein und 100 Halbwellen aus. Du kannst natürlich auch in einem Arry Pattern für jeden Prozentwert ablegen. So nach dem Motto: 50% 2 Halbwellen an, 2 Halbwellen aus, 33% 2 Halbwellen an, 4 Halbwellen aus. Ich würde immer eine gerade Zahl von Halbwellen bevorzugen, falls mal eben doch keine ohmsche Last als Verbraucher genutzt wird. Fürs Netz ist es auch besser, als wenn immer nur Last auf einer Halbwelle ist. Evntuell mußt du den Zündimpuls vom SSR über eine Variable verzögern, denn wenn der Prozzi wärend der Halbwelle feuert und im Nulldurchgang schon wieder Sendepause hat, dann passiert garnichts ]
Ein bisschen Zeit braucht er ja auch zum Rechnen
Gruß Gerald
Das mit den Vollwellen (positven und negativen Halbwelle zusammen) geht noch viel einfacher. Auch ist bei Vollwellen die Störungen geringer.
Du mußt gar nicht synchronisieren. Mit einem SSR das im Spannungsnulldurchgang schaltet und einer Ansteuerung bzw Pausen von vielfachen von 20mS hast Du immer eine Vollwelle die durchgeschaltet wird und aus dem Verhältnis von EIN zu AUS bekommst Du die Leistung ohne irgend etwas messen zu müssen.
Grüße Uwe
Mit RMS kannst du nicht rechnen, weil das so aussieht:
Wem soll ich den nun glauben jurs hatte mir versichert:
Der Code dient zur Berechnung des "Effektivwerts" eines Signals durch Abtastung in gleichen Zeitabständen und ist unabhängig vom zeitlichen Verlauf des Signals. Das Signal kann Rechteck, Sinus, Phasenanschnitt, Phasenabschnitt, Sägezahn, Schmetterling oder sonstwas sein. Die Messwerte werden gesampelt und der "geometrische Mittelwert" der Messwerte als Effektivwert errechnet.
was möchtest Du denn messen? Die Wirkleistung?
Ja die Wirkleistung.
Wie ich das verstanden hab scheint die Vollwellensteuerung am einfachsten.
Ok, wenn das SSR richtig ist, hab ich mal versucht den code umzusetzen:
// 1 Vollwelle = 20ms
// 1% = 20ms ; 100% = 2000ms
int heizPin = 40;
void setup(){
pinMode(heizPin, OUTPUT);
}
void loop(){
heizen(77); // 77*20ms=1540ms ; 77 Vollwellen durchlassen
}
void heizen(byte prozent){
static unsigned long letztesIntervallStart;
unsigned long jetztMillis=millis();
if (jetztMillis-letztesIntervallStart>2000){ // alle 2000ms ein neues Intervall
letztesIntervallStart=jetztMillis;
}
if (jetztMillis-letztesIntervallStart<20*prozent) // bestimmte Anzahl an Vollwellen durchlassen
{
digitalWrite(heizPin, HIGH);
}
else // Rest des Intervalls Vollwellen nicht durchlassen
{
digitalWrite(heizPin, LOW);
}
}
Ist das so richtig? Oder wie meintest du das Uwe?
Wieso muss man eig. nichts synchronisieren? Wenn das Signal HIGH gesendet wird, wenn die Welle nicht am Nulldurchgang ist, denn wartet doch das SSR bis dieser erreicht ist, die millis laufen währenddessen doch aber weiter.
Oder hab ich etwas falsch verstanden?
Noch ne frage zu den millis: können auch mehrere millis parallel laufen?
Das SSR bekommt zu einen beliebigen Zeitpunkt ein Einsignal. Es schaltet aber erst bei Nulldurchgang der zwischen 0 und 20mS erfolgen kann ein. Es bleibt für die darauffolgende Halbwelle eingeschaltet. Diese Halbwelle dauert 10mS. Dann erfolgt ein weiterer Nulldurchgang. In diesem Moment ist das Eingangssignal noch vorhanden (da ein vielfaches von 20mS lang) und auch die 2. Halbwelle wird durchgeschaltet. Darauf folgen zwischen 0 und 99 weitere Vollwellen je nach Ansteuerung. Dann zwischen 0 und 20mS nach dem letzten Nulldurchag geht das Eingangssignal auf LOW und das SSR schaltet nicht mehr durch. Endeffekt unabhängig vom Einschaltmoment der Ansteuerung kommt immer eine oder mehrere Vollwellen durch.
Der Sketch ist theoretisch richtig hat aber einige Gemeinheiten parat.
jedesmal bei Anspringen der Funktion heizen() Startet ein Zyklus der aber nie vollendet wird da zur vllendung weitere aufrufe notwändig wären.
Das SSR bekommt zu einen beliebigen Zeitpunkt ein Einsignal. Es schaltet aber erst bei Nulldurchgang der zwischen 0 und 20mS erfolgen kann ein. Es bleibt für die darauffolgende Halbwelle eingeschaltet. Diese Halbwelle dauert 10mS. Dann erfolgt ein weiterer Nulldurchgang. In diesem Moment ist das Eingangssignal noch vorhanden (da ein vielfaches von 20mS lang) und auch die 2. Halbwelle wird durchgeschaltet. Darauf folgen zwischen 0 und 99 weitere Vollwellen je nach Ansteuerung. Dann zwischen 0 und 20mS nach dem letzten Nulldurchag geht das Eingangssignal auf LOW und das SSR schaltet nicht mehr durch. Endeffekt unabhängig vom Einschaltmoment der Ansteuerung kommt immer eine oder mehrere Vollwellen durch.
Hab ich das jetzt richtig verstanden, dass quasi mit dem Einschalten des SSR das ganze synchronisiert wird? Aber eine oder mehrere Vollwellen kommen immer durch. Ist das schlimm oder bemerkbar?
Lösung die Kontrolle ob die Zeit eines HIGH intervalls bereits vergangen ist, muß in der loop() erfolgen da nur diese immer wieder durchlaufen wird.
Habs versucht aber ich krieg diese Variablen nicht aus der Funktion raus. Wie mache ich das? (bin noch nicht so erfahren mit Funktionen)
Hab ich das jetzt richtig verstanden, dass quasi mit dem Einschalten des SSR das ganze synchronisiert wird? Aber eine oder mehrere Vollwellen kommen immer durch. Ist das schlimm oder bemerkbar?
Die Einschaltintervall des SSR wird durch die Nullpunktschaltung mit der Wechselspannung synchronisiert. Durch ansteuerung von vielfachen con 20mS kommt immer eine oder mehrere Vollwellen durch.
Habs versucht aber ich krieg diese Variablen nicht aus der Funktion raus. Wie mache ich das? (bin noch nicht so erfahren mit Funktionen)
Vergiß die Funktion heizen() und mach alles in der loop()
// 1 Vollwelle = 20ms
// 1% = 20ms ; 100% = 2000ms
int heizPin = 40;
int prozent;
void setup(){
pinMode(heizPin, OUTPUT);
}
void loop(){
prozent = 77; 77*20ms=1540ms ; 77 Vollwellen durchlassen
static unsigned long letztesIntervallStart;
unsigned long jetztMillis=millis();
if (jetztMillis-letztesIntervallStart>2000){ // alle 2000ms ein neues Intervall
letztesIntervallStart=jetztMillis;
}
if (jetztMillis-letztesIntervallStart<20*prozent) // bestimmte Anzahl an Vollwellen durchlassen
{
digitalWrite(heizPin, HIGH);
}
else // Rest des Intervalls Vollwellen nicht durchlassen
{
digitalWrite(heizPin, LOW);
}
}
Meintest du das so? soll ich immer wenn ich das so aufrufen? Ich wollte ja ne funktion nehmen damit es nacher übersichtlicher ist, aber wenns anders nicht klappt oder zu kompliziert ist, denn nehme ich diesen weg.
edesmal bei Anspringen der Funktion heizen() Startet ein Zyklus der aber nie vollendet wird da zur vllendung weitere aufrufe notwändig wären.
Könntest du mir bitte trotzdem nochmal erklären warum das mit der Funktion nicht klappt? ( Möchte es bloß verstehen)
Ich denk mir jetzt, das dieser Zyklus doch ständig wieder aufgerufen wird da die Funktion doch im loop steht.
Achso, ja die schrägstriche vergessen.
Könntest du mir bitte denn noch erklären was an meinem gedankengang falsch ist, verstehe es nicht. Für mich sieht beides gleich aus.
strohhirn:
Achso, ja die schrägstriche vergessen.
Könntest du mir bitte denn noch erklären was an meinem gedankengang falsch ist, verstehe es nicht. Für mich sieht beides gleich aus.
Ähm... :~ :~ :~ Ich glaube ich habe da einen Fehler gemacht und mich mit Deinen Variablennamen verzettelt. Jetzt anchgesehen scheint mir alles richtig.
Ok, ich will mal den sketch demnächst ausprobieren.
Nun will ich mir für zuhause noch SSRs kaufen zum testen.
Kann mir bitte jemand einen günstigen Link geben für ein 25A SSR mit Nulldurchgangsschaltung.
Ich habe zich für 5€ auf ebay gefunden, aber da steht immer nichts von Nulldurchgangsschaltung.
Für 5€ würde ich aber die Finger von lassen, gerade bei der Spannung/Strom. Ein gescheitest SSR kostet ein bisschen was. Im Preissektor von 40 bis 80€ bist du besser aufgehoben, diese sind dann auch gleich berührungssicher und für Hutschienenmontage geeignet. -> 30A Strom
Bei denen siehst du dann auch anhand des DB, was genau gemacht wird. Kühlkörper solltest du bei denen nicht vergessen, wenn du die für 5€ bestellen willst.