Taula de continguts:

Mesurament del voltatge CA True-RMS: 14 passos
Mesurament del voltatge CA True-RMS: 14 passos

Vídeo: Mesurament del voltatge CA True-RMS: 14 passos

Vídeo: Mesurament del voltatge CA True-RMS: 14 passos
Vídeo: What Is True-RMS And Why Is It So Important? 2024, Desembre
Anonim
Image
Image
Demostració
Demostració

Avui utilitzarem el STM32 Maple Mini per fer una lectura de corrent altern. En el nostre exemple, obtindrem el valor RMS de la xarxa elèctrica. Això és molt útil per a aquells que vulguin controlar la xarxa elèctrica per a Internet de les coses. A continuació, crearem una aplicació utilitzant la potència de càlcul del Maple Mini, aplicarem un circuit electrònic capaç de permetre l’adquisició d’un senyal de 127Vac, així com aplicarem el càlcul del quadrat mitjà arrel (RMS) a les mostres.

Pas 1: demostració

Al nostre muntatge actual, tenim el STM32, a més del nostre circuit analògic per fer l'entrada de 110. Per evitar xocs, aïlleu la resistència que entra per 110.

El circuit és força sensible. Entraré amb 110, però el redueixo 168 vegades amb el divisor de tensió i el poso a l’amplificador operacional, que té diverses funcions.

També tenim alguns condensadors opcionals per al filtratge de fonts. Si la vostra font és de bona qualitat, no cal que les feu servir.

L'entrada AD es calcula a través de l'oscil·loscopi, en el qual es veu un sinusoide, que no és 110 (però està ben format). Una altra cosa és que la tensió de la nostra xarxa elèctrica no és de 110 (en realitat és de 127 volts). Però a mesura que estem sotmesos a un estabilitzador, s’ajustarà a 115V.

El valor que es mostra al monitor sèrie és el que es calcula en RMS, és a dir, el que identifica el Fluke Meter.

Pas 2: recursos utilitzats

Recursos utilitzats
Recursos utilitzats

• Saltadors

• Un Maple Mini

• Protoboard

• Un amplificador LM386

• Una font simètrica (+ 5V i -5V)

• Un trimpot (o potenciòmetre) de 10k de diverses voltes

• Quatre condensadors de polièster 100nF

• Tres resistències de 10 k

• Quatre resistències de 470 k

• Una resistència 5k6

• Un díode zener 1n4728A

Pas 3: diagrama de blocs

Diagrama de blocs
Diagrama de blocs

Pas 4: Esquema

Esquema
Esquema

Aquest és un circuit que he desenvolupat basant-me en les especificacions que crec que són les millors per a aquesta mesura, però hi ha altres exemples que es poden trobar a Internet.

Pas 5: LM386: fixació

LM386: fixació
LM386: fixació

El LM386 té dos amplificadors per al condicionament o l'amplificació del senyal.

Pas 6: AmpOp: diferencial (subtractor)

AmpOp - Diferencial (subtractor)
AmpOp - Diferencial (subtractor)

Pas 7: AmpOp - Inverter Adder

AmpOp: sumador d’inversors
AmpOp: sumador d’inversors

Pas 8: Mini-pinatge d'auró

Maple Mini - Pinatge
Maple Mini - Pinatge

Pins marcats a:

Vermell >> 3V3 Tolerant

Verd >> Tolerant a 5V

Pas 9: Maple Mini - Pinning - A / D que s'utilitza en la captura

Maple Mini - Pinning - A / D que s'utilitza en la captura
Maple Mini - Pinning - A / D que s'utilitza en la captura

Destaco aquí que el pin que he utilitzat és el D11 que (a la nomenclatura de la STMicroelectronics) és el PA0.

Pas 10: Muntatge

muntatge
muntatge

Per al nostre circuit, necessitareu una font simètrica, com la que vam crear per a aquest projecte. En cas contrari, necessitareu dues fonts.

Pas 11: Gràfic amb les dades obtingudes

Gràfic amb les dades obtingudes
Gràfic amb les dades obtingudes

Pas 12: càlcul del valor RMS

Càlcul del valor RMS
Càlcul del valor RMS

Pas 13: codi font

Codi font: definicions i constants

Al principi, vam definir la lectura de pins com D11, així com les diverses constants utilitzades en els càlculs.

#define leituraTensao D11 // AD CH0 no pino PA0 // valor teórico divisor de tensão = 168.85714285714285714286 const float fatorDivisor = 168.40166345742404792461; // valor teòric 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òric da Tensão de alimentação Vcc = 3.3V const float Vcc = 3.3; // valor teòric 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; // resulta em 1, 027 segons per a cada atualització // const int amostras = 35715; // resulta em 0, 514 segons per a cada atualització

Codi font: variables globals

Ara definim algunes variables globals.

float Vrms = 0,0; // armazena o valor rms da tensãofloat Vmax = 0,0; // armazena o valor màxim detectat float Vmin = 10000.0; // armazena o valor mínim detectat float Vmed = 0,0; // armazena o valor médio entre Vmáx e Vmín

Codi font - Configuració ()

Inicieu el port sèrie a 1 Mbps. Vam ajustar el port AD com a entrada i vam esperar 5 segons abans de començar a recopilar dades. El temps d'espera és opcional.

configuració nul·la () {Serial.begin (1000000); // inicia una porta serial em 1Mbps pinMode (leituraTensao, INPUT); // ajusta a porta do AD com entrada delay (5000); // aguarda 5s abans d'iniciar a coleta. (opcional)}

Codi font - bucle (): inicia les variables de recopilació de dades

Al bucle, tenim la variable per a la iteració. Aquí també emmagatzemem les lectures d’AD en 0,0 i reiniciem la variable VRMS també en 0,0.

bucle buit () {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

Codi font: captura i executa els càlculs individuals de cada mostra

En aquesta etapa, si i és més petit que la mostra, iniciem un cicle de mostreig fins que arribi al nombre de mostres. Executem analogRead per llegir el port analògic i calcular la suma dels quadrats de les tensions llegides. Finalment, incrementem l’iterador.

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 quadrats das tensões lidas i ++; // incrementa o iterador}

Codi font: càlculs generals de les mostres i identificació del màxim, mínim i mitjà

Apliquem el fet de multiplicar per determinar el valor real de les tensions. Detectem si el valor és màxim o mínim i calculem la mitjana dels valors màxim i mínim actuals.

// Aplicant fator de multiplicação per determinar o valor real das tensões Vrms = (sqrt (Vrms / amostras)) * fatorMultiplicacao; // detecta se é um valor és màxim if (Vrms> Vmax) {Vmax = Vrms; } // detecta es un valor mínim if (Vrms <Vmin) {Vmin = Vrms; } // calcula a mitjans dos valors màxims i mínims atuals Vmed = (Vmax + Vmin) / 2.0;

Codi font: opcions de sortida

Tenim tres opcions per "representar" el valor de sortida. Tenim la sortida formatada al traçador sèrie Arduino IDE, com ara CSV o Jason.

// saída formatada per 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 com 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 ("}"); * / / * // saída formatada com a 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); * /}

Pas 14: fitxers

Descarregueu els fitxers:

PDF

INO

Recomanat: