Sisukord:
- Samm: nõutavad komponendid
- Samm: skemaatiline skeem
- 3. samm: ahela mõistmine
- 4. samm: sageduse ja pinge arvutamine
- Samm: Arduino kood
- 6. samm: järeldus
Video: Toiteallika sageduse ja pinge mõõtmine Arduino abil: 6 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
Sissejuhatus:
Selle projekti eesmärk on mõõta toitesagedust ja pinget, mis on siin Indias vahemikus 220 kuni 240 volti ja 50 Hz. Kasutasin signaali hõivamiseks ning sageduse ja pinge arvutamiseks Arduinot, võite kasutada mis tahes muud mikrokontrollerit või plaati. Vooluahel nõuab käputäis komponente ja on praktilistel eesmärkidel üsna täpne.
Samm: nõutavad komponendid
- Arduino Uno
- IC LM358
- Lülitage trafo välja (220V kuni 12V)
-
Kondensaatorid:
- 0,1 uF
- 2 x 1 uF
-
Takistid:
- 3 x 1 kOhm
- 2 x 100 kOhm
- 1,5 kOhm
- 3,3 kOhm
- 6,8 kOhm
- 3 x 1N4148 dioodi
- Leivalaud ja hüppaja traat (valikuline)
Samm: skemaatiline skeem
Ülaltoodud vooluahelas on trafo primaar ühendatud toitevõrguga ja primaar on ühendatud meie mõõteahelaga
3. samm: ahela mõistmine
Vastavalt funktsionaalsusele saab selle vooluahela jagada neljaks osaks:
V: Nullristumise detektori ahel
See vooluahel genereerib 5 V ruutimpulssi alati, kui siinuslaine muutub positiivsest negatiivseks. Takisti R1 koos D1 ja D2 -ga piirab sisendpinge kõikumist dioodi ristmikul -0,6V kuni +5,6V (eeldades, et dioodi edasipinge on 0,6V). Lisaks saate suurendada ahela sisendpinge vahemikku, suurendades väärtust R1.
Takisti R2 ja R3 moodustavad pingejaguri, et piirata negatiivse pinge kõikumist -0,24 volti, kuna LM358 sisendpinge on piiratud -0,3 voltiga.
Takisti R4, R5, kondensaator C1 ja op-amp (siin kasutatakse võrdlusena) moodustavad Schmitti käivitusahela, kus takisti R4 ja R5 seavad hüstereesi sisendil +49,5 mV maapinnast. Schmitti päästiku väljund suunatakse edasiseks töötlemiseks Arduino PIN2 -sse.
B: isolatsioon ja pinge vähenevad
Nagu nimigi ütleb, eraldab see osa ja vähendab pinget umbes 12 Vrms -ni. Alandatud pinget juhitakse edasi mõõteriistade ahelasse.
C: tippdetektori ahel
See ahel määrab sisendsignaali maksimaalse tipppinge. Takisti jagaja R6 ja R7 vähendavad sisendpinget 0,23 korda (12Vrms vähendatakse 2,76Vrms). Diood D3 juhib ainult signaali positiivset pooltsüklit. Pinge C2 -s tõuseb kuni alaldatud signaali tippväärtuseni, mis antakse pinge edasiseks arvutamiseks Arduino analoogpistikule A0.
Lisaks võite selle vooluahela asendada siin mainitud täppispiikide detektoriga. Kuid minu tutvustamiseks piisab ülaltoodud vooluringist.
D: Arduino
Selles osas salvestab Arduino Schmitti käivitusahela tekitatud ruudukujulisi impulsse ja loeb piikdetektori ahelast analoogpinget. Andmeid töödeldakse edasi, et määrata ruutimpulsi ajavahemik (seega sagedus) (mis on võrdne vahelduvvoolu toiteajaga) ja toitepinge.
4. samm: sageduse ja pinge arvutamine
Sageduse arvutamine:
Arduino abil saame mõõta signaali ajavahemikku T. Null-ristumisanduri ruutlaineimpulsid suunatakse tihvti 2, sealt saame mõõta iga impulsi ajavahemikku. Arduino sisemise taimeriga (täpsemalt Timer1) saame katkestuste abil arvutada ajavahemiku ruutimpulsi kahe tõusva serva vahel. Taimer suureneb ühe tsükli kohta 1 võrra (ilma eelseadistamiseta = 1) ja väärtus salvestatakse registrisse TCNT1. Seega suurendab 16Mhz kell loendurit iga mikrosekundi võrra 16 võrra. Sarnaselt prescaler = 8 korral suurendatakse taimerit iga mikrosekundi võrra 2 võrra. Sellest ka ajavahemik kahe tõusva serva vahel
T = (TCNT1 väärtus) / iga loenduse jaoks kulunud aeg
Kus, iga loenduse jaoks kulunud aeg = prescaler / (Arduino taktsagedus (16 MHz)
Seega on sagedus f = 1 / T = (Arduino taktsagedus (16 MHz) / (Prescaler * TCNT! Väärtus)
Seega on taimerikiirus (Hz) antud = (Arduino taktsagedus (16MHz)) / prescaler
ja signaali sageduse annab = (Arduino taktsagedus
Vastavalt saame sageduse f arvutada seosest f = 1/T.
Pinge arvutamine:
Arduino pardal oleva ADC eraldusvõime on 10 bitti (võimalikud väärtused = 2^10 = 1024), tagastades väärtused vahemikus 0-1023. Vastava analoogpinge V arvutamiseks peame kasutama järgmist seost
V = (ADC näit) * 5/1023
Toitepinge Vs (rms) arvutamiseks peame arvestama trafo suhtega, takisti jagajaga R6R7 ja piikdetektori ahelaga. Võime lihtsalt kokku panna erinevad tegurid/suhted järgmiselt:
Trafo suhe = 12/230 = 0,052
Takisti jagaja = R7/(R6 + R7) = 0,23
Tippdetektori ahelas = 1,414
Vs (rms) = V/(1,414*0,052*0,23) = (ADC näit)*0,289
Tuleb märkida, et see väärtus on tegelikust väärtusest kaugel, peamiselt trafo tegeliku suhte vea ja dioodi edasipinge languse tõttu. Üks võimalus sellest mööda hiilida on teguri määramine pärast vooluringi kokkupanekut. See on mõõtes toitepinget ja kondensaatori C2 pinget eraldi multimeetriga, seejärel arvutades Vs (rms) järgmiselt:
Vs (rms) = ((toitepinge *5)/(pinge C2 *1023)) *(ADC näit)
minu puhul Vs (rms) = 0,33*(ADC lugemine)
Samm: Arduino kood
#define volt_in A0 // analoogpinge lugemisnõel
lenduv uint16_t t_periood; uint16_t ADC_väärtus = 0; ujuk volt, sagedus; tühine isr () {t_periood = TCNT1; // salvesta TCNT1 väärtus t_perioodis TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // loe analoogpinget} float get_freq () {uint16_t timer = t_period; if (taimer == 0) tagastab 0; // nulliga jagamise vältimiseks tagasta 16000000.0/(8UL*taimer); // sageduse annab f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // seadista eelvalija 8 TCNT1 = 0; // reset Timer1 value TIMSK1 = bit (TOIE1); // lubage taimer1 ülevoolu katkestus EIFR | = bit (INTF0); // tühjenda INT0 katkestuslipp Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // lubage väline katkestus (INT0) viivitus (1000); detachInterrupt (0); sagedus = get_freq (); volt = ADC_väärtus*0,33; String buf; buf += string (sagedus, 3); buf += F ("Hz / t"); buf += String (volt); buf += F ("voltid"); Seeria.println (buf); }
6. samm: järeldus
Saate vooluahela leivaplaadile kokku panna ja koodi näpistada ning andmete salvestamiseks SD -kaardi lisada, mida saab hiljem analüüsida. Üks selline näide on pinge ja sageduse analüüsimine tipptundidel.
Leivaplaadis kokku pandud vooluahelas kasutati LM358 (kahekordne opamp) asemel LM324 (quad opamp), kuna mul polnud seda IC-d sel hetkel ja üleriigiline lukustus COVID-19 pandeemia tõttu muutis mul uue IC hankimise keeruliseks. Sellest hoolimata ei mõjuta see vooluringi tööd.
Soovituste ja küsimuste korral võite julgelt allpool kommenteerida.
Soovitan:
Alalisvoolu pinge mõõtmine Arduino abil: 5 sammu
Alalisvoolu pinge mõõtmine Arduino abil: Selles projektis näitan teile, kuidas mõõta alalisvoolu pinget kuni 50 V, kasutades arduino ja ja OLED -ekraanimooduli osa kuvamiseks on vaja arduino UNOoled ekraani 10 kΩ takisti 1 kΩ takisti hüppaja kaabel
Reguleeritav pinge alalisvoolu toide LM317 pingeregulaatori abil: 10 sammu
Reguleeritav pinge alalisvoolu toide LM317 pingeregulaatori abil: Selles projektis olen kujundanud lihtsa reguleeritava pinge alalisvoolu toiteallika, kasutades LM317 IC -d koos LM317 toiteahela skeemiga. Kuna selles vooluahelas on sisseehitatud silla alaldi, saame sisendisse otse ühendada 220V/110V vahelduvvoolu
Diy toiteallika muutmine SMPS -i abil: 6 sammu
Diy toiteallika muutmine SMPS -i abil: Hei täna selles juhendatavas näitan teile, kuidas ma oma esimese iga toiteallika ehitasin. Internetis on palju toiteallika teisendamise videoid. Ülaltoodud pildil on esile tõstetud vähesed selle projekti funktsioonid. Nüüd enne ehitamist
Pinge mõõtmine Arduino abil: 5 sammu
Pinge mõõtmine Arduino abil: Pinge mõõtmine on mis tahes mikrokontrolleri abil üsna lihtne, võrreldes voolu mõõtmisega. Pingete mõõtmine on vajalik, kui töötate patareidega või soovite ise reguleeritavat toiteallikat teha. Kuigi see meetod sobib
Alalisvoolu pinge mõõtmine Arduino ja Node-RED abil: 8 sammu (piltidega)
Alalispinge mõõtmine Arduino ja Node-RED abil: Arduinoga on palju alalispinge mõõtmise õpetusi, sel juhul leidsin õpetuse, mida pean parimaks funktsionaalseks meetodiks alalisvoolu mõõtmiseks ilma takistuse sisendväärtusi nõudmata, nõuab ainult teatud takistust ja multimeeter