Tabla de contenido:

Medición de voltaje y frecuencia de la fuente de alimentación con Arduino: 6 pasos
Medición de voltaje y frecuencia de la fuente de alimentación con Arduino: 6 pasos

Video: Medición de voltaje y frecuencia de la fuente de alimentación con Arduino: 6 pasos

Video: Medición de voltaje y frecuencia de la fuente de alimentación con Arduino: 6 pasos
Video: DIY Fuente Regulable + Módulo Voltímetro/Amperímetro [TUTORIAL] [PROTOBOARD] 2024, Noviembre
Anonim
Medición de voltaje y frecuencia de la fuente de alimentación con Arduino
Medición de voltaje y frecuencia de la fuente de alimentación con Arduino

Introducción:

El objetivo de este proyecto es medir la frecuencia y el voltaje de suministro, que está entre 220 y 240 voltios y 50 Hz aquí en la India. Usé un Arduino para capturar la señal y calcular la frecuencia y el voltaje, puede usar cualquier otro microcontrolador o placa que tenga. El circuito requiere un puñado de componentes y es bastante preciso para todos los propósitos prácticos.

Paso 1: componentes necesarios

  • Arduino Uno
  • IC LM358
  • Transformador reductor (220V a 12V)
  • Condensadores:

    • 0,1 uF
    • 2 x 1 uF
  • Resistencias:

    • 3 x 1 kOhmio
    • 2 x 100 kOhmios
    • 1,5 kOhmios
    • 3,3 kOhmios
    • 6,8 kOhmios
  • 3 diodos 1N4148
  • Placa de pan y cable de puente (opcional)

Paso 2: diagrama esquemático

Diagrama esquemático
Diagrama esquemático
Diagrama esquemático
Diagrama esquemático

En el circuito anterior, el primario del transformador está conectado a la red de suministro y el primario está conectado a nuestro circuito de medición.

Paso 3: Comprensión del circuito

Entendiendo el circuito
Entendiendo el circuito
Entendiendo el circuito
Entendiendo el circuito
Entendiendo el circuito
Entendiendo el circuito

Según la funcionalidad, este circuito se puede dividir en cuatro partes:

A: el circuito del detector de cruce por cero

Este circuito genera un pulso cuadrado de 5 V cada vez que la onda sinusoidal pasa de positivo a negativo. La resistencia R1 combinada con D1 y D2 limita la oscilación del voltaje de entrada en la unión del diodo de -0,6 V a + 5,6 V (suponiendo que el voltaje directo del diodo sea 0,6 V). Además, puede aumentar el rango de voltaje de entrada del circuito aumentando el valor de R1.

La resistencia R2 y R3 forman un divisor de voltaje para limitar la oscilación negativa del voltaje a -0,24 voltios, ya que el voltaje de modo común de entrada del LM358 está limitado a -0,3 voltios.

La resistencia R4, R5, el condensador C1 y el amplificador operacional (aquí utilizado como comparador) forman el circuito de disparo Schmitt donde la resistencia R4 y R5 establecen la histéresis en la entrada + 49,5 mV sobre el suelo. La salida del disparador Schmitt se envía al PIN2 de Arduino para su posterior procesamiento.

B: Aislamiento y reducción de voltaje

Como su nombre indica, esta parte aísla y reduce el voltaje a aproximadamente 12 Vrms. El voltaje reducido se alimenta además al circuito de instrumentación.

C: circuito detector de picos

Este circuito determina el voltaje pico máximo de la señal de entrada. Los divisores de resistencia R6 y R7 reducen el voltaje de entrada en un factor de 0.23 (12Vrms se reduce a 2.76Vrms). El diodo D3 conduce solo el semiciclo positivo de la señal. El voltaje a través de C2 aumenta hasta el valor máximo de la señal rectificada, que se alimenta al pin analógico A0 de Arduino para calcular aún más el voltaje.

Además, puede reemplazar este circuito con un circuito detector de picos de precisión como los mencionados aquí. Pero para mis propósitos de demostración, el circuito anterior será suficiente.

D: Arduino

En esta parte, el Arduino captura los pulsos cuadrados generados por el circuito Schmitt Trigger y lee el voltaje analógico del circuito detector de picos. Los datos se procesan adicionalmente para determinar el período de tiempo (por lo tanto, la frecuencia) del pulso cuadrado (que es igual al tiempo de suministro de CA de la persona) y el voltaje del suministro.

Paso 4: cálculo de frecuencia y voltaje

Cálculo de frecuencia:

Con la ayuda de Arduino, podemos medir el período de tiempo T de la señal. Los pulsos de onda cuadrada del detector de cruce por cero se alimentan al pin 2, desde allí podemos medir el período de tiempo de cada pulso. Podemos usar el temporizador interno de Arduino (específicamente Timer1) para calcular el período de tiempo entre dos bordes ascendentes del pulso cuadrado con la ayuda de interrupciones. El temporizador se incrementa en 1 por ciclo de reloj (sin preescalador = 1) y el valor se almacena en el registro TCNT1. Por lo tanto, el reloj de 16 Mhz incrementa el contador en 16 cada microsegundo. De manera similar, para el preescalador = 8, el temporizador se incrementa en 2 cada microsegundo. De ahí el período de tiempo entre dos flancos ascendentes

T = (valor TCNT1) / tiempo necesario para cada recuento

Donde, tiempo necesario para cada recuento = preescaler / (velocidad de reloj de Arduino (16MHz)

Por lo tanto, la frecuencia f = 1 / T = (velocidad de reloj de Arduino (16MHz) / (valor de Prescaler * TCNT!)

Por lo tanto, la velocidad del temporizador (Hz) viene dada por = (velocidad del reloj Arduino (16MHz)) / prescaler

y la frecuencia de la señal viene dada por = (velocidad del reloj Arduino

En consecuencia, podemos calcular la frecuencia f a partir de la relación f = 1 / T.

Cálculo de voltaje:

El ADC integrado de Arduino tiene una resolución de 10 bits (valores posibles = 2 ^ 10 = 1024), devolviendo valores en el rango de 0-1023. Para calcular el voltaje analógico correspondiente V tenemos que usar la siguiente relación

V = (lectura ADC) * 5/1023

Para calcular la tensión de alimentación Vs (rms) debemos tener en cuenta la relación de transformación, el divisor de resistencia R6R7 y el circuito detector de picos. Simplemente podemos juntar los diversos factores / razón como:

Relación de transformación = 12/230 = 0.052

Divisor de resistencia = R7 / (R6 + R7) = 0,23

En el circuito del detector de pico = 1.414

Vs (rms) = V / (1.414 * 0.052 * 0.23) = (Lectura ADC) * 0.289

Cabe señalar que este valor está lejos del valor real, principalmente debido al error en la relación de transformación real y la caída de voltaje directo del diodo. Una forma de evitar esto es determinar el factor después de ensamblar el circuito. Es decir, midiendo el voltaje de suministro y el voltaje a través del capacitor C2 por separado con un multímetro, luego calculando Vs (rms) de la siguiente manera:

Vs (rms) = ((Voltaje de suministro * 5) / (Voltaje en C2 * 1023)) * (Lectura ADC)

en mi caso, Vs (rms) = 0.33 * (lectura ADC)

Paso 5: Código Arduino

#define volt_in A0 // pin de lectura de voltaje analógico

volatile uint16_t t_period; uint16_t ADC_value = 0; voltio flotante, frecuencia; void isr () {t_period = TCNT1; // almacena el valor TCNT1 en t_period TCNT1 = 0; // restablecer Timer1 ADC_value = analogRead (volt_in); // leer voltaje analógico} float get_freq () {uint16_t timer = t_period; si (temporizador == 0) devuelve 0; // para evitar la división por cero, de lo contrario, devuelve 16000000.0 / (8UL * timer); // la frecuencia viene dada por f = clk_freq / (prescaler * timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // establece el preescalador en 8 TCNT1 = 0; // restablecer el valor del Timer1 TIMSK1 = bit (TOIE1); // habilita la interrupción de desbordamiento del Timer1 EIFR | = bit (INTF0); // borra el indicador de interrupción INT0 Serial.begin (9600); } bucle vacío () {attachInterrupt (0, isr, RISING); // habilita la interrupción externa (INT0) delay (1000); detachInterrupt (0); freq = get_freq (); voltio = ADC_value * 0.33; String buf; buf + = Cadena (frecuencia, 3); buf + = F ("Hz / t"); buf + = String (voltios); buf + = F ("Voltios"); Serial.println (buf); }

Paso 6: Conclusión

Conclusión
Conclusión
Conclusión
Conclusión

Puede ensamblar el circuito en una placa y modificar el código y agregar una tarjeta SD para almacenar los datos, que luego se pueden analizar. Un ejemplo es que puede analizar el voltaje y la frecuencia en las horas pico.

El circuito que ensamblé en la placa usaba LM324 (quad opamp) en lugar de LM358 (dual opamp) ya que no tenía ese IC en ese momento y el bloqueo nacional debido a la pandemia de COVID-19 me dificultó obtener un nuevo IC. Sin embargo, no afectaría el funcionamiento del circuito.

No dude en comentar a continuación para cualquier sugerencia y consulta.

Recomendado: