Përmbajtje:

Matja e frekuencës dhe tensionit të furnizimit me energji duke përdorur Arduino: 6 hapa
Matja e frekuencës dhe tensionit të furnizimit me energji duke përdorur Arduino: 6 hapa

Video: Matja e frekuencës dhe tensionit të furnizimit me energji duke përdorur Arduino: 6 hapa

Video: Matja e frekuencës dhe tensionit të furnizimit me energji duke përdorur Arduino: 6 hapa
Video: Измерьте ток до 500A с помощью шунтирующего резистора с помощью Arduino 2024, Qershor
Anonim
Matja e frekuencës dhe tensionit të furnizimit me energji duke përdorur Arduino
Matja e frekuencës dhe tensionit të furnizimit me energji duke përdorur Arduino

Prezantimi:

Qëllimi i këtij projekti është të matë frekuencën dhe tensionin e furnizimit, i cili është midis 220 deri 240 Volt dhe 50Hz këtu në Indi. Kam përdorur një Arduino për kapjen e sinjalit dhe llogaritjen e frekuencës dhe tensionit, ju mund të përdorni çdo mikrokontrollues ose bord tjetër që keni. Qarku kërkon një pjesë të vogël të përbërësve dhe është mjaft i saktë për të gjitha qëllimet praktike.

Hapi 1: Përbërësit e kërkuar

  • Arduino Uno
  • IC LM358
  • Transformatori poshtë (220V në 12V)
  • Kondensatorët:

    • 0.1uF
    • 2 x 1uF
  • Rezistentët:

    • 3 x 1kOhm
    • 2 x 100kOhm
    • 1.5kOhm
    • 3.3kOhm
    • 6.8kOhm
  • 3 x 1N4148 diodë
  • Bordi i Bukës dhe tela Jumper (opsionale)

Hapi 2: Diagrami Skematik

Diagram skematik
Diagram skematik
Diagram skematik
Diagram skematik

Në qarkun e mësipërm, transformatori kryesor është i lidhur me rrjetin e furnizimit dhe primari është i lidhur me qarkun tonë matës

Hapi 3: Kuptimi i Qarkut

Kuptimi i Qarkut
Kuptimi i Qarkut
Kuptimi i Qarkut
Kuptimi i Qarkut
Kuptimi i Qarkut
Kuptimi i Qarkut

Sipas funksionalitetit, ky qark mund të ndahet në katër pjesë:

Përgjigje: Qarku i Detektorit Zero të Kryqëzimit

Ky qark gjeneron një impuls katror 5V sa herë që vala e sinusit kalon nga pozitive në negative. Rezistori R1 i kombinuar me D1 dhe D2 kufizon lëvizjen e tensionit të hyrjes në kryqëzimin e diodës në -0.6V në +5.6V (duke supozuar se tensioni i diodës përpara është 0.6V). Për më tepër, ju mund të rrisni gamën e tensionit hyrës të qarkut duke rritur vlerën e R1.

Rezistenca R2 dhe R3 formojnë një ndarës të tensionit për të kufizuar lëvizjen e tensionit negativ në -0.24Volt pasi tensioni i zakonshëm i hyrjes i LM358 është i kufizuar në -0.3Volt.

Rezistenca R4, R5, kondensatori C1 dhe op-amp (këtu përdoret si krahasues) formojnë qarkun Schmitt Trigger ku rezistori R4 dhe R5 vendosin histerezën në hyrje +49.5mV mbi tokë. Prodhimi i Schmitt Trigger i jepet Arduino PIN2 për përpunim të mëtejshëm.

B: Izolimi dhe Tensioni Hapi poshtë

Siç sugjeron emri, kjo pjesë izolon dhe ul tensionin në afërsisht 12Vrms. Tensioni i zvogëluar ushqehet më tej në qarkun e instrumenteve.

C: Qarku i detektorit të pikut

Ky qark përcakton tensionin maksimal të pikut të sinjalit hyrës. Ndarësi i rezistencës R6 dhe R7 zvogëlojnë tensionin e hyrjes me një faktor prej 0.23 (12Vrms zvogëlohet në 2.76Vrms). Dioda D3 kryen vetëm gjysmën e ciklit pozitiv të sinjalit. Tensioni në C2 rritet deri në vlerën kulmore të sinjalit të korrigjuar, i cili ushqehet me pinin A0 analog Arduino për të llogaritur më tej tensionin.

Përveç kësaj, ju mund ta zëvendësoni këtë qark me një qark të detektorit të pikut të saktë, si këto të përmendura këtu. Por për qëllimet e mia demonstruese, qarku i mësipërm do të jetë i mjaftueshëm.

D: Arduino

Në këtë pjesë, Arduino kap impulset katrore të krijuara nga qarku Schmitt Trigger dhe lexon tensionin analog nga qarku i detektorit të pikut. Të dhënat përpunohen më tej për të përcaktuar periudhën kohore (pra frekuencën) e pulsit katror (i cili është i barabartë me personin e kohës së furnizimit me ac) dhe tensionin e furnizimit.

Hapi 4: Llogaritja e Frekuencës dhe Tensionit

Llogaritja e frekuencës:

Me ndihmën e Arduino, ne mund të masim periudhën kohore T të sinjalit. Impulset e valës katrore nga detektori i kalimit zero ushqehen në pin 2, prej aty mund të masim periudhën kohore të secilit impuls. Ne mund të përdorim kohëmatësin e brendshëm të Arduino (veçanërisht Timer1) për të llogaritur periudhën kohore midis dy skajeve në rritje të pulsit katror me ndihmën e ndërprerjeve. Kohëmatësi rritet me 1 për ciklin e orës (pa prescaler = 1) dhe vlera ruhet në regjistrin TCNT1. Prandaj ora 16Mhz e rrit numëruesin me 16 çdo mikrosekondë. Në mënyrë të ngjashme për prescaler = 8 kohëmatësi rritet me 2 çdo mikrosekondë. Prandaj periudha kohore midis dy skajeve në rritje

T = (vlera TCNT1) / koha e marrë për çdo numërim

Ku, koha e marrë për çdo numërim = prescaler / (shpejtësia e orës Arduino (16MHz)

Prandaj, frekuenca f = 1 / T = (shpejtësia e orës Arduino (16MHz) / (Prescaler * TCNT! Vlera)

Prandaj shpejtësia e kohëmatësit (Hz) jepet nga = (shpejtësia e orës Arduino (16MHz)) / parashkruesi

dhe frekuenca e sinjalit jepet me = (shpejtësia e orës Arduino

Në mënyrë korresponduese, ne mund të llogarisim frekuencën f nga relacioni f = 1/T.

Llogaritja e tensionit:

ADC në bord i Arduino ka një rezolutë prej 10 bitësh (vlera të mundshme = 2^10 = 1024), duke i kthyer vlerat në intervalin 0-1023. Për të llogaritur tensionin përkatës analog V ne duhet të përdorim relacionin e mëposhtëm

V = (Leximi ADC) * 5/1023

Për të llogaritur tensionin e furnizimit Vs (rms) duhet të kemi parasysh Raportin e Transformatorit, ndarësin e Rezistorit R6R7 dhe qarkun e detektorit të pikut. Ne thjesht mund t'i bashkojmë faktorët/raportet e ndryshme si:

Raporti i transformatorit = 12/230 = 0.052

Ndarësi i rezistencës = R7/(R6 + R7) = 0.23

Në pikun e detektorit qark = 1.414

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

Duhet të theksohet se kjo vlerë është larg vlerës aktuale, kryesisht për shkak të gabimit në raportin aktual të transformatorit dhe rënies së tensionit të diodës përpara. Një mënyrë për ta anashkaluar këtë është përcaktimi i faktorit pas montimit të qarkut. Kjo është duke matur tensionin e furnizimit dhe tensionin në kondensatorin C2 veç e veç me një multimetër, pastaj duke llogaritur Vs (rms) si më poshtë:

Vs (rms) = ((Tensioni i Furnizimit *5)/(Tensioni në C2 *1023)) *(Leximi ADC)

në rastin tim, Vs (rms) = 0.33*(Leximi ADC)

Hapi 5: Kodi Arduino

#përcaktoni volt_in A0 // kunja e leximit të tensionit analog

e paqëndrueshme uint16_t t_periodë; uint16_t ADC_vlera = 0; noton volt, frekuencë; void isr () {t_periodë = TCNT1; // ruani vlerën e TCNT1 në t_periodën TCNT1 = 0; // rivendos Timer1 ADC_value = analogRead (volt_in); // lexo tension analog} float get_freq () {timer uint16_t = t_periodë; nëse (kohëmatësi == 0) kthehet 0; // për të shmangur ndarjen me zero tjetër kthim 16000000.0/(kohëmatës 8UL*); // frekuenca jepet nga f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // vendos preskalerin në 8 TCNT1 = 0; // rivendos vlerën e Kohëmatësit1 TIMSK1 = bit (TOIE1); // aktivizoni ndërprerjen e tejmbushjes së Timer1 EIFR | = bit (INTF0); // pastroni flamurin e ndërprerjes INT0 Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // aktivizoni vonesën e ndërprerjes së jashtme (INT0) (1000); detachInterrupt (0); freq = merrni_freq (); volt = ADC_vlera*0.33; Buzë me tela; buf += String (freq, 3); buf += F ("Hz / t"); buf += String (volt); buf += F ("Volt"); Serial.println (buf); }

Hapi 6: Përfundimi

Përfundim
Përfundim
Përfundim
Përfundim

Ju mund të mblidhni qarkun në një pjatë dhe të ndryshoni kodin dhe të shtoni një Kartë SD për të ruajtur të dhënat, të cilat më vonë mund të analizohen. Një shembull i tillë është, ju mund të analizoni tensionin dhe frekuencën në orët e pikut.

Qarku që mblodha në pjatën e bukës përdori LM324 (kuadrat opamp) në vend të LM358 (opamp të dyfishtë) pasi nuk e kisha atë IC në atë moment dhe bllokimi mbarëkombëtar për shkak të pandemisë COVID-19 e bëri të vështirë për mua të merrja një IC të ri Me Sidoqoftë, nuk do të ndikojë në funksionimin e qarkut.

Mos ngurroni të komentoni më poshtë për çdo sugjerim dhe pyetje.

Recommended: