Cuprins:

Măsurarea tensiunii AC True-RMS: 14 pași
Măsurarea tensiunii AC True-RMS: 14 pași

Video: Măsurarea tensiunii AC True-RMS: 14 pași

Video: Măsurarea tensiunii AC True-RMS: 14 pași
Video: Uni-t UT 256 B true RMS fork meter. Multimetru digital tip furcă, de la uni-t. 2024, Noiembrie
Anonim
Image
Image
Demonstrație
Demonstrație

Astăzi, vom folosi STM32 Maple Mini pentru a face o citire AC. În exemplul nostru, vom obține valoarea RMS a rețelei electrice. Acest lucru este foarte util pentru cei care doresc să monitorizeze rețeaua electrică pentru internetul obiectelor. Vom crea apoi o aplicație folosind puterea de calcul a Maple Mini, vom aplica un circuit electronic capabil să permită achiziționarea unui semnal de 127Vac, precum și să aplicăm calculul pătratului mediu rădăcină (RMS) pe eșantioane.

Pasul 1: demonstrație

În ansamblul nostru de astăzi, avem STM32, pe lângă circuitul nostru analogic pentru a face intrarea de 110. Pentru a evita șocurile, izolați rezistorul care intră cu 110.

Circuitul este destul de sensibil. Mă ocup de 110, dar îl reduc de 168 ori folosind divizorul de tensiune și îl pun în amplificatorul operațional, care are mai multe funcții.

Avem și niște condensatori opționali pentru filtrarea sursei. Dacă sursa dvs. este de bună calitate, nu este nevoie să le utilizați.

Intrarea AD este calculată prin osciloscop, în care vedeți un sinusoid, care nu este 110 (dar este bine format). Un alt lucru este că tensiunea din rețeaua noastră electrică nu este de 110 (este de fapt 127 de volți). Dar, deoarece suntem supuși unui stabilizator, acesta se va regla la 115V.

Valoarea afișată pe monitorul serial este cea calculată în RMS, adică cea identificată de Fluke Meter.

Pasul 2: Resurse utilizate

Resurse utilizate
Resurse utilizate

• Jersee

• Un Maple Mini

• Protoboard

• Un amplificator LM386

• O sursă simetrică (+ 5V și -5V)

• Un trimpot (sau potențiometru) 10k multi-turn

• Patru condensatori din poliester 100nF

• Trei rezistențe de 10k

• Patru rezistențe de 470k

• Un rezistor 5k6

• O diodă zener 1n4728A

Pasul 3: Diagrama bloc

Diagramă bloc
Diagramă bloc

Pasul 4: Schema

Sistem
Sistem

Acesta este un circuit pe care l-am dezvoltat pe baza specificațiilor care cred că sunt cele mai bune pentru această măsurare, dar există și alte câteva exemple care pot fi găsite pe internet.

Pasul 5: LM386 - Fixare

LM386 - Fixare
LM386 - Fixare

LM386 are doi amplificatori pentru condiționare sau amplificare a semnalului.

Pasul 6: AmpOp - Diferențial (subtractor)

AmpOp - Diferențial (subtractor)
AmpOp - Diferențial (subtractor)

Pasul 7: AmpOp - Adverter Adder

AmpOp - Advertor Adder
AmpOp - Advertor Adder

Pasul 8: Maple Mini - Pinage

Maple Mini - Pinage
Maple Mini - Pinage

Pinii marcați pe:

Roșu >> 3V3 Tolerant

Verde >> 5V Tolerant

Pasul 9: Maple Mini - Pinning - a / D folosit la capturare

Maple Mini - Pinning - a / D folosit la capturare
Maple Mini - Pinning - a / D folosit la capturare

Subliniez aici că pinul pe care l-am folosit este D11 care (în nomenclatura STMicroelectronics) este PA0.

Pasul 10: Asamblare

Asamblare
Asamblare

Pentru circuitul nostru, veți avea nevoie de o sursă simetrică, precum cea pe care am creat-o pentru acest proiect. În caz contrar, veți avea nevoie de două surse.

Pasul 11: Grafic cu datele obținute

Grafic cu datele obținute
Grafic cu datele obținute

Pasul 12: Calculul valorii RMS

Calculul valorii RMS
Calculul valorii RMS

Pasul 13: Cod sursă

Cod sursă - Definiții și constante

La început, am definit citirea pinului ca D11, precum și diferitele constante utilizate în calcule.

#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; // rezultă em 1, 027 secunde pentru fiecare atualizare // const int amostras = 35715; // rezultă 0, 514 secunde pentru fiecare atualizare

Cod sursă - Variabile globale

Acum, definim câteva variabile globale.

floare Vrms = 0,0; // armazena o valor rms da tensãofloat Vmax = 0,0; // armazena o valor maxim detectat float Vmin = 10000.0; // armazena o valoare minimă detectată float Vmed = 0,0; // armazena o valor médio între Vmáx e Vmín

Cod sursă - Configurare ()

Porniți portul serial la 1 Mbps. Am ajustat portul AD ca intrare și am așteptat 5 secunde înainte de a începe să colectăm date. Timpul de așteptare este opțional.

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 înainte de a începe a coleta. (opțional)}

Cod sursă - Buclă () - Pornește variabilele de colectare a datelor

În buclă, avem variabila pentru iterație. Aici, stocăm, de asemenea, citirile AD în 0.0 și repornim variabila VRMS și în 0.0.

bucla void () {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

Cod sursă - Captează și execută calculele individuale pentru fiecare eșantion

În această etapă, dacă i este mai mic decât eșantionul, începem un ciclu de eșantionare până când ajung la numărul de eșantioane. Rulăm analogRead pentru a citi portul analog și pentru a calcula suma pătratelor tensiunilor citite. În cele din urmă, incrementăm iteratorul.

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 o iterador}

Cod sursă - Calcule generale ale probelor și identificarea maximului, minimului și mediei

Aplicăm faptul multiplicării pentru a determina valoarea reală a tensiunilor. Detectăm dacă valoarea este maximă sau minimă și calculăm media valorilor maxime și minime actuale.

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

Cod sursă - Opțiuni de ieșire

Avem trei opțiuni pentru „trasarea” valorii de ieșire. Avem ieșire formatată la plotterul serial Arduino IDE, cum ar fi CSV sau Jason.

// format format pentru 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 ca json Serial.print ("{" instante (ms) ":"); Serial.print (milis ()); 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 ("}"); * / / * // format format ca CSV Serial.print (milis ()); Serial.print (","); Serial.print (Vrms, 3); Serial.print (","); Serial.print (Vmax, 3); Serial.print (","); Serial.print (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); * /}

Pasul 14: Fișiere

Descărcați fișierele:

PDF

EU NU

Recomandat: