Mjerenje frekvencije i napona napajanja pomoću Arduina: 6 koraka
Mjerenje frekvencije i napona napajanja pomoću Arduina: 6 koraka
Anonim
Mjerenje frekvencije i napona napajanja pomoću Arduina
Mjerenje frekvencije i napona napajanja pomoću Arduina

Uvod:

Cilj ovog projekta je mjerenje frekvencije napajanja i napona, koji je između 220 do 240 volti i 50Hz ovdje u Indiji. Koristio sam Arduino za hvatanje signala i izračunavanje frekvencije i napona, možete koristiti bilo koji drugi mikrokontroler ili ploču koju imate. Krug zahtijeva pregršt komponenti i prilično je precizan za sve praktične svrhe.

Korak 1: Potrebne komponente

  • Arduino Uno
  • IC LM358
  • Opasni transformator (220V do 12V)
  • Kondenzatori:

    • 0.1uF
    • 2 x 1 uF
  • Otpornici:

    • 3 x 1 kOhm
    • 2 x 100 kOhm
    • 1.5kOhm
    • 3.3kOhm
    • 6.8kOhm
  • 3 x 1N4148 dioda
  • Daska za kruh i žica za prespajanje (opcionalno)

Korak 2: Šematski dijagram

Shematski dijagram
Shematski dijagram
Shematski dijagram
Shematski dijagram

U gore navedenom krugu, primarni transformator spojen je na napajanje, a primarni je spojen na naš mjerni krug

Korak 3: Razumevanje kola

Razumevanje kola
Razumevanje kola
Razumevanje kola
Razumevanje kola
Razumevanje kola
Razumevanje kola

Prema funkcionalnosti, ovo kolo se može podijeliti na četiri dijela:

O: Krug detektora nultog prelaska

Ovo kolo generira kvadratni impuls od 5 V kad god sinusni val pređe s pozitivnog na negativno. Otpornik R1 u kombinaciji s D1 i D2 ograničava zamah ulaznog napona na spoju dioda na -0,6V do +5,6V (pretpostavljajući da je napon diode naprijed 0,6V). Nadalje, možete povećati raspon ulaznog napona kruga povećanjem vrijednosti R1.

Otpornici R2 i R3 tvore razdjelnik napona kako bi ograničili zamah negativnog napona na -0,24 V, jer je ulazni zajednički mod LM358 ograničen na -0,3 V.

Otpornik R4, R5, kondenzator C1 i op-pojačalo (ovdje se koristi kao usporednik) tvore Schmittovo okidačko kolo gdje otpornici R4 i R5 postavljaju histerezu na ulaz +49,5 mV iznad zemlje. Izlaz Schmitt Triggera šalje se na Arduino PIN2 za daljnju obradu.

B: Izolacija i napon korak dolje

Kao što naziv govori, ovaj dio izolira i smanjuje napon na približno 12Vrms. Sniženi napon se dalje dovodi u krug instrumentacije.

C: Krug detektora vršnih vrijednosti

Ovo kolo određuje maksimalni vršni napon ulaznog signala. Otpornički razdjelnici R6 i R7 smanjuju ulazni napon za faktor 0,23 (12Vrms se smanjuje na 2.76Vrms). Dioda D3 provodi samo pozitivni poluciklus signala. Napon na C2 raste do vršne vrijednosti ispravljenog signala, koji se dovodi na Arduino analogni pin A0 radi daljnjeg izračunavanja napona.

Osim toga, ovaj krug možete zamijeniti preciznim krugom detektora vrha, poput ovih koji su ovdje spomenuti. Ali za moje demonstracijske svrhe, gornji krug će biti dovoljan.

D: Arduino

U ovom dijelu Arduino hvata kvadratne impulse koje generira Schmitt Trigger kolo i očitava analogni napon iz kruga detektora vrha. Podaci se dalje obrađuju kako bi se odredio vremenski period (dakle frekvencija) kvadratnog impulsa (koji je jednak vremenu napajanja izmjeničnom strujom) i napon napajanja.

Korak 4: Proračun frekvencije i napona

Izračun frekvencije:

Uz pomoć Arduina možemo izmjeriti vremenski period T signala. Pulsi kvadratnog vala iz detektora prelaska nule dovode se na pin 2, odatle možemo mjeriti vremenski period svakog impulsa. Možemo koristiti Arduino interni mjerač vremena (posebno Timer1) za izračunavanje vremenskog perioda između dva rastuća ruba kvadratnog impulsa uz pomoć prekida. Tajmer se povećava za 1 po ciklusu takta (bez predmjerača = 1), a vrijednost se pohranjuje u registar TCNT1. Stoga sat od 16 Mhz povećava brojač za 16 svake mikrosekunde. Slično za predskaler = 8, mjerač se povećava za 2 svake mikrosekunde. Otuda i vremenski period između dva rastuća ruba

T = (vrijednost TCNT1) / vrijeme potrebno za svako brojanje

Gdje, vrijeme potrebno za svaki broj = predskaler / (Arduino takt (16MHz)

Dakle, frekvencija f = 1 / T = (Arduino taktna brzina (16MHz) / (Prescaler * TCNT! Vrijednost)

Otuda je brzina tajmera (Hz) dana = (Arduino taktna brzina (16MHz)) / predmjer

a frekvencija signala je data sa = (Arduino brzina takta

Shodno tome, možemo izračunati frekvenciju f iz relacije f = 1/T.

Proračun napona:

Ugrađeni ADC Arduina ima rezoluciju od 10 bita (moguće vrijednosti = 2^10 = 1024), vraćajući vrijednosti u rasponu od 0-1023. Za izračun odgovarajućeg analognog napona V moramo koristiti sljedeću relaciju

V = (čitanje ADC -a) * 5/1023

Za izračun napona napajanja Vs (rms) moramo uzeti u obzir omjer transformatora, otpornički razdjelnik R6R7 i krug detektora vrha. Možemo jednostavno sastaviti različite faktore/omjere kao:

Omjer transformatora = 12/230 = 0,052

Razdjelnik otpornika = R7/(R6 + R7) = 0,23

Na vrhu kruga detektora = 1.414

Vs (rms) = V/(1.414*0.052*0.23) = (čitanje ADC -a)*0.289

Treba napomenuti da je ova vrijednost daleko od stvarne vrijednosti, uglavnom zbog greške u stvarnom omjeru transformatora i pada napona diode naprijed. Jedan od načina da se to zaobiđe je utvrđivanje faktora nakon sastavljanja kola. To je tako što ćete multimetrom zasebno izmjeriti napon napajanja i napon na kondenzatoru C2, a zatim izračunati Vs (rms) na sljedeći način:

Vs (rms) = ((Napon napajanja *5)/(Napon na C2 *1023)) *(Očitavanje ADC -a)

u mom slučaju, Vs (rms) = 0,33*(čitanje ADC -a)

Korak 5: Arduino kod

#define volt_in A0 // pin za čitanje analognog napona

volatile uint16_t t_period; uint16_t ADC_value = 0; plovak volt, frekv. void isr () {t_period = TCNT1; // sprema vrijednost TCNT1 u t_period TCNT1 = 0; // resetiranje Timer1 ADC_value = analogRead (volt_in); // očitavanje analognog napona} float get_freq () {uint16_t timer = t_period; if (timer == 0) vraća 0; // kako bi se izbjeglo dijeljenje s nulom else return 16000000.0/(8UL*timer); // frekvencija je dana sa f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // podesite predkaler na 8 TCNT1 = 0; // resetiranje vrijednosti Timer1 TIMSK1 = bit (TOIE1); // omogućujemo prekid preopterećenja Timer1 EIFR | = bit (INTF0); // briše zastavu prekida INT0 Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // omogućavanje kašnjenja vanjskog prekida (INT0) (1000); detachInterrupt (0); freq = get_freq (); volt = ADC_value*0,33; String buf; buf += string (freq, 3); buf += F ("Hz / t"); buf += niz (volt); buf += F ("Volti"); Serial.println (buf); }

Korak 6: Zaključak

Zaključak
Zaključak
Zaključak
Zaključak

Krug možete sastaviti u ploču s opcijama i prilagoditi kôd te dodati SD karticu za spremanje podataka, koji se kasnije mogu analizirati. Jedan takav primjer je da možete analizirati napon i frekvenciju u satima najveće potrošnje.

Krug koji sam sastavio na matičnoj ploči koristio je LM324 (quad opamp) umjesto LM358 (dual opamp) jer u tom trenutku nisam imao taj IC, a zaključavanje u cijeloj zemlji zbog pandemije COVID-19 otežalo mi je nabavku novog IC-a. Ipak, to ne bi utjecalo na rad kola.

Slobodno komentirajte ispod za sve prijedloge i upite.