Cuprins:
- Pasul 1: demonstrație
- Pasul 2: Resurse utilizate
- Pasul 3: Diagrama bloc
- Pasul 4: Schema
- Pasul 5: LM386 - Fixare
- Pasul 6: AmpOp - Diferențial (subtractor)
- Pasul 7: AmpOp - Adverter Adder
- Pasul 8: Maple Mini - Pinage
- Pasul 9: Maple Mini - Pinning - a / D folosit la capturare
- Pasul 10: Asamblare
- Pasul 11: Grafic cu datele obținute
- Pasul 12: Calculul valorii RMS
- Pasul 13: Cod sursă
- Pasul 14: Fișiere
Video: Măsurarea tensiunii AC True-RMS: 14 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
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
• 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
Pasul 4: Schema
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 are doi amplificatori pentru condiționare sau amplificare a semnalului.
Pasul 6: AmpOp - Diferențial (subtractor)
Pasul 7: AmpOp - Adverter Adder
Pasul 8: Maple Mini - Pinage
Pinii marcați pe:
Roșu >> 3V3 Tolerant
Verde >> 5V Tolerant
Pasul 9: 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
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
Pasul 12: 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:
EU NU
Recomandat:
Măsurarea frecvenței și tensiunii de alimentare cu ajutorul Arduino: 6 pași
Măsurarea frecvenței și tensiunii de alimentare folosind Arduino: Introducere: Scopul acestui proiect este de a măsura frecvența și tensiunea de alimentare, care este cuprinsă între 220 și 240 Volți și 50Hz aici în India. Am folosit un Arduino pentru captarea semnalului și calcularea frecvenței și tensiunii, puteți utiliza orice alt microcont
Măsurarea tensiunii DC folosind Arduino: 5 pași
Măsurarea tensiunii DC folosind Arduino: În acest proiect vă voi arăta cum să măsurați tensiunea DC până la 50v utilizând arduino și afișarea pe modulul de afișare OLED are nevoie de arduino Afișaj UNOol 10k ohm rezistor 1k ohm rezistor
Generarea tensiunii cu o bicicletă ergometră: 9 pași (cu imagini)
Generarea tensiunii cu o bicicletă ergometră: elaborarea proiectului a constat în asamblarea unui „joc” cu scopul de a pedala într-o bicicletă ergometră conectată la un generator și un turn de lămpi care sunt activate pe măsură ce turația motorului crește - ceea ce are loc acordat bicicleta
Măsurarea tensiunii folosind Arduino: 5 pași
Măsurarea tensiunii folosind Arduino: Măsurarea tensiunii este destul de ușoară folosind orice microcontroler în comparație cu măsurarea curentului. Măsurarea tensiunilor devine necesară dacă lucrați cu baterii sau doriți să realizați propria sursă de alimentare reglabilă. Deși această metodă se aplică
Măsurarea tensiunii DC cu Arduino și Node-RED: 8 pași (cu imagini)
Măsurarea tensiunii de curent continuu cu Arduino și Node-RED: Există o mulțime de tutoriale de măsurare a tensiunii de curent continuu cu Arduino, în acest caz am găsit un tutorial pe care îl consider cea mai bună metodă funcțională pentru a măsura DC fără a necesita valori de intrare de rezistență, necesită doar o anumită rezistență și un multimetru