Sadržaj:

Mjerenje True-RMS izmjeničnog napona: 14 koraka
Mjerenje True-RMS izmjeničnog napona: 14 koraka

Video: Mjerenje True-RMS izmjeničnog napona: 14 koraka

Video: Mjerenje True-RMS izmjeničnog napona: 14 koraka
Video: True RMS Multimetar 2024, Srpanj
Anonim
Image
Image
Demonstracija
Demonstracija

Danas ćemo koristiti STM32 Maple Mini za očitavanje izmjenične struje. U našem primjeru dobit ćemo RMS vrijednost električne mreže. Ovo je vrlo korisno za one koji žele nadzirati električnu mrežu za Internet stvari. Zatim ćemo izraditi aplikaciju koristeći računsku snagu Maple Mini -a, primijeniti elektronički krug sposoban za omogućavanje akvizicije signala od 127Vac, kao i primijeniti izračun korijena srednje vrijednosti (RMS) na uzorcima.

Korak 1: Demonstracija

U današnjoj montaži imamo STM32, osim našeg analognog kruga za unos 110. Kako biste izbjegli udarce, izolirajte otpornik koji ulazi za 110.

Krug je prilično osjetljiv. Ulazim sa 110, ali ga smanjujem 168 puta pomoću razdjelnika napona i stavljam u operativno pojačalo koje ima nekoliko funkcija.

Imamo i neke dodatne kondenzatore za filtriranje izvora. Ako je vaš izvor dobre kvalitete, ne morate ih koristiti.

AD ulaz izračunava se putem osciloskopa u kojem vidite sinusoidu koja nije 110 (ali je dobro oblikovana). Druga je stvar što napon u našoj električnoj mreži nije 110 (zapravo je 127 volti). No kako smo u fazi stabilizacije, on će se prilagoditi na 115V.

Vrijednost prikazana na serijskom monitoru je ono što se izračunava u RMS -u, odnosno onome koje je identificirao Fluke mjerač.

Korak 2: Korišteni resursi

Korišteni resursi
Korišteni resursi

• Džemperi

• Mini javor

• Protoboard

• Pojačalo LM386

• Simetrični izvor (+ 5V i -5V)

• 10k višekretni trimpot (ili potenciometar)

• Četiri kondenzatora od 100nF poliestera

• Tri 10k otpornika

• Četiri 470k otpornika

• Jedan otpornik 5k6

• Jedna zener dioda 1n4728A

Korak 3: Blok dijagram

Blok dijagram
Blok dijagram

Korak 4: Shema

Shema
Shema

Ovo je sklop koji sam razvio na temelju specifikacija za koje vjerujem da su najbolji za ovo mjerenje, ali postoji još nekoliko primjera koji se mogu pronaći na internetu.

Korak 5: LM386 - Prikvačivanje

LM386 - Prikvačivanje
LM386 - Prikvačivanje

LM386 ima dva pojačala za kondicioniranje ili pojačavanje signala.

Korak 6: AmpOp - Diferencijal (oduzimač)

AmpOp - Diferencijal (oduzimač)
AmpOp - Diferencijal (oduzimač)

Korak 7: AmpOp - Invertersko sabiranje

AmpOp - Invertersko sabiranje
AmpOp - Invertersko sabiranje

Korak 8: Maple Mini - Pinage

Maple Mini - Pinage
Maple Mini - Pinage

Igle označene na:

Crveno >> 3V3 Tolerantno

Zelena >> Tolerantna na 5V

Korak 9: Javor Mini - Prikvačivanje - a / D Koristi se pri snimanju

Maple Mini - Pinning - a / D Koristi se za snimanje
Maple Mini - Pinning - a / D Koristi se za snimanje

Ovdje naglašavam da je pin koji sam koristio D11 koji je (u nomenklaturi STMicroelectronics) PA0.

Korak 10: Montaža

Skupština
Skupština

Za naš krug trebat će vam simetrični izvor, poput onog koji smo stvorili za ovaj projekt. Inače će vam trebati dva izvora.

Korak 11: Grafikon s dobivenim podacima

Grafikon s dobivenim podacima
Grafikon s dobivenim podacima

Korak 12: Izračun RMS vrijednosti

Izračunavanje RMS vrijednosti
Izračunavanje RMS vrijednosti

Korak 13: Izvorni kod

Izvorni kod - Definicije i konstante

Isprva smo definirali očitanje pina kao D11, kao i različite konstante korištene u izračunima.

#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 razgovara 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

Izvorni kod - Globalne varijable

Sada definiramo neke globalne varijable.

plovak 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

Izvorni kod - Postavljanje ()

Pokrenite serijski port na 1Mbps. Prilagodili smo AD port kao ulaz i čekali 5 sekundi prije nego što smo počeli prikupljati podatke. Vrijeme pripravnosti nije obavezno.

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

Izvorni kod - Petlja () - Pokreće varijable prikupljanja podataka

U petlji imamo varijablu za iteraciju. Ovdje također pohranjujemo očitanja AD u 0.0 i ponovno pokrećemo varijablu VRMS također u 0.0.

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

Izvorni kod - Snima i izvršava pojedinačne izračune za svaki uzorak

U ovoj fazi, ako je i manji od uzorka, započinjemo ciklus uzorkovanja sve dok i ne dosegne broj uzoraka. Pokrećemo analogRead za čitanje analognog porta i izračunavanje zbroja kvadrata očitanih napona. Konačno, povećavamo 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 ++; // uvećanje o iteradoru}

Izvorni kod - Opći izračuni uzoraka i identifikacija maksimuma, minimuma i prosjeka

Primjenjujemo činjenicu množenja kako bismo odredili stvarnu vrijednost napona. Otkrivamo je li vrijednost maksimalna ili minimalna te izračunavamo prosjek trenutnih maksimalnih i minimalnih vrijednosti.

// 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;

Izvorni kod - Opcije izlaza

Imamo tri mogućnosti za "iscrtavanje" izlazne vrijednosti. Imamo izlaz formatiran na Arduino IDE serijskom ploteru, poput CSV -a ili Jasona.

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

Korak 14: Datoteke

Preuzmite datoteke:

PDF

INO

Preporučeni: