Inhoudsopgave:

Voedingsfrequentie en spanningsmeting met Arduino - Ajarnpa
Voedingsfrequentie en spanningsmeting met Arduino - Ajarnpa

Video: Voedingsfrequentie en spanningsmeting met Arduino - Ajarnpa

Video: Voedingsfrequentie en spanningsmeting met Arduino - Ajarnpa
Video: What is asynchronous motor (Induction Motor) 2024, November
Anonim
Voedingsfrequentie en spanningsmeting met behulp van Arduino
Voedingsfrequentie en spanningsmeting met behulp van Arduino

Invoering:

Het doel van dit project is het meten van de voedingsfrequentie en -spanning, die hier in India tussen 220 en 240 Volt en 50Hz ligt. Ik heb een Arduino gebruikt voor het vastleggen van signalen en het berekenen van frequentie en spanning, je kunt elke andere microcontroller of bord gebruiken die je hebt. Het circuit vereist een handvol componenten en is redelijk nauwkeurig voor alle praktische doeleinden.

Stap 1: Vereiste componenten

  • Arduino Uno
  • IC LM358
  • Step-down transformator (220V tot 12V)
  • condensatoren:

    • 0.1uF
    • 2 x 1uF
  • Weerstanden:

    • 3 x 1kOhm
    • 2 x 100kOhm
    • 1.5kOhm
    • 3,3kOhm
    • 6,8kOhm
  • 3 x 1N4148-diode
  • Broodplank en verbindingsdraad (optioneel)

Stap 2: Schematisch diagram

Schematisch diagram
Schematisch diagram
Schematisch diagram
Schematisch diagram

In het bovenstaande circuit is de primaire transformator aangesloten op het voedingsnet en de primaire is aangesloten op ons meetcircuit

Stap 3: Het circuit begrijpen

Het circuit begrijpen
Het circuit begrijpen
Het circuit begrijpen
Het circuit begrijpen
Het circuit begrijpen
Het circuit begrijpen

Volgens de functionaliteit kan dit circuit in vier delen worden verdeeld:

A: Het circuit van de nuldoorgangsdetectie

Dit circuit genereert een 5V-blokpuls wanneer de sinusgolf van positief naar negatief gaat. Weerstand R1 in combinatie met D1 en D2 beperkt de ingangsspanningszwaai bij de diodejunctie tot -0,6V tot +5,6V (ervan uitgaande dat de diodedoorlaatspanning 0,6V is). Bovendien kunt u het ingangsspanningsbereik van het circuit vergroten door de waarde van R1 te verhogen.

De weerstand R2 en R3 vormen een spanningsdeler om de negatieve spanningszwaai te beperken tot -0,24 Volt, aangezien de common-mode ingangsspanning van LM358 beperkt is tot -0,3 Volt.

De weerstand R4, R5, condensator C1 en de op-amp (hier gebruikt als een comparator) vormen het Schmitt-triggercircuit waar de weerstand R4 en R5 de hysterese instellen op ingang +49.5mV boven de grond. De output van de Schmitt Trigger wordt naar de Arduino PIN2 gestuurd voor verdere verwerking.

B: Isolatie en spanning omlaag

Zoals de naam al doet vermoeden, isoleert dit onderdeel en verlaagt het de spanning tot ongeveer 12Vrms. De verlaagde spanning wordt verder naar het instrumentatiecircuit gevoerd.

C: Piekdetectorcircuit

Deze schakeling bepaalt de maximale piekspanning van het ingangssignaal. Weerstandsdeler R6 en R7 verlagen de ingangsspanning met een factor 0,23 (12Vrms wordt teruggebracht tot 2,76Vrms). De diode D3 geleidt alleen de positieve halve cyclus van het signaal. De spanning over C2 neemt toe tot de piekwaarde van het gelijkgerichte signaal, dat naar Arduino analoge pin A0 wordt gevoerd om de spanning verder te berekenen.

Bovendien kunt u dit circuit vervangen door een precisiepiekdetectorcircuit zoals hier genoemd. Maar voor mijn demonstratiedoeleinden is het bovenstaande circuit voldoende.

D: Arduino

In dit deel vangt de Arduino de vierkante pulsen op die worden gegenereerd door het Schmitt-triggercircuit en leest het de analoge spanning van het piekdetectorcircuit. De gegevens worden verder verwerkt om de tijdsperiode (vandaar de frequentie) van de vierkante puls (die gelijk is aan de ac-leveringstijdpersoon) en de spanning van de voeding te bepalen.

Stap 4: Berekening van frequentie en spanning

Berekening van de frequentie:

Met behulp van Arduino kunnen we de tijdsperiode T van het signaal meten. De blokgolfpulsen van de nuldoorgangsdetector worden naar pin 2 gevoerd, van daaruit kunnen we de tijdsperiode van elke puls meten. We kunnen de interne timer van Arduino (met name Timer1) gebruiken om de tijdsperiode tussen twee stijgende flanken van de vierkante puls te berekenen met behulp van interrupts. De timer wordt met 1 verhoogd per klokcyclus (zonder prescaler = 1) en de waarde wordt opgeslagen in register TCNT1. Vandaar dat de 16Mhz-klok de teller elke microseconde met 16 verhoogt. Evenzo wordt voor prescaler = 8 de timer elke microseconde met 2 verhoogd. Vandaar de tijdsperiode tussen twee stijgende flanken

T = (TCNT1-waarde) / tijd nodig voor elke telling

Waar, tijd nodig voor elke telling = prescaler / (Arduino-kloksnelheid (16 MHz)

Vandaar, frequentie f = 1/T = (Arduino kloksnelheid (16MHz) / (Prescaler * TCNT! waarde)

Daarom wordt de timersnelheid (Hz) gegeven door = (Arduino-kloksnelheid (16 MHz)) / prescaler

en de frequentie van het signaal wordt gegeven door = (Arduino kloksnelheid

Dienovereenkomstig kunnen we frequentie f berekenen uit de relatie f = 1/T.

Berekening van spanning:

De ingebouwde ADC van Arduino heeft een resolutie van 10 bits (mogelijke waarden = 2 ^ 10 = 1024), waardoor waarden worden geretourneerd in het bereik van 0-1023. Om de overeenkomstige analoge spanning V te berekenen, moeten we de volgende relatie gebruiken:

V = (ADC-lezing) * 5/1023

Om de voedingsspanning Vs(rms) te berekenen, moeten we rekening houden met de transformatorverhouding, weerstandsdeler R6R7 en het piekdetectorcircuit. We kunnen de verschillende factoren/verhouding eenvoudig samenvoegen als:

Transformatorverhouding = 12/230 = 0,052

Weerstandsdeler = R7/(R6 + R7) = 0.23

Bij piekdetectorcircuit = 1.414

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

Opgemerkt moet worden dat deze waarde ver verwijderd is van de werkelijke waarde, voornamelijk als gevolg van een fout in de werkelijke transformatorverhouding en de voorwaartse spanningsval van de diode. Een manier om dit te omzeilen is om de factor te bepalen na het samenstellen van de schakeling. Dat wil zeggen door de voedingsspanning en de spanning over de condensator C2 afzonderlijk te meten met een multimeter, en vervolgens Vs(rms) als volgt te berekenen:

Vs(rms) = ((Voedingsspanning * 5)/(Spanning over C2 *1023))*(ADC-aflezing)

in mijn geval Vs (rms) = 0,33 * (ADC-lezing)

Stap 5: Arduino-code

#define volt_in A0 // analoge spanning lees pin

vluchtige uint16_t t_period; uint16_t ADC_waarde = 0; vlotter volt, freq; void isr() { t_periode = TCNT1; // bewaar TCNT1-waarde in t_periode TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // lees analoge spanning} float get_freq () {uint16_t timer = t_period; if(timer==0) retourneer 0; // om deling door nul te voorkomen, retourneer anders 16000000.0/(8UL*timer); // frequentie wordt gegeven door f = clk_freq/(prescaler*timeperiod)} void setup() {TCCR1A = 0; TCCR1B = bit (CS11); // stel prescaler in op 8 TCNT1 = 0; // reset Timer1-waarde TIMSK1 = bit (TOIE1); // schakel Timer1 overlooponderbreking EIFR |= bit (INTF0) in; // wis de INT0-onderbrekingsvlag Serial.begin (9600); } void loop() { attachInterrupt(0, isr, RISING); // schakel externe interrupt (INT0) vertraging in (1000); detachInterrupt (0); freq = get_freq(); volt = ADC_waarde * 0,33; String-buf; buf += String (freq, 3); buf += F("Hz\t"); buf += String (volt); buf += F("Volt"); Serial.println(buf); }

Stap 6: Conclusie

Conclusie
Conclusie
Conclusie
Conclusie

Je kunt het circuit in een breadboard assembleren en de code aanpassen en een SD-kaart toevoegen om de gegevens op te slaan, die later kunnen worden geanalyseerd. Een voorbeeld hiervan is dat u de spanning en frequentie tijdens piekuren kunt analyseren.

Het circuit dat ik in het breadboard heb geassembleerd, gebruikte LM324 (quad opamp) in plaats van LM358 (dual opamp), omdat ik dat IC op dat moment niet had en de landelijke lockdown vanwege de COVID-19-pandemie het voor mij moeilijk maakte om een nieuwe IC te krijgen. Het zou echter geen invloed hebben op de werking van het circuit.

Voel je vrij om hieronder te reageren voor suggesties en vragen.

Aanbevolen: