Inhoudsopgave:

True-RMS AC-spanning meten: 14 stappen
True-RMS AC-spanning meten: 14 stappen

Video: True-RMS AC-spanning meten: 14 stappen

Video: True-RMS AC-spanning meten: 14 stappen
Video: Measuring voltage the right way #electronics #electricity #electrician #voltage #outlet 2024, November
Anonim
Image
Image
Demonstratie
Demonstratie

Vandaag zullen we de STM32 Maple Mini gebruiken om een AC-meting uit te voeren. In ons voorbeeld krijgen we de RMS-waarde van het elektriciteitsnet. Dit is erg handig voor degenen die het elektrische netwerk willen controleren op het internet der dingen. We zullen dan een applicatie maken met behulp van de rekenkracht van de Maple Mini, een elektronische schakeling toepassen die de acquisitie van een 127Vac-signaal mogelijk maakt, evenals de RMS-berekening (root mean square) op de monsters.

Stap 1: Demonstratie

In onze huidige montage hebben we de STM32, naast ons analoge circuit om de ingang van 110 te maken. Om schokken te voorkomen, isoleer je de weerstand die binnenkomt met 110.

De schakeling is behoorlijk gevoelig. Ik kom binnen met 110, maar ik verlaag het 168 keer met behulp van de spanningsdeler en stop het in de operationele versterker, die verschillende functies heeft.

We hebben ook enkele optionele condensatoren voor bronfiltering. Als uw bron van goede kwaliteit is, hoeft u deze niet te gebruiken.

De AD-ingang wordt berekend via de oscilloscoop, waarin je een sinusoïde ziet, die niet 110 is (maar wel goed gevormd). Een ander ding is dat de spanning in ons elektrische netwerk niet 110 is (het is eigenlijk 127 volt). Maar aangezien we een stabilisator ondergaan, zal deze zich aanpassen aan 115V.

De waarde die op de seriële monitor wordt weergegeven, wordt berekend in RMS, dat wil zeggen de waarde die wordt geïdentificeerd door de Fluke Meter.

Stap 2: Gebruikte bronnen

Gebruikte bronnen
Gebruikte bronnen

• Truien

• Een esdoorn Mini

• Protobord

• Een LM386-versterker

• Een symmetrische bron (+ 5V en -5V)

• Een 10k multi-turn trimpot (of potentiometer)

• Vier condensatoren van 100nF polyester

• Drie 10k-weerstanden

• Vier weerstanden van 470k

• Eén weerstand van 5k6

• Eén 1n4728A zenerdiode

Stap 3: Blokdiagram

Blokdiagram
Blokdiagram

Stap 4: Schema

Schema
Schema

Dit is een circuit dat ik heb ontwikkeld op basis van de specificaties die volgens mij het beste zijn voor deze meting, maar er zijn verschillende andere voorbeelden die op internet te vinden zijn.

Stap 5: LM386 - Vastzetten

LM386 - Vastzetten
LM386 - Vastzetten

De LM386 heeft twee versterkers voor conditionering of signaalversterking.

Stap 6: AmpOp - Differentieel (aftrekker)

AmpOp - Differentieel (aftrekker)
AmpOp - Differentieel (aftrekker)

Stap 7: AmpOp - Inverter Adder

AmpOp - Inverter Adder
AmpOp - Inverter Adder

Stap 8: Esdoorn Mini - Pinage

Esdoorn Mini - Pinage
Esdoorn Mini - Pinage

Pinnen gemarkeerd op:

Rood >> 3V3 tolerant

Groen >> 5V tolerant

Stap 9: Maple Mini - Pinning - a / D gebruikt bij het vastleggen

Maple Mini - Pinning - a / D Gebruikt bij het vastleggen
Maple Mini - Pinning - a / D Gebruikt bij het vastleggen

Ik benadruk hier dat de pin die ik heb gebruikt de D11 is die (in de nomenclatuur van de STMicroelectronics) de PA0 is.

Stap 10: Montage

samenkomst
samenkomst

Voor ons circuit heb je een symmetrische bron nodig, zoals die we voor dit project hebben gemaakt. Anders heb je twee bronnen nodig.

Stap 11: Grafiek met de verkregen gegevens

Grafiek met de verkregen gegevens
Grafiek met de verkregen gegevens

Stap 12: De RMS-waarde berekenen

De RMS-waarde berekenen
De RMS-waarde berekenen

Stap 13: Broncode

Broncode - Definities en constanten

In eerste instantie hebben we de pin-uitlezing gedefinieerd als D11, evenals de verschillende constanten die in de berekeningen zijn gebruikt.

#define leituraTensao D11 //AD CH0 no pino PA0 //valor teórico deler van 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,3V const float Vcc = 3,3; //valor teórico do offset do amplificador = 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; //resultaat op 1, 027 segundos para cada atualização //const int amostras = 35715; // resultaten op 0, 514 segundos para cada atualização

Broncode - Globale variabelen

Nu definiëren we enkele globale variabelen.

vlotter 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 of valor médio entre Vmáx en Vmin

Broncode - Instellingen ()

Start de seriële poort op 1 Mbps. We hebben de AD-poort als invoer aangepast en 5 seconden gewacht voordat we begonnen met het verzamelen van gegevens. Standby-tijd is optioneel.

void setup() { Serial.begin(1000000); //inicia een porta seriële em 1Mbps pinMode (leituraTensao, INPUT); // ajusta a porta do AD como entrada delay (5000); //aguarda 5s antes de iniciar a coleta. (optioneel) }

Broncode - Loop () - Start de gegevensverzamelingsvariabelen

In de Loop hebben we de variabele voor iteratie. Hier slaan we ook de waarden van AD op in 0.0 en herstarten we de variabele VRMS ook in 0.0.

void loop() { int i = 0; //variável para iteração float leitura = 0.0; //armazena als leituras AD Vrms = 0.0; //reinicia a variável Vrms

Broncode - Legt de individuele berekeningen voor elk monster vast en voert deze uit

In dit stadium, als i kleiner is dan het monster, starten we een bemonsteringscyclus totdat i het aantal monsters heeft bereikt. We gebruiken analogRead om de analoge poort te lezen en de som van de kwadraten van de leesspanningen te berekenen. Ten slotte verhogen we de 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); //calcula a soma dos quadrados das tensões lidas i++; //incrementa of iterador}

Broncode - Algemene berekeningen van de monsters en identificatie van maximum, minimum en gemiddelde

We passen het vermenigvuldigingsfeit toe om de werkelijke waarde van de spanningen te bepalen. We detecteren of de waarde maximum of minimum is en berekenen het gemiddelde van de huidige maximum- en minimumwaarden.

//Toepassing van de multiplicação determinar of 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; } //calcula a média dos valores máximo en minimo atuais Vmed = (Vmax + Vmin) / 2.0;

Broncode - Uitvoeropties

We hebben drie opties voor het "plotten" van de uitvoerwaarde. We hebben uitvoer geformatteerd naar de Arduino IDE seriële plotter, zoals CSV of Jason.

//saída formatada para plotter seriële IDE Arduino Serial.print (Vrms, 3); Serieel.print(", "); Serial.print (Vmax, 3); Serieel.print(", "); Serial.print (Vmin, 3); Serieel.print(", "); Serial.println(Vmed, 3); /* //saída formatada como json Serial.print("{"instante(ms)\":"); Serial.print(millis()); Serieel.print(", "); Serial.print("\"Vrms(V)\":"); Serial.print (Vrms, 3); Serieel.print(", "); Serial.print("\"Vmax(V)\":"); Serial.print (Vmax, 3); Serieel.print(", "); Serial.print("\"Vmin(V)\":"); Serial.print (Vmin, 3); Serieel.print(", "); Serial.print("\"Vmed(V)\":"); Serial.print (Vmed, 3); Serieel.println("}"); */ /* //saída formatada como CSV Serial.print(millis()); Serieel.print(", "); Serial.print (Vrms, 3); Serieel.print(", "); Serial.print (Vmax, 3); Serieel.print(", "); Serial.print (Vmin, 3); Serieel.print(", "); Serial.println(Vmed, 3); */ }

Stap 14: Bestanden

Download de bestanden:

PDF

INO

Aanbevolen: