Índice:
- Etapa 1: Demonstração
- Etapa 2: Recursos usados
- Etapa 3: Diagrama de blocos
- Etapa 4: Esquema
- Etapa 5: LM386 - Fixação
- Etapa 6: AmpOp - Diferencial (subtrator)
- Etapa 7: AmpOp - Somador Inversor
- Etapa 8: Maple Mini - Pinagem
- Etapa 9: Maple Mini - Pinning - a / D usado na captura
- Etapa 10: Montagem
- Etapa 11: Gráfico com os dados obtidos
- Etapa 12: Calculando o Valor RMS
- Etapa 13: Código Fonte
- Etapa 14: Arquivos
Vídeo: Medindo Tensão AC True-RMS: 14 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
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
• 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
Etapa 4: 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
O LM386 possui dois amplificadores para condicionamento ou amplificação do sinal.
Etapa 6: AmpOp - Diferencial (subtrator)
Etapa 7: AmpOp - Somador Inversor
Etapa 8: Maple Mini - Pinagem
Pinos marcados em:
Vermelho >> 3V3 tolerante
Verde >> 5V Tolerante
Etapa 9: 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
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
Etapa 12: 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:
EU NÃO
Recomendado:
Medindo a temperatura: 7 etapas
Medindo a temperatura: هو قياس درجه الحراره باستخدام الكاميرا االحراريه
Monitor de tensão para baterias de alta tensão: 3 etapas (com fotos)
Monitor de tensão para baterias de alta tensão: Neste guia, explicarei como construí meu monitor de tensão de bateria para meu longboard elétrico. Monte como quiser e conecte apenas dois fios à bateria (Gnd e Vcc). Este guia presumiu que a voltagem da bateria excede 30 volts, w
DC - DC Tensão Reduzida Modo de Interruptor Conversor de Tensão Buck (LM2576 / LM2596): 4 etapas
DC - DC Voltage Down Switch Mode Conversor Buck Voltage (LM2576 / LM2596): Fazer um conversor Buck altamente eficiente é uma tarefa difícil e até mesmo engenheiros experientes requerem vários projetos para chegar ao certo. Um conversor Buck (conversor abaixador) é um conversor de energia DC para DC, que reduz a tensão (enquanto aumenta
Fonte de alimentação DC de tensão ajustável usando o regulador de tensão LM317: 10 etapas
Fonte de alimentação DC de tensão ajustável usando o regulador de tensão LM317: Neste projeto, eu projetei uma fonte de alimentação DC de tensão ajustável simples usando o LM317 IC com um diagrama de circuito de fonte de alimentação LM317. Como este circuito possui uma ponte retificadora embutida, podemos conectar diretamente a alimentação 220V / 110V AC na entrada
Medindo a tensão DC com Arduino e Node-RED: 8 etapas (com imagens)
Medindo Tensão DC com Arduino e Node-RED: Existem muitos tutoriais de medição de tensão DC com Arduino, neste caso eu encontrei um tutorial que considero o melhor método funcional para medir DC sem exigir valores de entrada de resistência, requer apenas alguma resistência e um multímetro