Innehållsförteckning:

Strömförsörjning Frekvens- och spänningsmätning med Arduino: 6 steg
Strömförsörjning Frekvens- och spänningsmätning med Arduino: 6 steg

Video: Strömförsörjning Frekvens- och spänningsmätning med Arduino: 6 steg

Video: Strömförsörjning Frekvens- och spänningsmätning med Arduino: 6 steg
Video: N fehlt / Lampe leuchtet / LED Lampen Teil 2 / Duspol schaltet Lampe / Elektrotechnik 2024, November
Anonim
Strömförsörjning Frekvens- och spänningsmätning med Arduino
Strömförsörjning Frekvens- och spänningsmätning med Arduino

Introduktion:

Målet med detta projekt är att mäta matningsfrekvens och spänning, som är mellan 220 till 240 volt och 50 Hz här i Indien. Jag använde en Arduino för att fånga signal och beräkna frekvens och spänning, du kan använda alla andra mikrokontroller eller kort du har. Kretsen kräver en handfull komponenter och är ganska exakt för alla praktiska ändamål.

Steg 1: Komponenter krävs

  • Arduino Uno
  • IC LM358
  • Steg ner transformator (220V till 12V)
  • Kondensatorer:

    • 0,1 uF
    • 2 x 1uF
  • Motstånd:

    • 3 x 1 kOhm
    • 2 x 100kOhm
    • 1,5kOhm
    • 3.3kOhm
    • 6,8 kOhm
  • 3 x 1N4148 -diod
  • Brödbräda och bygelkabel (tillval)

Steg 2: Schematisk diagram

Schematisk diagram
Schematisk diagram
Schematisk diagram
Schematisk diagram

I kretsen ovan är transformatorns primär ansluten till elnätet och primären är ansluten till vår mätkrets

Steg 3: Förstå kretsen

Förstå kretsen
Förstå kretsen
Förstå kretsen
Förstå kretsen
Förstå kretsen
Förstå kretsen

Enligt funktionaliteten kan denna krets delas in i fyra delar:

A: Zero Crossing Detector -kretsen

Denna krets genererar en 5V kvadratisk puls när sinusvågan går från positiv till negativ. Motstånd R1 kombinerat med D1 och D2 begränsar ingångsspänningens svängning vid diodkorsningen till -0,6V till +5,6V (förutsatt att diodens framspänning är 0,6V). Dessutom kan du öka kretsens ingångsspänningsområde genom att öka värdet på R1.

Motståndet R2 och R3 bildar en spänningsdelare för att begränsa den negativa spänningssvingningen till -0,24Volts eftersom ingångsspänningen för vanligt läge för LM358 är begränsad till -0,3Volts.

Motståndet R4, R5, kondensatorn C1 och op-amparen (används här som komparator) bildar Schmitt Trigger-kretsen där motståndet R4 och R5 ställer hysteresen vid ingång +49,5 mV över marken. Utmatningen från Schmitt Trigger matas till Arduino PIN2 för vidare bearbetning.

B: Isolering och spänning Steg ner

Som namnet antyder isolerar och sänker denna del spänningen till cirka 12Vrms. Den trappade ner spänningen matas vidare till instrumentkretsen.

C: Toppdetektorkrets

Denna krets bestämmer den maximala toppspänningen för insignalen. Motståndsdelare R6 och R7 reducerar ingångsspänningen med en faktor 0,23 (12Vrms reduceras till 2,76Vrms). Dioden D3 leder endast den positiva halvcykeln för signalen. Spänningen över C2 ökar upp till toppvärdet för den rättade signalen, som matas till Arduino analoga stift A0 för att ytterligare beräkna spänningen.

Dessutom kan du ersätta denna krets med en precisionstoppdetektorkrets som dessa som nämns här. Men för mina demonstrationsändamål kommer kretsen ovan att vara tillräcklig.

D: Arduino

I denna del fångar Arduino de kvadratiska pulser som genereras av Schmitt Trigger -kretsen och läser den analoga spänningen från toppdetektorkretsen. Uppgifterna behandlas vidare för att bestämma tidsperioden (därav frekvensen) för kvadratpulsen (som är lika med personalen för växelströmstiden) och matningsspänningen.

Steg 4: Beräkning av frekvens och spänning

Beräkning av frekvens:

Med hjälp av Arduino kan vi mäta tidsperioden T för signalen. Kvadratvågspulserna från nollkorsningsdetektorn matas till stift 2, därifrån kan vi mäta tidsperioden för varje puls. Vi kan använda Arduinos interna timer (särskilt Timer1) för att beräkna tidsperioden mellan två stigande kanter på kvadratpulsen med hjälp av avbrott. Timern ökar med 1 per klockcykel (utan förkalkning = 1) och värdet lagras i registret TCNT1. Därför ökar klockan 16Mhz räknaren med 16 varje mikrosekund. På samma sätt för prescaler = 8 ökas timern med 2 varje mikrosekund. Därav tidsperioden mellan två stigande kanter

T = (TCNT1 -värde) / tid som tas för varje räkning

Var, tid för varje räkning = förskalare / (Arduino klockhastighet (16MHz)

Därför är frekvens f = 1 / T = (Arduino -klockhastighet (16MHz) / (Prescaler * TCNT! -Värde)

Därför ges timerhastigheten (Hz) av = (Arduino -klockhastighet (16MHz)) / förkalkning

och signalens frekvens ges av = (Arduino klockhastighet

På motsvarande sätt kan vi beräkna frekvensen f från förhållandet f = 1/T.

Beräkning av spänning:

Den inbyggda ADC för Arduino har en upplösning på 10 bitar (möjliga värden = 2^10 = 1024), som returnerar värden i intervallet 0-1023. För att beräkna motsvarande analoga spänning V måste vi använda följande relation

V = (ADC -läsning) * 5/1023

För att beräkna matningsspänningen Vs (rms) måste vi ta hänsyn till transformatorförhållandet, motståndsdelaren R6R7 och toppdetektorkretsen. Vi kan helt enkelt sätta ihop de olika faktorerna/förhållandet som:

Transformatorförhållande = 12/230 = 0,052

Motståndsdelare = R7/(R6 + R7) = 0,23

Vid toppdetektorkrets = 1,414

Vs (rms) = V/(1.414*0.052*0.23) = (ADC -läsning)*0.289

Det bör noteras att detta värde är långt från det verkliga värdet, främst på grund av fel i det faktiska transformatorförhållandet och diodens spänningsfall. Ett sätt att kringgå detta är att bestämma faktorn efter montering av kretsen. Det är genom att mäta matningsspänningen och spänningen över kondensatorn C2 separat med en multimeter och sedan beräkna Vs (rms) enligt följande:

Vs (rms) = ((Matningsspänning *5)/(Spänning över C2 *1023)) *(ADC -avläsning)

i mitt fall är Vs (rms) = 0,33*(ADC -läsning)

Steg 5: Arduino -kod

#define volt_in A0 // analog spänning lässtift

flyktig uint16_t t_period; uint16_t ADC_value = 0; float volt, freq; void isr () {t_period = TCNT1; // lagra TCNT1 -värde i t_period TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // läs analog spänning} float get_freq () {uint16_t timer = t_period; om (timer == 0) returnerar 0; // för att undvika division med noll annars returnera 16000000.0/(8UL*timer); // frekvens ges av f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // ställ prescaler till 8 TCNT1 = 0; // reset Timer1 -värde TIMSK1 = bit (TOIE1); // aktivera Timer1 överflödsavbrott EIFR | = bit (INTF0); // rensa INT0 -avbrottsflagga Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // aktivera extern avbrott (INT0) fördröjning (1000); detachInterrupt (0); freq = get_freq (); volt = ADC_värde*0,33; String buf; buf += String (freq, 3); buf += F ("Hz / t"); buf += Sträng (volt); buf += F ("Volt"); Serial.println (buf); }

Steg 6: Slutsats

Slutsats
Slutsats
Slutsats
Slutsats

Du kan montera kretsen i en brödbräda och justera koden och lägga till ett SD -kort för att lagra data, som senare kan analyseras. Ett sådant exempel är att du kan analysera spänningen och frekvensen vid högtrafik.

Kretsen jag monterade i brödbrädan använde LM324 (quad opamp) istället för LM358 (dual opamp) eftersom jag inte hade den IC: n just nu och rikstäckande lockdown på grund av COVID-19-pandemin gjorde det svårt för mig att få en ny IC. Ändå skulle det inte påverka kretsens funktion.

Kommentera gärna nedan för förslag och frågor.

Rekommenderad: