Kazalo:

Merjenje AC-napetosti True-RMS: 14 korakov
Merjenje AC-napetosti True-RMS: 14 korakov

Video: Merjenje AC-napetosti True-RMS: 14 korakov

Video: Merjenje AC-napetosti True-RMS: 14 korakov
Video: Why True-RMS multimeter? 2024, November
Anonim
Image
Image
Demonstracija
Demonstracija

Danes bomo za branje izmeničnega toka uporabljali STM32 Maple Mini. V našem primeru bomo dobili RMS vrednost električnega omrežja. To je zelo koristno za tiste, ki želijo spremljati električno omrežje za internet stvari. Nato bomo z uporabo računalniške moči Maple Mini ustvarili aplikacijo, uporabili elektronsko vezje, ki lahko omogoči pridobivanje 127Vac signala, ter uporabili izračun korenskega povprečja (RMS) na vzorcih.

1. korak: demonstracija

V današnji sestavi imamo poleg analognega vezja tudi STM32 za vnos 110. Da bi se izognili udarcem, izolirajte upor, ki vstopa za 110.

Vezje je precej občutljivo. Vstopam s 110, vendar ga z delilnikom napetosti zmanjšam 168 -krat in ga vstavim v operacijski ojačevalnik, ki ima več funkcij.

Imamo tudi nekaj izbirnih kondenzatorjev za filtriranje virov. Če je vaš vir dobre kakovosti, vam jih ni treba uporabiti.

Vhod AD se izračuna preko osciloskopa, v katerem vidite sinusoido, ki ni 110 (vendar je dobro oblikovana). Druga stvar je, da napetost v našem električnem omrežju ni 110 (dejansko je 127 voltov). Ker pa smo pod stabilizatorjem, se bo prilagodil na 115V.

Vrednost, prikazana na serijskem monitorju, je tista, ki se izračuna v RMS, to je tista, ki jo identificira merilnik Fluke.

2. korak: Uporabljeni viri

Uporabljeni viri
Uporabljeni viri

• Skakalci

• javorjev mini

• Protoboard

• Ojačevalnik LM386

• Simetrični vir (+ 5V in -5V)

• 10-milimetrski trimpot (ali potenciometer)

• Štirje kondenzatorji iz 100nF poliestra

• Trije 10k upori

• Štirje 470k upori

• En upor 5k6

• Ena zener dioda 1n4728A

3. korak: Blokovni diagram

Blok diagram
Blok diagram

4. korak: Shema

Shema
Shema

To vezje sem razvil na podlagi specifikacij, za katere menim, da so najboljše za to meritev, vendar obstaja več drugih primerov, ki jih lahko najdemo na internetu.

5. korak: LM386 - Pripenjanje

LM386 - Pripenjanje
LM386 - Pripenjanje

LM386 ima dva ojačevalnika za kondicioniranje ali ojačanje signala.

Korak 6: AmpOp - Diferencial (odštevalec)

AmpOp - Diferencial (odštevalec)
AmpOp - Diferencial (odštevalec)

7. korak: AmpOp - Inverter Adder

AmpOp - Inverter Adder
AmpOp - Inverter Adder

8. korak: Maple Mini - Pinage

Maple Mini - Pinage
Maple Mini - Pinage

Zatiči označeni na:

Rdeča >> 3V3 Tolerantna

Zelena >> 5V tolerantna

9. korak: Maple Mini - Pripenjanje - a / D Uporablja se pri zajemanju

Maple Mini - Pinning - a / D Uporablja se pri zajemanju
Maple Mini - Pinning - a / D Uporablja se pri zajemanju

Tukaj poudarjam, da sem pin, ki sem ga uporabil, D11, ki je (v nomenklaturi STMicroelectronics) PA0.

10. korak: Montaža

Montaža
Montaža

Za naše vezje boste potrebovali simetričen vir, kakršen smo ustvarili za ta projekt. V nasprotnem primeru boste potrebovali dva vira.

11. korak: Graf z pridobljenimi podatki

Graf s pridobljenimi podatki
Graf s pridobljenimi podatki

12. korak: Izračun vrednosti RMS

Izračun vrednosti RMS
Izračun vrednosti RMS

Korak: Izvorna koda

Izvorna koda - definicije in konstante

Najprej smo definirali odčitavanje nožic kot D11, pa tudi različne konstante, uporabljene pri izračunih.

#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 pogovorão do AD = 3.3 / 4095.0 const float fatorAD = Vcc / 4095.0; const int amostras = 71429; // rezultati em 1, 027 segundos para cada atualização // const int amostras = 35715; // rezultati em 0, 514 segundos para cada atualização

Izvorna koda - globalne spremenljivke

Zdaj definiramo nekatere globalne spremenljivke.

plovec 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

Izvorna koda - Nastavitev ()

Zaženite serijska vrata pri 1Mbps. Vrata AD smo prilagodili kot vhod in počakali 5 sekund, preden smo začeli zbirati podatke. Čas pripravljenosti ni obvezen.

void setup () {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. (neobvezno)}

Source Code - Loop () - Zažene spremenljivke zbiranja podatkov

V zanki imamo spremenljivko za ponovitev. Tu shranimo tudi odčitke AD v 0.0 in znova zaženemo spremenljivko VRMS tudi v 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 variaável Vrms

Izvorna koda - zajame in izvede posamezne izračune za vsak vzorec

Na tej stopnji, če je i manjši od vzorca, začnemo cikel vzorčenja, dokler i ne doseže števila vzorcev. Zaženemo analogRead za branje analognih vrat in izračun vsote kvadratov odčitanih napetosti. Na koncu povečujemo 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); // izračunava soma dos quadrados das tensões lidas i ++; // prirast o iteradorju}

Izvorna koda - Splošni izračuni vzorcev in identifikacija največjega, najmanjšega in povprečja

Za določitev dejanske vrednosti napetosti uporabimo dejstvo množenja. Zaznamo, ali je vrednost največja ali najnižja, in izračunamo povprečje trenutnih največjih in najnižjih vrednosti.

// 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; } // izračunaj a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) /2,0;

Izvorna koda - možnosti izhoda

Imamo tri možnosti za "risanje" izhodne vrednosti. Imamo izhod, oblikovan v serijski ploter Arduino IDE, kot sta CSV ali Jason.

// formatada za ploter serijski IDE Arduino Serial.print (Vrms, 3); Serial.print (","); Serijski.tisk (Vmax, 3); Serial.print (","); Serijski.tisk (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); /* // formatada za json Serial.print ("{" instante (ms) ":"); Serial.print (millis ()); Serial.print (","); Serial.print ("\" Vrms (V) ":"); Serijski.tisk (Vrms, 3); Serial.print (","); Serial.print ("\" Vmax (V) ":"); Serijski.tisk (Vmax, 3); Serial.print (","); Serial.print ("\" Vmin (V) ":"); Serijski.tisk (Vmin, 3); Serial.print (","); Serial.print ("\" Vmed (V) ":"); Serijski.tisk (Vmed, 3); Serial.println ("}"); * / /* // saída formatada como CSV Serial.print (millis ()); Serial.print (","); Serijski.tisk (Vrms, 3); Serial.print (","); Serijski.tisk (Vmax, 3); Serial.print (","); Serijski.tisk (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); */}

14. korak: Datoteke

Prenesite datoteke:

PDF

JAZ NE

Priporočena: