Taula de continguts:

Mesura de freqüència i tensió de la font d'alimentació mitjançant Arduino: 6 passos
Mesura de freqüència i tensió de la font d'alimentació mitjançant Arduino: 6 passos

Vídeo: Mesura de freqüència i tensió de la font d'alimentació mitjançant Arduino: 6 passos

Vídeo: Mesura de freqüència i tensió de la font d'alimentació mitjançant Arduino: 6 passos
Vídeo: SKR 1.4 - Definitive User Guide 2024, De novembre
Anonim
Mesura de la freqüència i la tensió de l’alimentació mitjançant Arduino
Mesura de la freqüència i la tensió de l’alimentació mitjançant Arduino

Introducció:

L'objectiu d'aquest projecte és mesurar la freqüència i la tensió de subministrament, que es troba entre 220 i 240 volts i 50 Hz aquí a l'Índia. He utilitzat un Arduino per captar senyals i calcular freqüències i voltatges; podeu utilitzar qualsevol altre microcontrolador o placa que tingueu. El circuit requereix un grapat de components i és bastant precís per a tots els propòsits pràctics.

Pas 1: components necessaris

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

    • 0,1uF
    • 2 x 1uF
  • Resistències:

    • 3 x 1kOhm
    • 2 x 100kOhm
    • 1,5 kOhm
    • 3,3 kOhm
    • 6,8 kOhm
  • 3 x 1N4148 díode
  • Taula de pa i filferro de pont (opcional)

Pas 2: Diagrama esquemàtic

Diagrama esquemàtic
Diagrama esquemàtic
Diagrama esquemàtic
Diagrama esquemàtic

En el circuit anterior, el transformador primari està connectat a la xarxa d’alimentació i el primari es connecta al nostre circuit de mesura

Pas 3: Comprensió del circuit

Comprensió del circuit
Comprensió del circuit
Comprensió del circuit
Comprensió del circuit
Comprensió del circuit
Comprensió del circuit

Segons la funcionalitat, aquest circuit es pot dividir en quatre parts:

A: El circuit del detector de creuament zero

Aquest circuit genera un pols quadrat de 5V sempre que l’ona sinusoïdal passa de positiu a negatiu. La resistència R1 combinada amb D1 i D2 limita l’oscil·lació del voltatge d’entrada a la unió del díode a -0,6V a + 5,6V (suposant que la tensió directa del díode és 0,6V). A més, podeu augmentar el rang de tensió d’entrada del circuit augmentant el valor de R1.

La resistència R2 i R3 formen un divisor de tensió per limitar el balanceig de tensió negativa a -0,24 volts ja que la tensió d’entrada en mode comú de LM358 es limita a -0,3 volts.

La resistència R4, R5, el condensador C1 i l'amplificador operacional (aquí s'utilitza com a comparador) formen el circuit de desencadenament de Schmitt on la resistència R4 i R5 estableixen la histèresi a l'entrada + 49,5mV sobre terra. La sortida del Schmitt Trigger s’alimenta a l’Arduino PIN2 per a un processament posterior.

B: Aïllament i baixada de tensió

Com el seu nom indica, aquesta part aïlla i redueix el voltatge fins a aproximadament 12Vrms. El voltatge reduït s’alimenta al circuit de la instrumentació.

C: Circuit de detecció de pics

Aquest circuit determina la tensió màxima màxima del senyal d’entrada. Els divisors de resistències R6 i R7 redueixen la tensió d’entrada en un factor de 0,23 (12Vrms es redueix a 2,76Vrms). El díode D3 condueix només el mig cicle positiu del senyal. La tensió a través de C2 augmenta fins al valor màxim del senyal rectificat, que s’alimenta al pin analògic A0 d’Arduino per calcular encara més la tensió.

A més, podeu substituir aquest circuit per un circuit de detecció de pics de precisió com els que s’esmenten aquí. Però per a la meva demostració, el circuit anterior serà suficient.

D: Arduino

En aquesta part, l’Arduino capta els impulsos quadrats generats pel circuit Schmitt Trigger i llegeix la tensió analògica del circuit del detector de pics. Les dades es processen a més per determinar el període de temps (per tant, la freqüència) del pols quadrat (que és igual al temps de subministrament de corrent altern) i el voltatge de l'alimentació.

Pas 4: càlcul de freqüència i tensió

Càlcul de freqüència:

Amb l'ajut d'Arduino, podem mesurar el període de temps T del senyal. Els polsos d'ona quadrada del detector de creuament zero s'alimenten al pin 2, a partir d'aquí podem mesurar el període de temps de cada pols. Podem utilitzar el temporitzador intern d’Arduino (específicament Timer1) per calcular el període de temps entre dues vores ascendents del pols quadrat amb l’ajut d’interrupcions. El temporitzador augmenta 1 per cicle de rellotge (sense prescaler = 1) i el valor s’emmagatzema al registre TCNT1. Per tant, el rellotge de 16 MHz incrementa el comptador en 16 cada microsegon. De manera similar, per prescaler = 8, el temporitzador s'incrementa en 2 cada microsegon. Per tant, el període de temps entre dues vores ascendents

T = (valor TCNT1) / temps necessari per a cada recompte

On, temps de cada recompte = prescaler / (velocitat de rellotge Arduino (16 MHz)

Per tant, la freqüència f = 1 / T = (Velocitat de rellotge Arduino (16 MHz) / (valor del precalificador * TCNT!)

Per tant, la velocitat del temporitzador (Hz) ve donada per = (velocitat de rellotge Arduino (16 MHz)) / prescaler

i la freqüència del senyal ve donada per = (velocitat de rellotge Arduino

Correspondentment, podem calcular la freqüència f a partir de la relació f = 1 / T.

Càlcul de la tensió:

L’ADC incorporat d’Arduino té una resolució de 10 bits (valors possibles = 2 ^ 10 = 1024), retornant valors compresos entre 0-1023. Per calcular la tensió analògica V corresponent hem d’utilitzar la següent relació

V = (Lectura ADC) * 5/1023

Per calcular la tensió d'alimentació Vs (rms) hem de tenir en compte la relació del transformador, el divisor de resistències R6R7 i el circuit del detector de pics. Simplement podem reunir els diversos factors / relació com:

Relació del transformador = 12/230 = 0,052

Divisor de resistència = R7 / (R6 + R7) = 0,23

En circuit de detector de pic = 1,414

Vs (rms) = V / (1,414 * 0,052 * 0,23) = (lectura ADC) * 0,289

Cal tenir en compte que aquest valor està lluny del valor real, principalment per error en la relació real del transformador i la caiguda de tensió directa del díode. Una manera d’eludir-ho és determinar el factor després de muntar el circuit. És a dir, mesurant la tensió d’alimentació i la tensió a través del condensador C2 per separat amb un multímetre, calculant així Vs (rms) de la següent manera:

Vs (rms) = ((Voltatge de subministrament * 5) / (Voltatge a través de C2 * 1023)) * (Lectura ADC)

en el meu cas, Vs (rms) = 0,33 * (lectura ADC)

Pas 5: Codi Arduino

#define volt_in A0 // pin de lectura de voltatge analògic

volàtil uint16_t t_period; uint16_t ADC_value = 0; voltatge flotant, freq; void isr () {t_period = TCNT1; // emmagatzema el valor TCNT1 a t_període TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // llegir tensió analògica} float get_freq () {uint16_t temporitzador = t_period; if (temporitzador == 0) retorna 0; // per evitar la divisió per zero, torneu 16000000.0 / (temporitzador 8UL *); // la freqüència ve donada per f = clk_freq / (prescaler * timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // estableix el prescaler a 8 TCNT1 = 0; // restableix el valor del temporitzador1 TIMSK1 = bit (TOIE1); // habilitar la interrupció de desbordament del temporitzador EIFR | = bit (INTF0); // esborra la bandera d’interrupció INT0 Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // habilitar el retard d’interrupció externa (INT0) (1000); detachInterrupt (0); freq = get_freq (); volt = valor_ADC * 0,33; Cadena buf; buf + = String (freq, 3); buf + = F ("Hz / t"); buf + = String (volt); buf + = F ("Volts"); Serial.println (buf); }

Pas 6: Conclusió

Conclusió
Conclusió
Conclusió
Conclusió

Podeu muntar el circuit en una taula de treball i modificar el codi i afegir una targeta SD per emmagatzemar les dades, que posteriorment es poden analitzar. Un d’aquests exemples és que podeu analitzar el voltatge i la freqüència a les hores punta.

El circuit que vaig muntar a la taula de treball utilitzava LM324 (quad opamp) en lloc de LM358 (dual opamp), ja que no tenia aquella IC en aquell moment i el bloqueig a nivell nacional a causa de la pandèmia COVID-19 em va dificultar obtenir una nova IC. Tot i això, no afectaria el funcionament del circuit.

No dubteu a fer comentaris a continuació per a qualsevol suggeriment i consulta.

Recomanat: