Sisällysluettelo:

Virtalähteen taajuuden ja jännitteen mittaus Arduinolla: 6 vaihetta
Virtalähteen taajuuden ja jännitteen mittaus Arduinolla: 6 vaihetta

Video: Virtalähteen taajuuden ja jännitteen mittaus Arduinolla: 6 vaihetta

Video: Virtalähteen taajuuden ja jännitteen mittaus Arduinolla: 6 vaihetta
Video: Mittaa jopa 500A DC-virta shuntivastuksella Arduinolla 2024, Marraskuu
Anonim
Virtalähteen taajuuden ja jännitteen mittaus Arduinolla
Virtalähteen taajuuden ja jännitteen mittaus Arduinolla

Johdanto:

Tämän projektin tavoitteena on mitata syöttötaajuutta ja jännitettä, joka on 220-240 volttia ja 50 Hz täällä Intiassa. Käytin Arduinoa signaalin sieppaamiseen ja taajuuden ja jännitteen laskemiseen, voit käyttää mitä tahansa muuta mikrokontrolleria tai korttia. Piiri vaatii kourallisen komponentteja ja on melko tarkka kaikkiin käytännön tarkoituksiin.

Vaihe 1: Tarvittavat komponentit

  • Arduino Uno
  • IC LM358
  • Sammuta muuntaja (220V - 12V)
  • Kondensaattorit:

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

    • 3 x 1 kOhm
    • 2 x 100 kOhm
    • 1,5 kOhm
    • 3,3 kOhm
    • 6,8 kOhm
  • 3 x 1N4148 diodi
  • Leipälauta ja hyppylanka (valinnainen)

Vaihe 2: Kaavio

Kaaviokuva
Kaaviokuva
Kaaviokuva
Kaaviokuva

Yllä olevassa piirissä muuntajan ensiö on kytketty syöttöverkkoon ja ensiö on kytketty mittauspiiriin

Vaihe 3: Piirin ymmärtäminen

Piirin ymmärtäminen
Piirin ymmärtäminen
Piirin ymmärtäminen
Piirin ymmärtäminen
Piirin ymmärtäminen
Piirin ymmärtäminen

Toiminnallisuuden mukaan tämä piiri voidaan jakaa neljään osaan:

V: Zero Crossing Detector -piiri

Tämä piiri tuottaa 5 V: n neliöpulssin aina, kun siniaalto siirtyy positiivisesta negatiiviseksi. Vastus R1 yhdessä D1: n ja D2: n kanssa rajoittaa tulojännitteen heilahtelun diodiliitännässä -0,6 V - +5,6 V (olettaen, että diodin etujännite on 0,6 V). Lisäksi voit lisätä piirin tulojännitealuetta lisäämällä R1 -arvoa.

Vastus R2 ja R3 muodostavat jännitteenjakajan, joka rajoittaa negatiivisen jännitteen heilahduksen -0,24 volttiin, koska LM358: n tulomoduuli on rajoitettu -0,3 volttiin.

Vastus R4, R5, kondensaattori C1 ja op-vahvistin (tässä käytetään vertailuna) muodostavat Schmitt-laukaisupiirin, jossa vastus R4 ja R5 asettavat hystereesin tulolle +49,5 mV maanpinnan yläpuolelle. Schmitt -liipaisimen lähtö syötetään Arduino PIN2 -laitteeseen jatkokäsittelyä varten.

B: Eristys ja jännite laskevat

Kuten nimestä voi päätellä, tämä osa eristää ja laskee jännitteen noin 12 Vrms: iin. Alennettu jännite syötetään edelleen instrumenttipiiriin.

C: Huipputunnistinpiiri

Tämä piiri määrittää tulosignaalin suurimman huippujännitteen. Vastusjakaja R6 ja R7 pienentävät tulojännitettä kertoimella 0,23 (12Vrms on 2,76Vrms). Diodi D3 johtaa vain signaalin positiivisen puolijakson. Jännite C2: n välillä nousee tasatun signaalin huippuarvoon, joka syötetään Arduinon analogiseen nastaan A0 jännitteen laskemiseksi edelleen.

Lisäksi voit korvata tämän piirin tässä mainituilla tarkkuuden huippuilmaisupiireillä. Mutta esittelyä varten yllä oleva piiri on riittävä.

D: Arduino

Tässä osassa Arduino kaappaa Schmitt -laukaisupiirin tuottamat neliöpulssit ja lukee analogisen jännitteen huippuilmaisupiiristä. Tietoja käsitellään edelleen neliöpulssin ajanjakson (täten taajuuden) (joka on yhtä suuri kuin verkkovirta -aikahenkilö) ja syöttöjännitteen määrittämiseksi.

Vaihe 4: Taajuuden ja jännitteen laskeminen

Taajuuden laskeminen:

Arduinon avulla voimme mitata signaalin ajanjakson T. Nollan ylitysilmaisimen neliöaaltopulssit syötetään nastaan 2, josta voimme mitata jokaisen pulssin ajanjakson. Voimme käyttää Arduinon sisäistä ajastinta (erityisesti ajastinta 1) laskeaksesi ajan neliöpulssin kahden nousevan reunan välillä keskeytysten avulla. Ajastin kasvaa yhdellä kellojaksolla (ilman esiasetinta = 1) ja arvo tallennetaan rekisteriin TCNT1. Näin ollen 16 MHz: n kello lisää laskuria 16 mikrosekunnin välein. Vastaavasti esiasetin = 8 ajastinta lisätään 2: lla joka mikrosekunti. Siksi kahden nousevan reunan välinen aika

T = (TCNT1 -arvo) / kullakin laskennalla käytetty aika

Missä, kullekin laskemiselle kuluva aika = esiasetin / (Arduino -kellotaajuus (16 MHz)

Näin ollen taajuus f = 1 / T = (Arduino -kellotaajuus (16 MHz) / (Esisäädin * TCNT! -Arvo)

Täten ajastimen nopeus (Hz) annetaan = (Arduino -kellotaajuus (16 MHz)) / esiscaler

ja signaalin taajuus annetaan = (Arduino -kellonopeus

Vastaavasti voimme laskea taajuuden f suhteesta f = 1/T.

Jännitteen laskeminen:

Arduinon sisäisen ADC: n resoluutio on 10 bittiä (mahdolliset arvot = 2^10 = 1024) ja palauttaa arvot välillä 0-1023. Vastaavan analogijännitteen V laskemiseksi meidän on käytettävä seuraavaa suhdetta

V = (ADC -lukema) * 5/1023

Syöttöjännitteen Vs (rms) laskemiseksi on otettava huomioon muuntajasuhde, vastuksenjakaja R6R7 ja huippuilmaisupiiri. Voimme yksinkertaisesti koota eri tekijät/suhteen seuraavasti:

Muuntajasuhde = 12/230 = 0,052

Vastusjakaja = R7/(R6 + R7) = 0,23

Huippuilmaisupiirissä = 1.414

Vs (rms) = V/(1,414*0,052*0,23) = (ADC -lukema)*0,289

On huomattava, että tämä arvo on kaukana todellisesta arvosta, mikä johtuu pääasiassa muuntajan todellisen suhteen virheestä ja diodin eteenpäin suuntautuvasta jännitehäviöstä. Yksi tapa kiertää tämä on määrittää tekijä piirin kokoamisen jälkeen. Eli mittaamalla syöttöjännite ja kondensaattorin C2 jännite erikseen yleismittarilla ja laskemalla sitten Vs (rms) seuraavasti:

Vs (rms) = ((syöttöjännite *5)/(jännite C2 *1023)) *(ADC -lukema)

minun tapauksessani Vs (rms) = 0,33*(ADC -lukema)

Vaihe 5: Arduino -koodi

#define volt_in A0 // analogisen jännitteen lukunasta

haihtuva uint16_t t_period; uint16_t ADC_value = 0; kelluva voltti, taajuus; void isr () {t_period = TCNT1; // tallentaa TCNT1 -arvon t_jaksossa TCNT1 = 0; // nollaa ajastin1 ADC_value = analogRead (volt_in); // lue analogijännite} float get_freq () {uint16_t timer = t_period; if (ajastin == 0) palauta 0; // välttää jakaminen nollalla muulla palauttaa 16000000.0/(8UL*ajastin); // taajuuden antaa f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bitti (CS11); // aseta esisäädin 8 TCNT1 = 0; // nollaa ajastimen1 arvo TIMSK1 = bit (TOIE1); // ota käyttöön ajastimen 1 ylivuotokeskeytys EIFR | = bit (INTF0); // tyhjennä INT0 keskeytyslippu Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // ulkoisen keskeytyksen (INT0) viive (1000); irrota (0); taajuus = get_freq (); voltti = ADC_arvo*0,33; String buf; buf += Jono (taajuus, 3); buf += F ("Hz / t"); buf += Jono (voltti); buf += F ("volttia"); Sarja.println (buf); }

Vaihe 6: Johtopäätös

Johtopäätös
Johtopäätös
Johtopäätös
Johtopäätös

Voit koota piirin leipälevylle ja säätää koodia ja lisätä SD -kortin tietojen tallentamiseen, joita voidaan myöhemmin analysoida. Yksi esimerkki on, voit analysoida jännitettä ja taajuutta ruuhka -aikoina.

Leipälautaan kootussa piirissä käytettiin LM324 (quad opamp) -laitetta LM358 (dual opamp) -sovelluksen sijasta, koska minulla ei ollut kyseistä IC: tä sillä hetkellä ja valtakunnallinen lukitus COVID-19-pandemian vuoksi vaikeutti uuden IC: n saamista. Se ei kuitenkaan vaikuta piirin toimintaan.

Voit vapaasti kommentoida alla ehdotuksia ja kysymyksiä.

Suositeltava: