Tartalomjegyzék:

Tápegység frekvencia és feszültség mérése Arduino használatával: 6 lépés
Tápegység frekvencia és feszültség mérése Arduino használatával: 6 lépés

Videó: Tápegység frekvencia és feszültség mérése Arduino használatával: 6 lépés

Videó: Tápegység frekvencia és feszültség mérése Arduino használatával: 6 lépés
Videó: Indukció: Így is lehet fűteni? Radiátor cső izzana vízkeringetés nélkül. Tudod mennyire gazdaságos? 2024, Július
Anonim
Tápegység frekvencia és feszültség mérése Arduino használatával
Tápegység frekvencia és feszültség mérése Arduino használatával

Bevezetés:

Ennek a projektnek a célja a tápfrekvencia és feszültség mérése, ami itt, Indiában 220-240 V és 50 Hz között van. Arduino -t használtam a jel rögzítésére, valamint a frekvencia és a feszültség kiszámítására, bármely más mikrokontrollert vagy kártyát használhat. Az áramkör maroknyi alkatrészt igényel, és minden gyakorlati célból meglehetősen pontos.

1. lépés: Szükséges összetevők

  • Arduino Uno
  • IC LM358
  • Lépjen le a transzformátorról (220V - 12V)
  • Kondenzátorok:

    • 0,1uF
    • 2 x 1uF
  • Ellenállások:

    • 3 x 1 kOhm
    • 2 x 100 kOhm
    • 1,5 kOhm
    • 3.3 kOhm
    • 6,8 kOhm
  • 3 x 1N4148 dióda
  • Kenyértábla és jumper huzal (opcionális)

2. lépés: Vázlatos diagram

Sematikus ábrája
Sematikus ábrája
Sematikus ábrája
Sematikus ábrája

A fenti áramkörben a transzformátor primer csatlakozik a tápegységhez, a primer pedig a mérőkörünkhöz

3. lépés: Az áramkör megértése

Az áramkör megértése
Az áramkör megértése
Az áramkör megértése
Az áramkör megértése
Az áramkör megértése
Az áramkör megértése

A funkcionalitás szerint ez az áramkör négy részre osztható:

V: A Zero Crossing Detector áramkör

Ez az áramkör 5 V -os négyzetimpulzust generál, amikor a szinuszhullám pozitívból negatívba megy. Az R1 ellenállás a D1 és D2 -vel kombinálva korlátozza a bemeneti feszültség lengését a dióda csomópontjában -0,6V és +5,6V között (feltételezve, hogy a dióda előremenő feszültsége 0,6V). Továbbá növelheti az áramkör bemeneti feszültségtartományát az R1 érték növelésével.

Az R2 és R3 ellenállás feszültségosztót képez, hogy a negatív feszültségingadozást -0,24 Voltra korlátozza, mivel az LM358 bemeneti közös módú feszültsége -0,3 V -ra korlátozódik.

Az R4, R5 ellenállás, a C1 kondenzátor és az op-amp (itt összehasonlításként használják) képezi a Schmitt Trigger áramkört, ahol az R4 és R5 ellenállás a hiszterézist a föld feletti +49,5 mV bemenetre állítja. A Schmitt Trigger kimenete az Arduino PIN2 -hez kerül továbbfeldolgozásra.

B: Szigetelés és feszültség csökkentése

Ahogy a neve is sugallja, ez a rész elkülöníti és lecsökkenti a feszültséget körülbelül 12Vrms -re. A csökkentett feszültséget a műszer áramkörbe továbbítják.

C: Csúcsérzékelő áramkör

Ez az áramkör határozza meg a bemeneti jel maximális csúcsfeszültségét. Az R6 és R7 ellenállásosztó 0,23 -szorosára csökkenti a bemeneti feszültséget (12Vrms 2,76Vrms -ra csökken). A D3 dióda csak a jel pozitív félciklusát vezeti le. A C2 feszültsége a rektifikált jel csúcsértékéig növekszik, amelyet az Arduino analóg A0 tűje táplál, hogy tovább kiszámítsa a feszültséget.

Ezenkívül ezt az áramkört az itt említettekhez hasonló pontosságú csúcsérzékelő áramkörre cserélheti. De demonstrációs célomból a fenti áramkör elegendő lesz.

D: Arduino

Ebben a részben az Arduino rögzíti a Schmitt Trigger áramkör által generált négyzetes impulzusokat, és leolvassa az analóg feszültséget a csúcsérzékelő áramkörből. Az adatokat tovább dolgozzuk fel, hogy meghatározzuk a négyzetimpulzus időtartamát (tehát frekvenciáját) (amely megegyezik az AC tápellátási idő személyével) és a tápfeszültséget.

4. lépés: A frekvencia és a feszültség kiszámítása

A gyakoriság kiszámítása:

