Inhaltsverzeichnis:

Messen der True-RMS-Wechselspannung - Gunook
Messen der True-RMS-Wechselspannung - Gunook

Video: Messen der True-RMS-Wechselspannung - Gunook

Video: Messen der True-RMS-Wechselspannung - Gunook
Video: Effektivwert, TRUE RMS Gleichrichtwert und Formfaktor / Wechselspannung / Elektrotechnik 2024, Juli
Anonim
Image
Image
Demonstration
Demonstration

Heute verwenden wir den STM32 Maple Mini, um eine AC-Messung durchzuführen. In unserem Beispiel erhalten wir den RMS-Wert des Stromnetzes. Dies ist sehr nützlich für diejenigen, die das elektrische Netz für das Internet der Dinge überwachen möchten. Anschließend erstellen wir eine Anwendung mit der Rechenleistung des Maple Mini, wenden eine elektronische Schaltung an, die die Erfassung eines 127-Vac-Signals ermöglicht, sowie die Berechnung des Effektivwerts (RMS) auf die Samples.

Schritt 1: Demonstration

In unserer heutigen Baugruppe haben wir zusätzlich zu unserer analogen Schaltung den STM32, um den Eingang von 110 zu machen. Um Stöße zu vermeiden, isolieren Sie den Widerstand, der eingeht, um 110.

Die Schaltung ist recht empfindlich. Ich komme mit 110 rein, aber ich reduziere es mit dem Spannungsteiler auf das 168-fache und stecke es in den Operationsverstärker, der mehrere Funktionen hat.

Wir haben auch einige optionale Kondensatoren für die Quellenfilterung. Wenn Ihre Quelle von guter Qualität ist, müssen Sie sie nicht verwenden.

Der AD-Eingang wird durch das Oszilloskop berechnet, in dem Sie eine Sinuskurve sehen, die nicht 110 ist (aber gut geformt ist). Eine andere Sache ist, dass die Spannung in unserem Stromnetz nicht 110 beträgt (eigentlich sind es 127 Volt). Aber da wir einen Stabilisator durchlaufen, wird er sich auf 115 V einstellen.

Der auf dem seriellen Monitor angezeigte Wert wird in RMS berechnet, d. h. der vom Fluke Meter identifizierte Wert.

Schritt 2: Verwendete Ressourcen

Verwendete Ressourcen
Verwendete Ressourcen

• Jumper

• Ein Ahorn-Mini

• Protoboard

• Ein LM386-Verstärker

• Eine symmetrische Quelle (+ 5 V und -5 V)

• Ein 10k Multiturn-Trimpot (oder Potentiometer)

• Vier Kondensatoren aus 100nF Polyester

• Drei 10k Widerstände

• Vier 470k-Widerstände

• Ein 5k6 Widerstand

• Eine 1n4728A Zenerdiode

Schritt 3: Blockdiagramm

Blockschaltbild
Blockschaltbild

Schritt 4: Schema

Planen
Planen

Dies ist eine Schaltung, die ich basierend auf den Spezifikationen entwickelt habe, von denen ich glaube, dass sie die besten für diese Messung sind, aber es gibt mehrere andere Beispiele, die im Internet zu finden sind.

Schritt 5: LM386 - Pinning

LM386 - Pinning
LM386 - Pinning

Der LM386 verfügt über zwei Verstärker zur Aufbereitung oder Signalverstärkung.

Schritt 6: AmpOp - Differential (Subtrahierer)

AmpOp - Differential (Subtrahierer)
AmpOp - Differential (Subtrahierer)

Schritt 7: AmpOp - Inverter Adder

AmpOp - Wechselrichter-Addierer
AmpOp - Wechselrichter-Addierer

Schritt 8: Ahorn Mini - Pinage

Ahorn Mini - Pinage
Ahorn Mini - Pinage

Pins markiert auf:

Rot >> 3V3 tolerant

Grün >> 5V tolerant

Schritt 9: Maple Mini - Pinning - a / D beim Erfassen verwendet

Maple Mini - Pinning - a / D Wird beim Capturing verwendet
Maple Mini - Pinning - a / D Wird beim Capturing verwendet

Ich betone hier, dass der von mir verwendete Pin der D11 ist, der (in der Nomenklatur der STMicroelectronics) der PA0 ist.

Schritt 10: Montage

Montage
Montage

Für unsere Schaltung benötigen Sie eine symmetrische Quelle, wie wir sie für dieses Projekt erstellt haben. Andernfalls benötigen Sie zwei Quellen.

Schritt 11: Diagramm mit den erhaltenen Daten

Diagramm mit den erhaltenen Daten
Diagramm mit den erhaltenen Daten

Schritt 12: Berechnung des RMS-Wertes

Berechnung des RMS-Wertes
Berechnung des RMS-Wertes

Schritt 13: Quellcode

Quellcode - Definitionen und Konstanten

Zuerst haben wir den Pin-Wert als D11 definiert, sowie die verschiedenen Konstanten, die in den Berechnungen verwendet werden.

#define leituraTensao D11 //AD CH0 kein Pino PA0 //valor teórico divisor de tensão = 168.85714285714285714286 const float fatorDivisor = 168.40166345742404792461; //valor teórico do ganho de amplificação = 1.0 const float fatorAmplificador = 1.0; //Valor usado na multiplicação da leitura const float fatorMultiplicacao = fatorDivisor * fatorAmplificador; //Valor teórico da Tensão de alimentação Vcc = 3,3 V const float Vcc = 3,3; // Valor teórico tun Offset tun Verstärker = Vcc / 2,0; const float offSet = 1,66; // fator teórico da conversão do AD = 3,3 / 4095.0 const float fatorAD = Vcc / 4095.0; const int amostras = 71429; //resulta em 1, 027 segundos para cada atualização //const int amostras = 35715; //resulta em 0, 514 segundos para cada atualização

Quellcode - Globale Variablen

Nun definieren wir einige globale Variablen.

Schwimmer Vrms = 0,0; // Armazena o Valor RMS da Tensãofloat Vmax = 0.0; //armazena o valor máximo Detectado float Vmin = 10000.0; //armazena o valor minimo Detectado float Vmed = 0.0; //armazena o valor médio entre Vmáx e Vmín

Quellcode - Einrichtung ()

Starten Sie den seriellen Port mit 1 Mbit/s. Wir haben den AD-Port als Eingang eingestellt und 5 Sekunden gewartet, bevor wir mit der Datenerfassung begonnen haben. Standby-Zeit ist optional.

Void setup () { Serial.begin (1000000); // Initialisierung einer Porta Serial em 1Mbps PinMode (leituraTensao, INPUT); // ajusta a porta do AD como entrada delay (5000); //aguarda 5s antes de iniciar a coleta. (optional) }

Quellcode - Schleife () - Startet die Datenerfassungsvariablen

In der Schleife haben wir die Variable für die Iteration. Hier speichern wir auch die Messwerte von AD in 0.0 und starten die Variable VRMS ebenfalls in 0.0 neu.

Void Schleife () {int i = 0; //variável para iteração float leitura = 0.0; // Armazena als Leituras tun AD Vrms = 0.0; //reinicia a variável Vrms

Quellcode - Erfasst und führt die einzelnen Berechnungen für jede Probe aus

Wenn i in diesem Stadium kleiner ist als der Abtastwert, starten wir einen Abtastzyklus, bis i die Anzahl der Abtastwerte erreicht. Wir führen analogRead aus, um den analogen Port zu lesen und die Summe der Quadrate der gelesenen Spannungen zu berechnen. Schließlich inkrementieren wir den Iterator.

while (i <amostras) {//inicia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead (leituraTensao); //lê a porta analógica //Serial.println(leitura); //Descomente se quiser ver o sinal bruto do AD Vrms = Vrms + pow((((leitura * fatorAD) - offSet), 2.0); // berechne ein soma dos quadrados das tensões lidas i++; //Incrementa oder Iterador}

Quellcode - Allgemeine Berechnungen der Stichproben und Identifizierung von Maximum, Minimum und Durchschnitt

Wir wenden den Multiplikationsfaktor an, um den tatsächlichen Wert der Spannungen zu bestimmen. Wir erkennen, ob der Wert maximal oder minimal ist und berechnen den Durchschnitt der aktuellen Maximal- und Minimalwerte.

// Aplicando fator de multiplicação para determinar o valor real das tensões Vrms = (sqrt(Vrms / amostras)) * fatorMultiplicacao; // detecta se é um valor é máximo if (Vrms > Vmax) { Vmax = Vrms; } //detecta se é um valor minimo if (Vrms < Vmin) { Vmin = Vrms; aufrechtzuerhalten. // Berechnen eines Mediums dos valores máximo e minimo atuais Vmed = (Vmax + Vmin) / 2,0;

Quellcode - Ausgabeoptionen

Wir haben drei Möglichkeiten, den Ausgabewert zu "plotten". Wir haben die Ausgabe auf den seriellen Plotter Arduino IDE formatiert, wie CSV oder Jason.

// Formatada für Plotter serielle IDE Arduino Serial.print (Vrms, 3); Serial.print (", "); Serial.print (Vmax, 3); Serial.print (", "); Serial.print (Vmin, 3); Serial.print (", "); Serial.println (Vmed, 3); /* //saída formatada como json Serial.print("{"instante(ms)\":"); Serial.print (millis ()); Serial.print (", "); Serial.print("\"Vrms(V)\":"); Serial.print (Vrms, 3); Serial.print (", "); Serial.print("\"Vmax(V)\":"); Serial.print (Vmax, 3); Serial.print (", "); Serial.print("\"Vmin(V)\":"); Serial.print (Vmin, 3); Serial.print (", "); Serial.print("\"Vmed(V)\":"); Serial.print (Vmed, 3); Serial.println("}"); */ /* //saída formatada como CSV Serial.print (millis()); Serial.print (", "); Serial.print (Vrms, 3); Serial.print (", "); Serial.print (Vmax, 3); Serial.print (", "); Serial.print (Vmin, 3); Serial.print (", "); Serial.println (Vmed, 3); */ }

Schritt 14: Dateien

Laden Sie die Dateien herunter:

PDF

INO

Empfohlen: