Sisällysluettelo:
- Vaihe 1: Tarvittavat komponentit
- Vaihe 2: Kaavio
- Vaihe 3: Piirin ymmärtäminen
- Vaihe 4: Taajuuden ja jännitteen laskeminen
- Vaihe 5: Arduino -koodi
- Vaihe 6: Johtopäätös
Video: Virtalähteen taajuuden ja jännitteen mittaus Arduinolla: 6 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
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
Yllä olevassa piirissä muuntajan ensiö on kytketty syöttöverkkoon ja ensiö on kytketty mittauspiiriin
Vaihe 3: 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
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:
FIR -suodatus luotettavampaa taajuuden havaitsemista varten: 5 vaihetta
FIR -suodatus luotettavampaa taajuuden havaitsemista varten: Olen todella suuri fani akellyirlin ohjeista luotettavasta taajuuden havaitsemisesta DSP -tekniikoiden avulla, mutta joskus hänen käyttämänsä tekniikka ei ole tarpeeksi hyvä, jos sinulla on meluisia mittauksia. taajuus det
DC -jännitteen mittaus Arduinolla: 5 vaihetta
Tasavirtajännitteen mittaus Arduinon avulla: Tässä projektissa näytän sinulle, kuinka mitata tasavirtajännite 50 volttiin asti käyttämällä arduinoa ja ja näyttö OLED -näyttömoduulin osassa tarvitsevat arduino UNOoled -näytön 10 k ohmin vastuksen 1 k ohmin vastuksen hyppykaapelin
True-RMS-AC-jännitteen mittaus: 14 vaihetta
True-RMS-AC-jännitteen mittaaminen: Tänään käytämme STM32 Maple Miniä AC-lukeman mittaamiseen. Esimerkissämme saamme sähköverkon RMS -arvon. Tämä on erittäin hyödyllistä niille, jotka haluavat seurata esineiden internetin sähköverkkoa. Luomme sitten sovelluksen
Jännitteen mittaus Arduinolla: 5 vaihetta
Jännitteen mittaus Arduinon avulla: Jännitteen mittaaminen on melko helppoa millä tahansa mikrokontrollerilla verrattuna virran mittaukseen. Jännitteiden mittaaminen on tarpeen, jos työskentelet paristojen kanssa tai haluat tehdä oman säädettävän virtalähteen. Vaikka tämä menetelmä soveltuu
DC-jännitteen mittaus Arduinolla ja solmulla-PUNAINEN: 8 vaihetta (kuvilla)
DC-jännitteen mittaaminen Arduinolla ja Node-RED: llä: Arduinolla on paljon opetusohjelmia DC-jännitteen mittaamiseen, tässä tapauksessa löysin opetusohjelman, jonka pidän parhaana toiminnallisena menetelmänä DC: n mittaamiseksi ilman vastuksen syöttöarvoja, vaatii vain jonkin verran vastusta ja yleismittari