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, Novembar
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 stvoriti aplikaciju koristeći računsku snagu Maple Mini -a, primijeniti elektroničko kolo sposobno za omogućavanje akvizicije 127Vac signala, kao i primijeniti izračun korijena srednje vrijednosti (RMS) na uzorcima.

Korak 1: Demonstracija

U današnjem sastavu imamo STM32, pored našeg analognog kola za unos 110. Da 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 stvar je da napon u našoj električnoj mreži nije 110 (zapravo je 127 volti). Ali 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 identifikovao Fluke mjerač.

Korak 2: Korišteni resursi

Korišteni resursi
Korišteni resursi

• Džemperi

• Maple Mini

• 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 najbolje za ovo mjerenje, ali postoji nekoliko drugih primjera koji se mogu pronaći na internetu.

Korak 5: LM386 - Prikačivanje

LM386 - Prikačivanje
LM386 - Prikač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: Javor Mini - Pinaža

Maple Mini - Pinage
Maple Mini - Pinage

Igle označene na:

Crveno >> 3V3 Tolerantno

Zelena >> 5V Tolerantna

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

Maple Mini - Prikačivanje - a / D Koristi se pri snimanju
Maple Mini - Prikačivanje - a / D Koristi se pri snimanju

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

Korak 10: Montaža

Montaža
Montaža

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

Korak 11: Grafikon sa prikupljenim podacima

Grafikon sa pribavljenim podacima
Grafikon sa pribavljenim podacima

Korak 12: Izračunavanje RMS vrijednosti

Izračunavanje RMS vrijednosti
Izračunavanje RMS vrijednosti

Korak 13: Izvorni kod

Izvorni kod - Definicije i konstante

U početku smo očitavanje pina definirali kao D11, kao i različite konstante korištene u proračunima.

#define leituraTensao D11 // AD CH0 no pino PA0 // valor teórico djelitelj tenzije = 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 ili vrijedna vrijednost za 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 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 - Loop () - 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; // varijable para iteração float leitura = 0.0; // armazena kao leituras do AD Vrms = 0.0; // reinicia a variaável Vrms

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

U ovoj fazi, ako je i manji od uzorka, započinjemo ciklus uzorkovanja sve dok i ne dostigne 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 prorač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 i izračunavamo prosjek trenutnih maksimalnih i minimalnih vrijednosti.

// Aplikacijski fator de multiplicação za određivanje o vrijednostima vrijednih das tensões Vrms = (sqrt (Vrms /amostras)) * fatorMultiplicacao; // otkrivamo da li je vrijedan i maksimalan ako (Vrms> Vmax) {Vmax = Vrms; } // detektuje se valor mimo ako (Vrms <Vmin) {Vmin = Vrms; } // izračunava a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) /2.0;

Izvorni kod - Opcije izlaza

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

// forma za parater plotera serijski IDE Arduino Serial.print (Vrms, 3); Serial.print (","); Serial.print (Vmax, 3); Serial.print (","); Serial.print (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); /* // formata za 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 ("}"); * / /* // forma za 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); */}

Korak 14: Datoteke

Preuzmite datoteke:

PDF

JA NE

Preporučuje se: