Sadržaj:

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

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

Video: Mjerenje frekvencije i napona napajanja pomoću Arduina: 6 koraka
Video: Книга - Моя первая схема ArduMikron 2024, Studeni
Anonim
Mjerenje frekvencije i napona napajanja pomoću Arduina
Mjerenje frekvencije i napona napajanja pomoću Arduina

Uvod:

Cilj ovog projekta je mjerenje opskrbne frekvencije i napona, koji je ovdje u Indiji između 220 do 240 volti i 50Hz. 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 točan za sve praktične svrhe.

Korak 1: Potrebne komponente

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

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

    • 3 x 1 kOhm
    • 2 x 100 kOhm
    • 1,5 kOhm
    • 3,3 kOhm
    • 6,8 kOhm
  • 3 x 1N4148 dioda
  • Daska za kruh i žica za spajanje (izborno)

Korak 2: Shematski dijagram

Shematski dijagram
Shematski dijagram
Shematski dijagram
Shematski dijagram

U gornjem krugu primarni transformator spojen je na opskrbnu mrežu, a primarni je spojen na naš mjerni krug

Korak 3: Razumijevanje kruga

Razumijevanje sklopa
Razumijevanje sklopa
Razumijevanje sklopa
Razumijevanje sklopa
Razumijevanje sklopa
Razumijevanje sklopa

Prema funkcionalnosti, ovaj se krug može podijeliti na četiri dijela:

O: Krug detektora nultog prelaska

Ovaj krug generira kvadratni impuls od 5 V kad god sinusni val pređe iz pozitivnog u negativan. Otpornik R1 u kombinaciji s D1 i D2 ograničava njihanje ulaznog napona na spoju dioda na -0,6 V do +5,6 V (pod pretpostavkom da je napon diode naprijed 0,6 V). 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 za usporedbu) tvore Schmittov sklop okidača gdje otpornici R4 i R5 postavljaju histerezu na ulaz +49,5 mV iznad zemlje. Izlaz Schmittovog okidača šalje se na Arduino PIN2 radi daljnje obrade.

B: Izolacija i napon korak dolje

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

C: Krug detektora vršnih vrijednosti

Ovaj krug određuje maksimalni vršni napon ulaznog signala. Otpornički razdjelnik 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 krugom preciznog detektora vrha poput ovih koji su ovdje spomenuti. Ali za moje demonstracijske svrhe gornji krug bit će dovoljan.

D: Arduino

U ovom dijelu, Arduino snima kvadratne impulse generirane Schmittovim okidačkim krugom i čita analogni napon iz kruga detektora vrha. Podaci se dalje obrađuju kako bi se odredilo vremensko razdoblje (dakle frekvencija) kvadratnog impulsa (koji je jednak osobi s izmjeničnom strujom) i napon napajanja.

Korak 4: Izračun frekvencije i napona

Izračun frekvencije:

Uz pomoć Arduina možemo izmjeriti vremensko razdoblje T signala. Kvadratni valni impulsi iz detektora prelaska nule dovode se na pin 2, odatle možemo mjeriti vremensko razdoblje svakog impulsa. Možemo koristiti Arduino unutarnji mjerač vremena (posebno Timer1) za izračunavanje vremenskog razdoblja između dva rastuća ruba kvadratnog impulsa uz pomoć prekida. Odbrojavanje 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 vremensko razdoblje između dva rastuća ruba

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

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

Dakle, frekvencija f = 1 / T = (Arduino brzina takta (16MHz) / (predskaler * vrijednost TCNT!))

Stoga je brzina timera (Hz) dana = (Arduino brzina takta (16MHz)) / predmjer

a frekvencija signala je dana = (Arduino brzina takta

U skladu s tim, 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 upotrijebiti 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) = (očitanje ADC -a)*0.289

Valja 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 kruga. To je mjerenjem napona napajanja i napona na kondenzatoru C2 odvojeno multimetrom, a zatim izračunavanjem 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*(očitanje ADC -a)

Korak 5: Arduino kod

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

hlapljivo uint16_t t_period; uint16_t ADC_value = 0; plovak volt, frekvencija; void isr () {t_period = TCNT1; // pohraniti vrijednost TCNT1 u t_period TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // čitanje analognog napona} float get_freq () {uint16_t timer = t_period; if (timer == 0) vrati 0; // kako bi se izbjeglo dijeljenje s nulom else return 16000000.0/(8UL*timer); // frekvencija je dana f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // namjestite predskaler na 8 TCNT1 = 0; // poništavanje vrijednosti Timer1 TIMSK1 = bit (TOIE1); // omogući Timer1 preljevni prekid EIFR | = bit (INTF0); // brisanje zastavice prekida INT0 Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // omogućuju kašnjenje vanjskog prekida (INT0) (1000); detachInterrupt (0); freq = get_freq (); volt = ADC_vrijednost*0,33; Gudački buf; buf += niz (frekvencija, 3); buf += F ("Hz / t"); buf += niz (volt); buf += F ("Volti"); Serijski.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 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 dobivanje novog IC-a. Ipak, to ne bi utjecalo na rad kruga.

Za sve prijedloge i upite slobodno komentirajte u nastavku.

Preporučeni: