Obsah:

Měření frekvence a napětí napájecího zdroje pomocí Arduina: 6 kroků
Měření frekvence a napětí napájecího zdroje pomocí Arduina: 6 kroků

Video: Měření frekvence a napětí napájecího zdroje pomocí Arduina: 6 kroků

Video: Měření frekvence a napětí napájecího zdroje pomocí Arduina: 6 kroků
Video: Arduino: Základy 01 | Seznámení s Arduinem [sub] 2024, Prosinec
Anonim
Měření frekvence a napětí napájecího zdroje pomocí Arduina
Měření frekvence a napětí napájecího zdroje pomocí Arduina

Úvod:

Cílem tohoto projektu je změřit napájecí frekvenci a napětí, které je zde v Indii mezi 220 až 240 volty a 50 Hz. Pro zachycení signálu a výpočet frekvence a napětí jsem použil Arduino, můžete použít jakýkoli jiný mikrokontrolér nebo desku, kterou máte. Obvod vyžaduje hrst součástek a je poměrně přesný pro všechny praktické účely.

Krok 1: Požadované součásti

  • Arduino Uno
  • IC LM358
  • Snižte transformátor (220 V na 12V)
  • 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 dioda
  • Chlebová deska a propojovací drát (volitelně)

Krok 2: Schematický diagram

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

Ve výše uvedeném obvodu je primární transformátor připojen k napájecí síti a primární je připojen k našemu měřicímu obvodu

Krok 3: Pochopení obvodu

Pochopení obvodu
Pochopení obvodu
Pochopení obvodu
Pochopení obvodu
Pochopení obvodu
Pochopení obvodu

Podle funkce lze tento obvod rozdělit na čtyři části:

A: Obvod detektoru křížení nuly

Tento obvod generuje 5V čtvercový impuls, kdykoli sinusová vlna přechází z kladného na záporný. Rezistor R1 kombinovaný s D1 a D2 omezuje kolísání vstupního napětí na přechodu diody na -0,6 V až +5,6 V (za předpokladu, že dopředné napětí diody bude 0,6 V). Kromě toho můžete zvýšit rozsah vstupního napětí obvodu zvýšením hodnoty R1.

Rezistor R2 a R3 tvoří dělič napětí, který omezuje kolísání záporného napětí na -0,24Volty, protože vstupní napětí společného režimu LM358 je omezeno na -0,3Voltů.

Rezistor R4, R5, kondenzátor C1 a operační zesilovač (zde používaný jako komparátor) tvoří obvod Schmitt Trigger, kde odpor R4 a R5 nastavuje hysterezi na vstupu +49,5 mV nad zemí. Výstup spouště Schmitt je přiveden na Arduino PIN2 pro další zpracování.

B: Izolace a snížení napětí

Jak název napovídá, tato část izoluje a snižuje napětí na přibližně 12Vrms. Snížené napětí je dále přiváděno do obvodu přístrojového vybavení.

C: Obvod detektoru špiček

Tento obvod určuje maximální špičkové napětí vstupního signálu. Odporový dělič R6 a R7 snižuje vstupní napětí faktorem 0,23 (12Vrms se sníží na 2,76Vrms). Dioda D3 vede pouze kladný poloviční cyklus signálu. Napětí na C2 se zvyšuje až na špičkovou hodnotu usměrněného signálu, který je přiveden na analogový pin A0 Arduino pro další výpočet napětí.

Kromě toho můžete tento obvod nahradit obvodem přesného detektoru špiček, jako jsou zde uvedené. Ale pro mé demonstrační účely bude výše uvedený obvod dostačující.

D: Arduino

V této části Arduino zachycuje čtvercové impulsy generované obvodem Schmitt Trigger a čte analogové napětí z obvodu detektoru špiček. Data jsou dále zpracovávána za účelem určení časové periody (potažmo frekvence) čtvercového impulzu (která se rovná době střídavého napájení) a napětí zdroje.

Krok 4: Výpočet frekvence a napětí

Výpočet frekvence:

Pomocí Arduina můžeme změřit časové období T signálu. Impulzy čtvercové vlny z detektoru křížení nuly jsou přiváděny na pin 2, odtud můžeme měřit časové období každého impulsu. Pomocí interního časovače Arduino (konkrétně Timer1) můžeme pomocí přerušení vypočítat časové období mezi dvěma stoupajícími hranami čtvercového impulzu. Časovač se zvýší o 1 na hodinový cyklus (bez prescaleru = 1) a hodnota se uloží do registru TCNT1. Proto 16Mhz hodiny zvyšují čítač o 16 každou mikrosekundu. Podobně pro prescaler = 8 se časovač zvýší o 2 každou mikrosekundu. Proto časové období mezi dvěma stoupajícími okraji

T = (hodnota TCNT1) / čas potřebný pro každé počítání

Kde, čas potřebný pro každé počítání = prescaler / (taktovací frekvence Arduino (16MHz)

Frekvence f = 1 / T = (taktovací frekvence Arduino (16 MHz) / (hodnota Prescaler * TCNT!)

Rychlost časovače (Hz) je tedy dána = (taktovací frekvence Arduina (16 MHz)) / předzesilovač

a frekvence signálu je dána = (rychlost hodin Arduina

Odpovídajícím způsobem můžeme vypočítat frekvenci f ze vztahu f = 1/T.

Výpočet napětí:

Integrovaný ADC Arduina má rozlišení 10 bitů (možné hodnoty = 2^10 = 1024), vrací hodnoty v rozsahu 0-1023. Pro výpočet odpovídajícího analogového napětí V musíme použít následující vztah

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

Pro výpočet napájecího napětí Vs (rms) musíme vzít v úvahu poměr transformátoru, dělič odporu R6R7 a obvod detektoru špiček. Můžeme jednoduše dát dohromady různé faktory/poměr jako:

Poměr transformátoru = 12/230 = 0,052

Odporový dělič = R7/(R6 + R7) = 0,23

Na obvodu detektoru špiček = 1,414

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

Je třeba poznamenat, že tato hodnota je daleko od skutečné hodnoty, hlavně kvůli chybě ve skutečném poměru transformátoru a poklesu dopředného napětí diody. Jedním ze způsobů, jak to obejít, je určit faktor po sestavení obvodu. To je měřením napájecího napětí a napětí na kondenzátoru C2 samostatně multimetrem a následným výpočtem Vs (rms) takto:

Vs (rms) = ((napájecí napětí *5)/(napětí na C2 *1023)) *(čtení ADC)

v mém případě Vs (rms) = 0,33*(čtení ADC)

Krok 5: Arduino kód

#define volt_in A0 // pin pro čtení analogového napětí

volatile uint16_t t_period; uint16_t ADC_value = 0; float volt, freq; void isr () {t_period = TCNT1; // uložení hodnoty TCNT1 do t_období TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // číst analogové napětí} float get_freq () {uint16_t timer = t_period; if (timer == 0) return 0; // aby se zabránilo dělení nulou else return 16000000.0/(8UL*timer); // frekvence je dána f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // nastavit prescaler na 8 TCNT1 = 0; // reset hodnoty Timer1 TIMSK1 = bit (TOIE1); // povolit přerušení přetečení Timer1 EIFR | = bit (INTF0); // vymazat příznak přerušení INT0 Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // povolit zpoždění externího přerušení (INT0) (1000); detachInterrupt (0); freq = get_freq (); volt = ADC_value*0,33; String buf; buf += String (freq, 3); buf += F ("Hz / t"); buf += String (volt); buf += F („Volty“); Serial.println (buf); }

Krok 6: Závěr

Závěr
Závěr
Závěr
Závěr

Obvod můžete sestavit na prkénko a vyladit kód a přidat SD kartu pro uložení dat, která lze později analyzovat. Jedním z takových příkladů je, že můžete analyzovat napětí a frekvenci ve špičce.

Obvod, který jsem sestavil na prkénku, používal LM324 (čtyřnásobný operační zesilovač) namísto LM358 (duální operační zesilovač), protože jsem v tu chvíli neměl tento IC a celonárodní zablokování kvůli pandemii COVID-19 mi ztěžovalo získání nového integrovaného obvodu. Nemělo by to však ovlivnit fungování obvodu.

Neváhejte komentovat níže jakékoli návrhy a dotazy.

Doporučuje: