Obsah:

Meranie frekvencie a napätia napájania pomocou Arduina: 6 krokov
Meranie frekvencie a napätia napájania pomocou Arduina: 6 krokov
Anonim
Meranie frekvencie a napätia napájania pomocou Arduina
Meranie frekvencie a napätia napájania pomocou Arduina

Úvod:

Cieľom tohto projektu je zmerať napájaciu frekvenciu a napätie, ktoré je tu v Indii medzi 220 až 240 voltov a 50 Hz. Na zachytenie signálu a výpočet frekvencie a napätia som použil Arduino, môžete použiť akýkoľvek iný mikrokontrolér alebo dosku, ktorú máte. Obvod vyžaduje niekoľko súčiastok a je celkom presný na všetky praktické účely.

Krok 1: Potrebné súčasti

  • Arduino Uno
  • IC LM358
  • Zostupný transformátor (220 V na 12 V)
  • Kondenzátory:

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

    • 3 x 1 kOhm
    • 2 x 100 kOhm
    • 1,5 kOhm
    • 3,3 kOhm
    • 6,8 kOhm
  • 3 x 1N4148 dióda
  • Doska na chlieb a prepojovací drôt (voliteľné)

Krok 2: Schematický diagram

Schematický diagram
Schematický diagram
Schematický diagram
Schematický diagram

Vo vyššie uvedenom obvode je transformátor primárny zapojený do napájacej siete a primárny je zapojený do nášho meracieho obvodu

Krok 3: Pochopenie obvodu

Pochopenie obvodu
Pochopenie obvodu
Pochopenie obvodu
Pochopenie obvodu
Pochopenie obvodu
Pochopenie obvodu

Podľa funkčnosti je tento obvod možné rozdeliť na štyri časti:

A: Obvod detektora prechodu na nulu

Tento obvod generuje 5V štvorcový impulz vždy, keď sínusová vlna prechádza z kladného na záporný. Rezistor R1 kombinovaný s D1 a D2 obmedzuje kolísanie vstupného napätia na križovatke diódy na -0,6 V až +5,6 V (za predpokladu, že napätie vpred diódy je 0,6 V). Ďalej môžete zvýšiť rozsah vstupného napätia obvodu zvýšením hodnoty R1.

Odpor R2 a R3 tvorí delič napätia na obmedzenie výkyvu záporného napätia na -0,24 V, pretože vstupné napätie v spoločnom režime LM358 je obmedzené na -0,3 V.

Odpor R4, R5, kondenzátor C1 a operačný zosilňovač (tu používaný ako komparátor) tvorí obvod Schmitt Trigger, kde odpor R4 a R5 nastavuje hysteréziu na vstupe +49,5 mV nad zemou. Výstup spúšťača Schmitt je privedený na Arduino PIN2 na ďalšie spracovanie.

B: Izolácia a zníženie napätia

Ako naznačuje názov, táto časť izoluje a znižuje napätie na približne 12Vrms. Znížené napätie je ďalej privádzané do obvodu prístrojov.

C: Obvod detektora špičiek

Tento obvod určuje maximálne špičkové napätie vstupného signálu. Odporový delič R6 a R7 znižuje vstupné napätie faktorom 0,23 (12Vrms sa zníži na 2,76Vrms). Dióda D3 vedie iba kladný polovičný cyklus signálu. Napätie na C2 sa zvyšuje až na maximálnu hodnotu usmerneného signálu, ktorý je privádzaný na analógový kolík A0 Arduino na ďalší výpočet napätia.

Okrem toho môžete tento obvod nahradiť presným obvodom detektora špičiek, ako sú uvedené tu. Ale na moje demonštračné účely bude vyššie uvedený obvod dostačujúci.

D: Arduino

V tejto časti Arduino zachytáva štvorcové impulzy generované obvodom Schmitt Trigger a číta analógové napätie z obvodu detektora špičiek. Dáta sú ďalej spracované na určenie časového obdobia (teda frekvencie) štvorcového impulzu (ktorý sa rovná osobe striedavého prúdu) a napätia napájania.

Krok 4: Výpočet frekvencie a napätia

Výpočet frekvencie:

Pomocou Arduina dokážeme zmerať časové obdobie T signálu. Impulzy štvorcovej vlny z detektora prechodu nulou sú vedené na kolík 2, odtiaľ môžeme merať časové obdobie každého impulzu. Na výpočet časového obdobia medzi dvoma stúpajúcimi hranami štvorcového impulzu pomocou prerušení môžeme použiť interný časovač Arduina (konkrétne Timer1). Časovač sa zvyšuje o 1 na hodinový cyklus (bez prescaleru = 1) a hodnota je uložená v registri TCNT1. Hodiny 16 MHz preto zvyšujú počítadlo o 16 každých mikrosekúnd. Podobne pre prescaler = 8 sa časovač zvýši o 2 mikrosekundy o 2. Preto je časové obdobie medzi dvoma stúpajúcimi hranami

T = (hodnota TCNT1) / čas potrebný na každé počítanie

Kde, čas potrebný na každé počítanie = prescaler / (rýchlosť hodín Arduino (16 MHz)

Frekvencia f = 1 / T = (taktovacia frekvencia Arduino (16 MHz) / (hodnota prescaleru * TCNT!)

Preto je rýchlosť časovača (Hz) daná = (rýchlosť hodín Arduino (16 MHz)) / predzvárač

a frekvencia signálu je daná = (rýchlosť hodín Arduina

Zodpovedajúcim spôsobom môžeme vypočítať frekvenciu f zo vzťahu f = 1/T.

Výpočet napätia:

Palubný ADC Arduina má rozlíšenie 10 bitov (možné hodnoty = 2^10 = 1024), pričom vracia hodnoty v rozsahu 0-1023. Na výpočet zodpovedajúceho analógového napätia V musíme použiť nasledujúci vzťah

V = (čítanie ADC) * 5/1023

Na výpočet napájacieho napätia Vs (rms) musíme vziať do úvahy pomer transformátora, delič rezistora R6R7 a obvod detektora špičiek. Jednoducho môžeme dať dohromady rôzne faktory/pomer ako:

Pomer transformátora = 12/230 = 0,052

Rezistorový delič = R7/(R6 + R7) = 0,23

Pri obvode detektora špičiek = 1,414

Vs (rms) = V/(1,414*0,052*0,23) = (čítanie ADC)*0,289

Je potrebné poznamenať, že táto hodnota je ďaleko od skutočnej hodnoty, hlavne kvôli chybe v skutočnom pomere transformátora a poklesu napätia diódy vpred. Jedným zo spôsobov, ako to obísť, je určiť faktor po zostavení obvodu. To sa meria napájacie napätie a napätie na kondenzátore C2 oddelene multimetrom a potom sa vypočíta Vs (rms) nasledovne:

Vs (rms) = ((napájacie napätie *5)/(napätie na C2 *1023)) *(čítanie ADC)

v mojom prípade Vs (rms) = 0,33*(čítanie ADC)

Krok 5: Arduino kód

#define volt_in A0 // pin na čítanie analógového napätia

volatile uint16_t t_period; uint16_t ADC_value = 0; float volt, freq; neplatné isr () {t_period = TCNT1; // uloženie hodnoty TCNT1 v t_období TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // čítanie analógového napätia} float get_freq () {uint16_t timer = t_period; ak (časovač == 0) vráti 0; // aby sa zabránilo deleniu nulou, vráťte 16000000.0/(8UL*časovač); // frekvencia je daná f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // nastavenie predzosilňovača na 8 TCNT1 = 0; // vynulovanie hodnoty Timer1 TIMSK1 = bit (TOIE1); // povolenie prerušenia pretečenia Timer1 EIFR | = bit (INTF0); // vymazanie príznaku prerušenia INT0 Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // povoliť oneskorenie externého prerušenia (INT0) (1000); detachInterrupt (0); freq = get_freq (); volt = ADC_value*0,33; String bufet; buf += Reťazec (frekv., 3); buf += F ("Hz / t"); buf += Reťazec (volt); buf += F („Volty“); Serial.println (buf); }

Krok 6: Záver

Záver
Záver
Záver
Záver

Obvod môžete zostaviť na doske, vyladiť kód a pridať kartu SD na ukladanie údajov, ktoré je možné neskôr analyzovať. Jedným z takýchto príkladov je, že môžete analyzovať napätie a frekvenciu v špičkách.

Okruh, ktorý som zostavil na doske, používal LM324 (quad operačný zosilňovač) namiesto LM358 (duálny operačný zosilňovač), pretože som v tom momente nemal tento integrovaný obvod a celonárodné zablokovanie kvôli pandémii COVID-19 mi sťažilo získanie nového integrovaného obvodu.. Nemalo by to však ovplyvniť fungovanie obvodu.

Akékoľvek návrhy a otázky môžete komentovať nižšie.

Odporúča: