Turinys:
- 1 žingsnis: reikalingi komponentai
- 2 žingsnis: schema
- 3 žingsnis: Supraskite grandinę
- 4 žingsnis: dažnio ir įtampos apskaičiavimas
- 5 žingsnis: „Arduino“kodas
- 6 žingsnis: Išvada
Video: Maitinimo dažnio ir įtampos matavimas naudojant „Arduino“: 6 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Įvadas:
Šio projekto tikslas yra išmatuoti tiekimo dažnį ir įtampą, kuri yra Indijoje nuo 220 iki 240 voltų ir 50 Hz. Aš naudoju „Arduino“signalui fiksuoti ir dažniui bei įtampai apskaičiuoti, galite naudoti bet kurį kitą turimą mikrovaldiklį ar plokštę. Grandinei reikalingi keli komponentai ir ji yra gana tiksli visiems praktiniams tikslams.
1 žingsnis: reikalingi komponentai
- Arduino Uno
- IC LM358
- Sumažinkite transformatorių (nuo 220V iki 12V)
-
Kondensatoriai:
- 0,1 uF
- 2 x 1 uF
-
Rezistoriai:
- 3 x 1 kOhm
- 2 x 100 kOhm
- 1,5 kOhm
- 3,3 kOhm
- 6,8 kOhm
- 3 x 1N4148 diodas
- Duonos lenta ir trumpiklis (pasirinktinai)
2 žingsnis: schema
Aukščiau esančioje grandinėje transformatoriaus pirminis yra prijungtas prie maitinimo tinklo, o pirminis - prie mūsų matavimo grandinės
3 žingsnis: Supraskite grandinę
Pagal funkcionalumą šią grandinę galima suskirstyti į keturias dalis:
A: Nulinio kirtimo detektoriaus grandinė
Ši grandinė generuoja 5 V kvadratinį impulsą, kai sinusinė banga pereina iš teigiamos į neigiamą. Rezistorius R1 kartu su D1 ir D2 riboja įėjimo įtampos svyravimus diodų sandūroje iki -0,6 V iki +5,6 V (darant prielaidą, kad diodo priekinė įtampa yra 0,6 V). Be to, galite padidinti grandinės įėjimo įtampos diapazoną, padidindami R1 vertę.
Rezistorius R2 ir R3 sudaro įtampos daliklį, kad neigiamas įtampos svyravimas būtų apribotas iki -0,24 volto, nes LM358 įėjimo bendrojo režimo įtampa yra apribota iki -0,3 voltų.
Rezistorius R4, R5, kondensatorius C1 ir op-amp (čia naudojamas kaip palyginimas) sudaro „Schmitt Trigger“grandinę, kurioje rezistorius R4 ir R5 nustato histerezę esant įėjimui +49,5 mV virš žemės. „Schmitt Trigger“išvestis tiekiama į „Arduino PIN2“tolimesniam apdorojimui.
B: Izoliacija ir įtampa sumažėja
Kaip rodo pavadinimas, ši dalis izoliuoja ir sumažina įtampą iki maždaug 12Vrms. Sumažinta įtampa toliau tiekiama į prietaisų grandinę.
C: Piko detektoriaus grandinė
Ši grandinė nustato didžiausią įėjimo signalo maksimalią įtampą. Rezistoriaus daliklis R6 ir R7 sumažina įėjimo įtampą 0,23 karto (12Vrms sumažėja iki 2,76Vrms). Diodas D3 atlieka tik teigiamą pusės signalo ciklą. C2 įtampa padidėja iki didžiausios ištaisyto signalo vertės, kuri tiekiama į „Arduino“analoginį kaištį A0, kad būtų galima toliau apskaičiuoti įtampą.
Be to, šią grandinę galite pakeisti tikslia piko detektoriaus grandine, kaip čia paminėta. Tačiau mano demonstravimo tikslais pakaks aukščiau pateiktos grandinės.
D: Arduino
Šioje dalyje „Arduino“fiksuoja kvadratinius impulsus, kuriuos sukuria „Schmitt Trigger“grandinė, ir skaito analoginę įtampą iš smailiaus detektoriaus grandinės. Duomenys toliau apdorojami, siekiant nustatyti kvadratinio impulso (kuris yra lygus kintamosios srovės tiekimo laiko asmeniui) laikotarpį ir (taigi, dažnį) ir maitinimo įtampą.
4 žingsnis: dažnio ir įtampos apskaičiavimas
Dažnio apskaičiavimas:
Arduino pagalba galime išmatuoti signalo T laikotarpį. Kvadratinių bangų impulsai iš nulio kirtimo detektoriaus tiekiami į 2 kaištį, iš ten galime išmatuoti kiekvieno impulso laikotarpį. Mes galime naudoti vidinį „Arduino“laikmatį (ypač „Timer1“), kad būtų galima apskaičiuoti laikotarpį tarp dviejų kylančių kvadratinio impulso kraštų, naudojant pertraukas. Laikmatis padidėja 1 per laikrodžio ciklą (be išankstinio skaliklio = 1) ir vertė išsaugoma TCNT1 registre. Taigi 16 MHz dažnis padidina skaitiklį 16 mikrosekundžių. Panašiai, kai prescaler = 8, laikmatis padidinamas 2 kas mikrosekundę. Taigi laikas tarp dviejų kylančių kraštų
T = (TCNT1 vertė) / laikas, reikalingas kiekvienam skaičiavimui
Kur, kiekvieno skaičiavimo laikas = prescaler / („Arduino“laikrodžio greitis (16 MHz)
Taigi dažnis f = 1 / T = („Arduino“laikrodžio greitis (16 MHz) / (prescaler * TCNT! Vertė)
Taigi laikmačio greitis (Hz) pateikiamas = („Arduino“laikrodžio greitis (16 MHz)) / prescaler
o signalo dažnis nurodomas = („Arduino“laikrodžio greitis
Atitinkamai dažnį f galime apskaičiuoti iš santykio f = 1/T.
Įtampos apskaičiavimas:
„Arduino“borto ADC skiriamoji geba yra 10 bitų (galimos vertės = 2^10 = 1024), o vertės grąžinamos nuo 0 iki 1023. Norėdami apskaičiuoti atitinkamą analoginę įtampą V, turime naudoti šį ryšį
V = (ADC skaitymas) * 5/1023
Norėdami apskaičiuoti maitinimo įtampą Vs (rms), turime atsižvelgti į transformatoriaus santykį, rezistoriaus daliklį R6R7 ir smailės detektoriaus grandinę. Mes galime tiesiog sudėti įvairius veiksnius/santykį taip:
Transformatoriaus santykis = 12/230 = 0,052
Rezistoriaus daliklis = R7/(R6 + R7) = 0,23
Piko detektoriaus grandinėje = 1.414
Vs (rms) = V/(1,414*0,052*0,23) = (ADC rodmuo)*0,289
Reikėtų pažymėti, kad ši vertė yra toli nuo faktinės vertės, daugiausia dėl faktinio transformatoriaus santykio klaidos ir diodo priekinės įtampos kritimo. Vienas iš būdų tai apeiti yra veiksnio nustatymas surinkus grandinę. Tai yra, matuojant maitinimo įtampą ir įtampą per kondensatorių C2 atskirai multimetru, tada apskaičiuojant Vs (rms) taip:
Vs (rms) = ((maitinimo įtampa *5)/(įtampa per C2 *1023)) *(ADC rodmuo)
mano atveju, Vs (rms) = 0,33*(ADC skaitymas)
5 žingsnis: „Arduino“kodas
#define volt_in A0 // analoginės įtampos skaitymo kaištis
nepastovus uint16_t t_period; uint16_t ADC_value = 0; plūdinis voltas, dažnis; void isr () {t_period = TCNT1; // saugoti TCNT1 reikšmę t_periode TCNT1 = 0; // iš naujo nustatyti laikmatį1 ADC_value = analogRead (volt_in); // skaityti analoginę įtampą} float get_freq () {uint16_t timer = t_period; if (laikmatis == 0) grąžina 0; // kad būtų išvengta padalijimo iš nulio, grąžinkite 16000000.0/(8UL*laikmatis); // dažnį nurodo f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bitas (CS11); // nustatyti prescaler į 8 TCNT1 = 0; // atstatyti Timer1 reikšmę TIMSK1 = bit (TOIE1); // įjungti Timer1 overflow interrupt EIFR | = bit (INTF0); // išvalyti INT0 pertraukimo vėliavą Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // įjungti išorinio pertraukimo (INT0) uždelsimą (1000); detachInterrupt (0); dažnumas = get_freq (); voltas = ADC_value*0,33; Styginių buf; buf += Styga (dažnis, 3); buf += F ("Hz / t"); buf += Styga (voltas); buf += F („voltai“); Serial.println (buf); }
6 žingsnis: Išvada
Galite surinkti grandinę į duonos lentą ir pataisyti kodą bei pridėti SD kortelę duomenims saugoti, kuriuos vėliau bus galima analizuoti. Vienas iš tokių pavyzdžių - galite analizuoti įtampą ir dažnį piko valandomis.
Grandinėje, kurią surinkau duonos lentoje, buvo naudojamas LM324 (keturių opampų), o ne LM358 (dvigubas opampas), nes tuo metu neturėjau to IC ir dėl užrakinimo visoje šalyje dėl COVID-19 pandemijos man buvo sunku gauti naują IC. Nepaisant to, tai neturės įtakos grandinės veikimui.
Nesivaržykite komentuoti žemiau dėl bet kokių pasiūlymų ir klausimų.
Rekomenduojamas:
Dc įtampos matavimas naudojant „Arduino“: 5 žingsniai
Nuolatinės srovės įtampos matavimas naudojant „Arduino“: Šiame projekte aš jums parodysiu, kaip išmatuoti nuolatinės srovės įtampą iki 50 V naudojant „arduino“ir ir rodyti OLED ekrano modulio dalyje reikia arduino UNOoled ekrano 10 k omų rezistoriaus 1 k omo rezistoriaus perjungimo kabelis
Reguliuojamas įtampos nuolatinės srovės maitinimas naudojant LM317 įtampos reguliatorių: 10 žingsnių
Reguliuojamos įtampos nuolatinės srovės maitinimas naudojant LM317 įtampos reguliatorių: Šiame projekte aš sukūriau paprastą reguliuojamos įtampos nuolatinės srovės maitinimo šaltinį, naudojant LM317 IC su LM317 maitinimo grandinės schema. Kadangi šioje grandinėje yra įmontuotas tilto lygintuvas, todėl prie įvesties galime tiesiogiai prijungti 220V/110V kintamosios srovės šaltinį
LP-2010 AES17 1998 Žemo dažnio (žemo dažnio) perjungimo stiprintuvo filtras: 4 žingsniai
LP-2010 AES17 1998 žemo dažnio (žemo dažnio) perjungimo stiprintuvo filtras: tai puikus D klasės stiprintuvas, žemo dažnio filtro matavimas. Puikus darbas, superiro našumas, lengvas prijungimas leidžia šį produktą lengvai naudoti ir labai verta turėti su aukštos kainos našumas
Įtampos matavimas naudojant „Arduino“: 5 žingsniai
Įtampos matavimas naudojant „Arduino“: Įtampos matavimas yra gana paprastas naudojant bet kurį mikrovaldiklį, palyginti su srovės matavimu. Įtampos matavimas yra būtinas, jei dirbate su baterijomis arba norite patys reguliuoti maitinimo šaltinį. Nors šis metodas taikomas
DC įtampos matavimas naudojant „Arduino“ir „Node-RED“: 8 žingsniai (su nuotraukomis)
Nuolatinės įtampos matavimas naudojant „Arduino“ir „Node-RED“: Yra daug pamokų, skirtų nuolatinei įtampai matuoti naudojant „Arduino“, šiuo atveju radau pamoką, kuri, mano manymu, yra geriausias funkcinis būdas išmatuoti nuolatinę srovę nereikalaujant įvesties pasipriešinimo verčių. ir multimetras