AC Spannungsteiler ungenau

Hallo,

Hab ihr ein kleines Problem :thinking:

Habe folgende Schaltung aufgebaut

Wenn ich mir die Spannung am Regeltrenntrafo auf 200Vac einstelle / kalibriere dann stimmt die bis ca 210Vac und runter bis auf 190Vac

Wenn ich am Regeltrenntrafo 230Vac einstelle zeigt mir mein Nano 245Vac an, bei 265Vac am Regeltrenntrafo werden mit 305Vac angezeigt

bei einer Spannung von 180Vac am Regeltrenntrafo sind auf einmal nur mehr 160Vac was mir angezeigt wird.

wo hab ich hier einen Denkfehler ?

uint32_t L1;

int analogInput = 0;
float vout = 0.0;
float vin = 0.0;
float R1 = 560000.0; // Widerstandswert R1 (560K)
float R2 = 1000.0; // Widerstandswert R2 (1K)
int values = 0;

void setup() {
  pinMode(A0, INPUT);
  analogReference(EXTERNAL);  // set ADC Extern 2.5V LM336-2.5
  Serial.begin(19200);
  }

void loop() 
{ 
   checkPhase();
  
   vout = (L1 * 2.5) / 1023;
   vin = vout / (R2 / (R1 + R2));
   Serial.println(vin);
   delay(500);
   
 }

void checkPhase()
{
  L1 = get_maxL1();
}

uint16_t get_maxL1() {
  uint16_t max_v = 0;
  for(uint8_t i = 0; i < 100; i++) {
    uint16_t r = analogRead(A0);  // read from analog channel 1 (A0)
    if(max_v < r) max_v = r;
    delayMicroseconds(200);
  }
  return max_v;
}

Kleiner Denkfehler, schau mall hier

KA, ob deine Schaltung ok ist....

Aber die ganze Rechnerei ist überflüssig!
Versuchs mal mit einer 2 Punkt Kalibrierung
Dann ist auch der 1023 Fehler weg.

Wie genau sind denn die zwei Widerstände?
Wie genau ist 1.0 / 561.0? Da sollte der Compiler eine Konstante bilden, bevor das mit vout multipliziert wird.
230v / 560k = 0,5 mA -> 0.1 W
Such mal, ob du was über die zulässige Spannung an deinem 560K Widerstand findest, und wenn du was von 100V findest, lass die Finger davon. (Generell, Wörtlich sowieso)
Bei der Schaltung verbietet es sich, mit dem Finger zu fühlen ob der Widerstand warm wird, aber wenn der Fehler bei höherer Spannung höher wird, könnte eine Temperaturabhängigkeit vorhanden sein.
Miss mal mit dem DMM, wie die Einstellung am Regeltrafo sich auf die Spannung an A0 auswirkt, und bedenke, dass das Messgerät nur die Hälfte von 0,7 (Halbwelle und eff.-Wert ) vom Spitzenwert anzeigen sollte, den der Arduino liefert.

denk ich hab den Fehler gefunden :sweat_smile:

wenn ich mein Fluke 289 auf LoZ einstelle wird der Regeltrenntrafo leicht belastet und dann stimmt auch die Spannung.

Dann kann ich mal Leiterplatine Ätzen und meine 3 Phasenüberwachung kann in betrieb gehen.

@michael_x Widerstände sind 0,1% und sind für 350Vac freigegeben nachher sind 2 in Serie 1,12MOhm und warm wird nichts hab da schon vorher mit der der Wärmebildkamera geschaut, dass wäre ja auch mein erster Gedanke gewesen.

Danke für die Infos / Hilfe

Die Unterschiede zwischen N, PE und Arduino GND kennst du sicher, wenn du dich nicht mehr hinter einem Trenntrafo versteckst. Lass dich nicht von der Elektriker-Gilde hier erwischen.

ich sehe keine 2,24M Widerstände :wink:

Niemals anfassen :joy: und nur mit galvanisch getrennten Programmiergerät drauf zugreifen.
da es nachher in einen 2DIN Hutschienengehäuse ist, kann das auch keiner anfassen :wink:

Wechen Spannungsbereich willst Du messen?

Du machst mehrere Fehler.
Wieso teilst Du die Spannung von max 230V eff ( 325V Spitze) auf 0,58V Spitze runter? Bei 2,5 Referenzspannung sind das gerade mal 237 ADC, das heißt nichtmal 1 ADC pro Volt.

Dein Spannungsteiler hat nur max 0,5 mA Querstrom. Damit die Spannung nicht einbricht, darf nur 0,05mA gezogen werden um den 0,1µF Kondensator auf Endspannung und für den internen Sample and Hold Kondensators des A/D Wandlers zu laden. Da ist aber mehr Strom nötig.

Bei jeder Spannungsänderung braucht es relativ viel Zeit damit der 0,1µF Kondensator auf Endwert geladen wird.

Wieso machst Du 100 Messungen und nimmst die höchste? Wenn der erste Meßwert zu hoch ist, weil die Spannung runtergeregelt wird, wird sich das system erst entladen muß, hast Du einen falsche Spannung. Wennschon 100 Messungen und den letzten Meßwert nehmen.

1024 wäre richtig.

Du schließt wahrscheinlich den Neutralleiter des Regeltrenntrafo über GND der 5V auf Erde. Das bringt Probleme.

Lösungsversuch: Nimm einen 230V-12V Transformator (ich meine da einen transformator nicht ein Netzteil) und schließe den Spannungsteiler an die 12V an. Bemesse den Spannungsteiler daß 5mA Querstrom fließt. Die 0,7V der Gleichrichterdiode wird Dir zwar einen kleinen Fehler einfügen aber der ist für die meisten Spannungsmessungen herausrechenbar.

Grüße Uwe

Dazu kommt noch das nur die obere _Halbwellen (1Diode) gemessen werden

Bereits in der Schule wurde mir eingepleut Schaltungen Idiotensicher zu machen, Das heißt die Schaltung muß auch in der schlimmsten denkbaren Falschhandhabung sicher Funktionieren / Sicher sein. Das ist Deine Idee: Keiner Anfassen und mit isolierten Programmiergerät reines Wunschdenken und einfach fahrlässig.

Da die Widerstände von 560k Ohm auf 2,2MOhm vergrößert werden sind meine Erörteungen noch mehr gültig.

Grüße Uwe

Die Platinen

kommen in das Gehäuse

und da kommt auch nachher keiner ohne weiteres zum Programmierport.

Nach deiner Meinung wäre dann jeder Shelly fahrlässig :thinking: aber man kann auch die Dinger im eingebauten Zustand flashen nur sollte man ein galvanisch getrennten Programmierer dazu verwenden :wink:

Die Platinen sind anders als die von Dir gezeigten Schaltpläne.

hab auch nur den einen Teil von meiner Schaltung kopiert der Relevant ist/war, das andere würde nur für Außenstehende sehr verwirrend wirken.

Ich beziehe mich auf den Spannungsteiler. Da ist der Kondensator ganz an einer anderen Stelle.

Der wird nicht bestückt, war aber in meinen ursprünglichen Design drinnen damit die Spannung geglättet wird, brauch ich aber in dem Fall nicht.
Da ich durch die 100 Durchgänge / 20ms gesamt immer die maximal Spannung pro Periode hab. Peaks werden auch noch behandelt wenn die Spannung länger wie 1 Sekunde über 265Vac / unter 190Vac oder die Differenz der 3 Phasen mehr als 20Volt beträgt wird auf Notstrom umgeschaltet.

Hab jetzt interne REF Spannung mit 1,1V aktiv
Spannungsteiler auf R1=1,12Mohm und R2= 2,2k
ergibt einen DC PEAK von
238mV bei 100Vac
462mV bei 200Vac
531mV bei 230Vac
923mV bei 400Vac

Nein, Du mißt durch den 0,1µF Kondensator nicht den Momentanwert der sinusförmigen Spannung sonder irgend eine geglättete Spannung. Der Kondensator wird wegen der Gleichrichterdiode nur geladen und bei einer niedrigeren Spannung nicht entladen. Der Kondensator wird einzig duch den Stromverbrauch des AD/Wandlers und des kleineren Widerstandes des Spannungsteilers entladen.

Wenn Du von zB von 200v auf 300V regelst, dann mißt Du am Anfang zu wenig, weil der 0,1µF und der interne Sample and Hold Kondensator im A/D Wandler des Atmega328 noch aufgeladen werden müssen und dies in einem Meßzyklus nicht passiert. Nach x Meßzyklen ist dann der besagte Kondensator auf Endwert geladen und die Messung stimmt.
Wenn Du aber von 300V auf 200V regelst mißt Du mit der ersten Messung noch die 300V und somit auch nach den anderen 99 Messungen wird nur die erste Messung als Messwert übergeben.

Ein Meßzyklus des A/D Wandler braucht Zeit. Mit 100 mal

delayMicroseconds(200);

bekommst Du nicht eine Periode (Vollwelle) sondern mehrere.

Wenn Du den Momentanwert der Wechselspannung messen willst, dann entfernen den Kondensator und nimm einen Impedanzwandler.

Hoffe Du das war jetzt verständlicher als das erste mal als ich das geschrieben habe.

Grüße Uwe

100 nF * 1k ist eine Zeitkonstante von 100 µs

Selbst bei dem inzwischen verwendeten 2k2 Widerstand sollte diese Dämpfung eine 50 Hz Spannung nicht sehr verfälschen.

Wenn jeder Messzyklus aus 100 * (ca.120µs messen + 200µs delay) besteht, sollten da sicher ein bis max. zwei Maxima erfasst worden sein.

Alles optimal, finde ich.

1 Like

@michael_x sind die 120µs Erfahrungswerte oder kann man das auch genau berechnen?
Im Datenblatt wird ja von 13 -260µs geschrieben, konnte da aber nichts genaueres finden.

Ist jetzt bei meinen Anwendungsfall nicht wirklich relevant da ja Anzugs und Abfall verzögert wird.

Platine und Gehäuse ist fertig :sweat_smile: Software wird noch optimiert :crazy_face:


Hab ich mal irgendwo gelesen und auch so praktisch erlebt. Genau berechnen geht bei einer unbekannten Spannung jedenfalls nicht.