Az Arduino segítségével meg tudjuk mérni a jel T időtartamát. A nulla-keresztező detektor négyzethullámú impulzusai a 2. tüskére kerülnek, onnan tudjuk mérni az egyes impulzusok időtartamát. Az Arduino belső időzítőjével (különösen a Timer1 -el) kiszámíthatjuk a négyzetimpulzus két emelkedő éle közötti időtartamot megszakítások segítségével. Az időzítő óránkénti ciklusonként 1 -gyel növekszik (előskálázó nélkül = 1), és az értéket a TCNT1 regiszter tárolja. Ezért a 16 MHz -es óra minden mikroszekundumban 16 -tal növeli a számlálót. Hasonlóképpen az előskálázó = 8 esetén az időzítőt 2 mikroszekundumonként 2 -gyel növeljük. Ezért a két emelkedő él közötti időszak

T = (TCNT1 érték) / minden számláláshoz szükséges idő

Hol, minden számláláshoz szükséges idő = előskálázó / (Arduino órajel (16 MHz)

Ezért a frekvencia f = 1 / T = (Arduino órajel (16 MHz) / (Előbeosztó * TCNT! Érték)

Ezért az időzítő sebességét (Hz) a = (Arduino órajele (16 MHz)) / prescaler adja meg

és a jel frekvenciáját a = (Arduino órajele adja meg

Ennek megfelelően az f = 1/T összefüggésből kiszámíthatjuk az f frekvenciát.

Feszültség számítása:

Az Arduino fedélzeti ADC felbontása 10 bit (lehetséges értékek = 2^10 = 1024), és 0-1023 közötti értékeket ad vissza. A megfelelő analóg V feszültség kiszámításához a következő összefüggést kell használnunk

V = (ADC -leolvasás) * 5/1023

A Vs (rms) tápfeszültség kiszámításához figyelembe kell vennünk a transzformátor arányt, az R6R7 ellenállásosztót és a csúcsérzékelő áramkört. Egyszerűen összerakhatjuk a különböző tényezőket/arányokat:

Transzformátor arány = 12/230 = 0,052

Ellenállásosztó = R7/(R6 + R7) = 0,23

Csúcsérzékelő áramkörnél = 1,414

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

Meg kell jegyezni, hogy ez az érték messze van a tényleges értéktől, főként a tényleges transzformátor arány hibája és a dióda előremenő feszültségesése miatt. Ennek kijátszásának egyik módja az áramkör összeszerelése után a tényező meghatározása. Vagyis úgy, hogy multiméterrel külön mérik a tápfeszültséget és a C2 kondenzátor feszültségét, majd kiszámítják a Vs (rms) értékeket az alábbiak szerint:

Vs (rms) = ((tápfeszültség *5)/(feszültség a C2 *1023)) *(ADC -leolvasás)

az én esetemben Vs (rms) = 0,33*(ADC Reading)

5. lépés: Arduino kód

#define volt_in A0 // analóg feszültség olvasócsap

illékony uint16_t t_period; uint16_t ADC_value = 0; úszó volt, frekvencia; void isr () {t_period = TCNT1; // TCNT1 érték tárolása t_periodban TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // analóg feszültség olvasása} float get_freq () {uint16_t timer = t_period; if (timer == 0) return 0; // a nullával való osztás elkerülése érdekében 16000000.0/(8UL*időzítő); // a gyakoriságot az f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // állítsa az előskálázót 8 -ra TCNT1 = 0; // reset Timer1 value TIMSK1 = bit (TOIE1); // Timer1 overflow interrupt engedélyezése EIFR | = bit (INTF0); // törölje az INT0 megszakítás jelzőjét Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // külső megszakítás engedélyezése (INT0) késleltetés (1000); detachInterrupt (0); freq = get_freq (); volt = ADC_érték*0,33; String buf; buf += Karakterlánc (gyakori, 3); buf += F ("Hz / t"); buf += Karakterlánc (volt); buf += F ("Volt"); Soros.println (buf); }

6. lépés: Következtetés

Következtetés
Következtetés
Következtetés
Következtetés

Összeállíthatja az áramkört egy kenyértáblán, és módosíthatja a kódot, és hozzáadhat egy SD -kártyát az adatok tárolásához, amelyeket később elemezhet. Ilyen például a feszültség és a frekvencia elemzése csúcsidőben.

A kenyértáblán összeállított áramkör LM324 (quad opamp) -ot használt az LM358 (kettős opamp) helyett, mivel abban a pillanatban nem rendelkeztem ezzel az IC-vel, és a COVID-19 világjárvány miatti országos lezárás megnehezítette az új IC beszerzését. Ennek ellenére ez nem befolyásolja az áramkör működését.

Nyugodtan tegyen megjegyzést az alábbi javaslatokhoz és kérdésekhez.

Ajánlott: