Inhaltsverzeichnis:
- Schritt 1: Demonstration
- Schritt 2: Verwendete Ressourcen
- Schritt 3: Blockdiagramm
- Schritt 4: Schema
- Schritt 5: LM386 - Pinning
- Schritt 6: AmpOp - Differential (Subtrahierer)
- Schritt 7: AmpOp - Inverter Adder
- Schritt 8: Ahorn Mini - Pinage
- Schritt 9: Maple Mini - Pinning - a / D beim Erfassen verwendet
- Schritt 10: Montage
- Schritt 11: Diagramm mit den erhaltenen Daten
- Schritt 12: Berechnung des RMS-Wertes
- Schritt 13: Quellcode
- Schritt 14: Dateien
Video: Messen der True-RMS-Wechselspannung - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
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
• 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
Schritt 4: Schema
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
Der LM386 verfügt über zwei Verstärker zur Aufbereitung oder Signalverstärkung.
Schritt 6: AmpOp - Differential (Subtrahierer)
Schritt 7: AmpOp - Inverter Adder
Schritt 8: Ahorn Mini - Pinage
Pins markiert auf:
Rot >> 3V3 tolerant
Grün >> 5V tolerant
Schritt 9: Maple Mini - Pinning - a / D beim Erfassen 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
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
Schritt 12: 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:
INO
Empfohlen:
Bodenfeuchtigkeit mit Raspberry Pi messen 4: 4 Schritte
Bodenfeuchte messen mit Raspberry Pi 4: Wissen Sie, wie oft Pflanzen gegossen werden müssen? Oder Pflanzen ausgegossen und verloren. Um dies zu lösen, dachte ich, es wäre umständlicher, wenn wir den Wert des Wassergehalts im Boden ermitteln können, um eine Entscheidung für die richtige Bewässerung der Pflanzen zu treffen
Wie man einen CubeSat herstellt, der die Temperatur messen kann – wikiHow
Wie man einen CubeSat herstellt, der die Temperatur messen kann: Kommen Sie mit und Sie werden einen 11x11x11x11-Würfel der reinen Fantasie sehen, nehmen Sie meine Hand und Sie werden die Temperatur des Mars sehen! (zur Melodie von Willy Wonkas „Imagination“) Heute zeige ich dir, dass du deinen ganz eigenen CubeSat bauen musst! Ich und meine Partner Alyssa und
So erstellen Sie einen Smart Pot mit NodeMCU, der von der App gesteuert wird – wikiHow
So erstellen Sie einen Smart Pot mit NodeMCU, der von einer App gesteuert wird: In dieser Anleitung bauen wir einen Smart Pot, der von einem ESP32 und einer Anwendung für Smartphones (iOS und Android) gesteuert wird. Wir verwenden NodeMCU (ESP32) für die Konnektivität und die Blynk-Bibliothek für das Cloud-IoT und die Anwendung auf dem Smartphone. Endlich haben wir
Messen Sie den Innenwiderstand der Batterie in 4 Schritten: 4 Schritte
4 Schritte zum Messen des Innenwiderstands des Akkus: Hier sind die 4 einfachen Schritte, die Ihnen helfen können, den Innenwiderstand des Akkus zu messen
Nitratkonzentration in Wasser mit EOS messen 1: 13 Schritte
Nitratkonzentration in Wasser messen mit EOS 1: Dies ist eine kurze Schritt-für-Schritt-Anleitung zur Verwendung der EOS1 zur Messung der Nitratkonzentration in Wasser. Ähnliche Schritte können für die Messung von Phosphat verwendet werden (ein anderes Testkind ist erforderlich)