Índice:

Medindo Tensão AC True-RMS: 14 etapas
Medindo Tensão AC True-RMS: 14 etapas

Vídeo: Medindo Tensão AC True-RMS: 14 etapas

Vídeo: Medindo Tensão AC True-RMS: 14 etapas
Vídeo: COMO MEDIR A POTÊNCIA REAL DO SOM COM MULTÍMETRO E ALICATE AMPERÍMETRO TRUE RMS 2024, Novembro
Anonim
Image
Image
Demonstração
Demonstração

Hoje, usaremos o STM32 Maple Mini para fazer uma leitura AC. Em nosso exemplo, obteremos o valor RMS da rede elétrica. Isso é muito útil para quem deseja monitorar a rede elétrica para a Internet das Coisas. Em seguida, criaremos um aplicativo utilizando o poder computacional do Maple Mini, aplicaremos um circuito eletrônico capaz de permitir a aquisição de um sinal de 127Vac, bem como aplicaremos o cálculo da raiz quadrada média (RMS) nas amostras.

Etapa 1: Demonstração

Na nossa montagem hoje, temos o STM32, além do nosso circuito analógico para fazer a entrada de 110. Para evitar choques, isole o resistor que está entrando por 110.

O circuito é bastante sensível. Estou entrando com 110, mas reduzo 168 vezes usando o divisor de tensão e coloco no amplificador operacional, que tem várias funções.

Também temos alguns capacitores opcionais para filtragem de fonte. Se sua fonte for de boa qualidade, você não precisa usá-los.

A entrada AD é calculada através do osciloscópio, no qual você vê uma senoide, que não é 110 (mas está bem formada). Outra coisa é que a voltagem em nossa rede elétrica não é 110 (na verdade é 127 volts). Mas como estamos passando por um estabilizador, ele se ajustará para 115V.

O valor exibido no monitor serial é o que é calculado em RMS, ou seja, aquele identificado pelo Medidor Fluke.

Etapa 2: Recursos usados

Recursos Usados
Recursos Usados

• Jumpers

• Um Maple Mini

• Protoboard

• Um amplificador LM386

• Uma fonte simétrica (+ 5V e -5V)

• Um trimpot multivoltas de 10k (ou potenciômetro)

• Quatro capacitores de poliéster 100nF

• Três resistores de 10k

• Quatro resistores de 470k

• Um resistor 5k6

• Um diodo zener 1n4728A

Etapa 3: Diagrama de blocos

Diagrama de bloco
Diagrama de bloco

Etapa 4: Esquema

Esquema
Esquema

Este é um circuito que desenvolvi com base nas especificações que acredito serem as melhores para essa medição, mas existem vários outros exemplos que podem ser encontrados na internet.

Etapa 5: LM386 - Fixação

LM386 - Fixação
LM386 - Fixação

O LM386 possui dois amplificadores para condicionamento ou amplificação do sinal.

Etapa 6: AmpOp - Diferencial (subtrator)

AmpOp - Diferencial (subtrator)
AmpOp - Diferencial (subtrator)

Etapa 7: AmpOp - Somador Inversor

AmpOp - Somador Inversor
AmpOp - Somador Inversor

Etapa 8: Maple Mini - Pinagem

Maple Mini - Pinagem
Maple Mini - Pinagem

Pinos marcados em:

Vermelho >> 3V3 tolerante

Verde >> 5V Tolerante

Etapa 9: Maple Mini - Pinning - a / D usado na captura

Maple Mini - Pinning - a / D usado na captura
Maple Mini - Pinning - a / D usado na captura

Destaco aqui que o pino que utilizei é o D11 que (na nomenclatura do STMicroeletrônica) é o PA0.

Etapa 10: Montagem

conjunto
conjunto

Para o nosso circuito, você precisará de uma fonte simétrica, como a que criamos para este projeto. Caso contrário, você precisará de duas fontes.

Etapa 11: Gráfico com os dados obtidos

Gráfico com os dados obtidos
Gráfico com os dados obtidos

Etapa 12: Calculando o Valor RMS

Calculando o valor RMS
Calculando o valor RMS

Etapa 13: Código Fonte

Código-fonte - Definições e constantes

Inicialmente, definimos a leitura do pino como D11, bem como as várias constantes usadas nos cálculos.

#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.. = 71429; // resulta em 1, 027 segundos para cada atualização // const int superior = 35715; // resulta em 0, 514 segundos para cada atualização

Código-fonte - Variáveis globais

Agora, definimos algumas variáveis globais.

float 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

Código Fonte - Configuração ()

Inicie a porta serial em 1 Mbps. Ajustamos a porta AD como entrada e esperamos 5 segundos antes de começar a coletar dados. O tempo de espera é opcional.

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 antes de iniciar a coleta. (opcional)}

Código-fonte - Loop () - Inicia as variáveis de coleta de dados

No Loop, temos a variável para iteração. Aqui, também armazenamos as leituras de AD em 0,0 e reiniciamos a variável VRMS também em 0,0.

loop vazio () {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

Código-fonte - captura e executa os cálculos individuais para cada amostra

Nesse estágio, se i for menor que a amostra, iniciamos um ciclo de amostragem até que i atinja o número de amostras. Executamos analogRead para ler a porta analógica e calcular a soma dos quadrados das tensões lidas. Finalmente, incrementamos o iterador.

enquanto (i <dirige) {// inicia um ciclo de amostragem até que i alcance o número de 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}

Código-fonte - Cálculos gerais das amostras e identificação de máximo, mínimo e médio

Aplicamos o fato de multiplicação para determinar o valor real das tensões. Detectamos se o valor é máximo ou mínimo e calculamos a média dos valores máximo e mínimo atuais.

// Aplicando fator de multiplicação para determinar o valor real das tensões Vrms = (sqrt (Vrms / er)) * fatorMultiplicacao; // detecta se é um valor é máximo if (Vrms> Vmax) {Vmax = Vrms; } // detecta se é um valor mínimo if (Vrms <Vmin) {Vmin = Vrms; } // cálculo a média dos valores máximo e atuais Vmed = (Vmax + Vmin) / 2.0;

Código Fonte - Opções de Saída

Temos três opções para "plotar" o valor de saída. Temos a saída formatada para a plotadora serial IDE do Arduino, como CSV ou Jason.

// saída formatada para plotter IDE serial Arduino Serial.print (Vrms, 3); Serial.print (","); Serial.print (Vmáx, 3); Serial.print (","); Serial.print (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); / * // saída formatada como 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 (Vmáx, 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 como CSV Serial.print (millis ()); Serial.print (","); Serial.print (Vrms, 3); Serial.print (","); Serial.print (Vmáx, 3); Serial.print (","); Serial.print (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); * /}

Etapa 14: Arquivos

Baixe os arquivos:

PDF

EU NÃO

Recomendado: