Indholdsfortegnelse:

Måling af True-RMS AC-spænding: 14 trin
Måling af True-RMS AC-spænding: 14 trin

Video: Måling af True-RMS AC-spænding: 14 trin

Video: Måling af True-RMS AC-spænding: 14 trin
Video: Miteko UNI-T UT33B+ Palm Size Digital Multimeter Current AC DC Voltage Resistance Diode Battery Test 2024, Juli
Anonim
Image
Image
Demonstration
Demonstration

I dag vil vi bruge STM32 Maple Mini til at foretage en AC -aflæsning. I vores eksempel får vi RMS -værdien af elnettet. Dette er meget nyttigt for dem, der ønsker at overvåge det elektriske netværk til tingenes internet. Vi vil derefter oprette en applikation ved hjælp af Maple Mini's beregningseffekt, anvende et elektronisk kredsløb, der er i stand til at tillade optagelse af et 127Vac -signal, samt anvende root mean square (RMS) -beregningen på prøverne.

Trin 1: Demonstration

I vores samling i dag har vi STM32 ud over vores analoge kredsløb til at foretage input på 110. For at undgå stød skal du isolere modstanden, der kommer ind med 110.

Kredsløbet er ret følsomt. Jeg kommer ind med 110, men jeg reducerer det 168 gange ved hjælp af spændingsdeleren og sætter det i operationsforstærkeren, som har flere funktioner.

Vi har også nogle valgfri kondensatorer til kildefiltrering. Hvis din kilde er af god kvalitet, behøver du ikke bruge dem.

AD -input beregnes gennem oscilloskopet, hvor du ser en sinusformet, som ikke er 110 (men den er godt dannet). En anden ting er, at spændingen i vores elektriske netværk ikke er 110 (det er faktisk 127 volt). Men da vi gennemgår en stabilisator, justeres den til 115V.

Den værdi, der vises på den serielle skærm, er, hvad der beregnes i RMS, det vil sige den, der identificeres af Fluke -måleren.

Trin 2: Brugte ressourcer

Ressourcer brugt
Ressourcer brugt

• Jumpere

• En Maple Mini

• Protoboard

• En LM386 forstærker

• En symmetrisk kilde (+ 5V og -5V)

• En 10k multi-turn trimpot (eller potentiometer)

• Fire kondensatorer af 100nF polyester

• Tre 10k modstande

• Fire 470k modstande

• Én 5k6 modstand

• Én 1n4728A zener -diode

Trin 3: Blokdiagram

Blokdiagram
Blokdiagram

Trin 4: Skema

Ordning
Ordning

Dette er et kredsløb, jeg udviklede baseret på de specifikationer, jeg mener er de bedste til denne måling, men der er flere andre eksempler, der kan findes på internettet.

Trin 5: LM386 - Fastgørelse

LM386 - Fastgørelse
LM386 - Fastgørelse

LM386 har to forstærkere til konditionering eller signalforstærkning.

Trin 6: AmpOp - Differential (subtraktor)

AmpOp - Differential (subtraktor)
AmpOp - Differential (subtraktor)

Trin 7: AmpOp - Inverter Adder

AmpOp - Inverter Adder
AmpOp - Inverter Adder

Trin 8: Maple Mini - Pinage

Maple Mini - Pinage
Maple Mini - Pinage

Stifter mærket på:

Rød >> 3V3 Tolerant

Grøn >> 5V Tolerant

Trin 9: Maple Mini - Pinning - a / D Anvendes til optagelse

Maple Mini - Pinning - a / D Anvendes til optagelse
Maple Mini - Pinning - a / D Anvendes til optagelse

Jeg understreger her, at den pin, jeg brugte, er D11, der (i STMicroelectronics nomenklatur) er PA0.

Trin 10: Montering

montage
montage

Til vores kredsløb skal du bruge en symmetrisk kilde, som den vi skabte til dette projekt. Ellers skal du bruge to kilder.

Trin 11: Graf med de opnåede data

Graf med de opnåede data
Graf med de opnåede data

Trin 12: Beregning af RMS -værdien

Beregning af RMS -værdien
Beregning af RMS -værdien

Trin 13: Kildekode

Kildekode - Definitioner og konstanter

Først definerede vi pinlæsning som D11, samt de forskellige konstanter, der blev brugt i beregningerne.

#define leituraTensao D11 // AD CH0 no 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.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; // resulta em 1, 027 segundos para cada atualização // const int amostras = 35715; // resulta em 0, 514 segundos para cada atualização

Kildekode - Globale variabler

Nu definerer vi nogle globale variabler.

float 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 mínimo detectado float Vmed = 0,0; // armazena o valor médio entre Vmáx e Vmín

Kildekode - Opsætning ()

Start den serielle port ved 1 Mbps. Vi justerede AD -porten som input og ventede 5 sekunder, før vi begyndte at indsamle data. Standbytid er valgfri.

ugyldig opsætning () {Serial.begin (1000000); // inicia a porta serial em 1Mbps pinMode (leituraTensao, INPUT); // ajusta a porta do AD como entrada delay (5000); // aguarda 5s antes de iniciar a coleta. (valgfrit)}

Kildekode - Loop () - Starter dataindsamlingsvariablerne

I Loop har vi variablen til iteration. Her gemmer vi også aflæsningerne af AD i 0.0 og genstarter variablen VRMS også i 0.0.

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

Kildekode - Fanger og udfører de individuelle beregninger for hver prøve

På dette trin, hvis i er mindre end prøven, starter vi en prøveudtagningscyklus, indtil jeg når antallet af prøver. Vi kører analogRead for at læse den analoge port og beregne summen af kvadraterne af læsespændingerne. Endelig øger vi iteratoren.

while (i <amostras) {// inicia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead (leituraTensao); // læs en 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 o iterador}

Kildekode - Generelle beregninger af prøverne og identifikation af maksimum, minimum og gennemsnit

Vi anvender multiplikationsfakta for at bestemme spændingernes faktiske værdi. Vi registrerer, om værdien er maksimum eller minimum, og vi beregner gennemsnittet af de nuværende maksimum- og minimumværdier.

// 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 mínimo if (Vrms <Vmin) {Vmin = Vrms; } // calcula a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) /2.0;

Kildekode - Outputmuligheder

Vi har tre muligheder for at "plotte" outputværdien. Vi har output formateret til Arduino IDE seriel plotter, som CSV eller Jason.

// Saída formatada for plotter serial 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 ("}"); * / /* // også formateret som 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); */}

Trin 14: Filer

Download filerne:

PDF

INO

Anbefalede: