INHOUDSOPGAWE:
- Stap 1: Vereiste komponente
- Stap 2: Skematiese diagram
- Stap 3: Begrip van die kring
- Stap 4: Berekening van frekwensie en spanning
- Stap 5: Arduino -kode
- Stap 6: Gevolgtrekking
Video: Meting van frekwensie- en spanningsvoorsiening deur Arduino: 6 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:24
Inleiding:
Die doel van hierdie projek is om die voedingsfrekwensie en -spanning te meet, wat tussen 220 en 240 volt en 50 Hz hier in Indië is. Ek het 'n Arduino gebruik om seine vas te lê en frekwensie en spanning te bereken, u kan enige ander mikrobeheerder of -bord gebruik. Die kring benodig 'n handjievol komponente en is redelik akkuraat vir alle praktiese doeleindes.
Stap 1: Vereiste komponente
- Arduino Uno
- IC LM358
- Trap -transformator (220V tot 12V)
-
Kapasitors:
- 0.1 uF
- 2 x 1 uF
-
Weerstande:
- 3 x 1 kOhm
- 2 x 100 kOhm
- 1.5kOhm
- 3.3kOhm
- 6,8 kOhm
- 3 x 1N4148 diode
- Broodbord en jumperdraad (opsioneel)
Stap 2: Skematiese diagram
In die bogenoemde stroombaan is die transformator primêr gekoppel aan die hoofleiding en die primêre is gekoppel aan ons meetbaan
Stap 3: Begrip van die kring
Volgens die funksionaliteit kan hierdie stroombaan in vier dele verdeel word:
A: Die kringloop van nulkruising
Hierdie stroombaan genereer 'n 5V vierkante puls wanneer die sinusgolf van positief na negatief gaan. Weerstand R1 gekombineer met D1 en D2 beperk die insetspanning swaai by die diode aansluiting tot -0,6V tot +5,6V (veronderstel dat die diode se voorwaartse spanning 0,6V is). Verder kan u die ingangsspanningsreeks van die stroombaan verhoog deur die waarde van R1 te verhoog.
Die weerstand R2 en R3 vorm 'n spanningsverdeler om die swaai van die negatiewe spanning tot -0,24Volts te beperk, aangesien die ingangsmodus -spanning van LM358 beperk is tot -0,3Volts.
Die weerstand R4, R5, kapasitor C1 en die op-amp (hier gebruik as 'n vergelyker) vorm die Schmitt Trigger-stroombaan waar die weerstand R4 en R5 die histerese op insette +49,5mV bo die grond stel. Die uitset van die Schmitt Trigger word na die Arduino PIN2 gevoer vir verdere verwerking.
B: Isolasie en spanning verlaag
Soos die naam aandui, isoleer en verlaag hierdie deel die spanning tot ongeveer 12Vrms. Die verlaagde spanning word verder na die instrumentasiekring gelei.
C: Peak Detector kring
Hierdie stroombaan bepaal die maksimum piek spanning van die insetsein. Weerstandsverdeler R6 en R7 verminder die insetspanning met 'n faktor van 0,23 (12Vrms word verminder tot 2,76Vrms). Die diode D3 voer slegs die positiewe halfsiklus van die sein uit. Die spanning oor C2 styg tot by die piekwaarde van die gelykgemaakte sein, wat na die analoge pen A0 van Arduino gevoer word om die spanning verder te bereken.
Boonop kan u hierdie stroombaan vervang deur 'n presiese piekdetektorkring soos hier genoem. Maar vir my demonstrasiedoeleindes is die bogenoemde kring voldoende.
D: Arduino
In hierdie deel vang die Arduino die vierkantpulse wat deur die Schmitt Trigger -stroombaan gegenereer word en lees die analoog spanning van die piekdetektorkring. Die data word verder verwerk om die tydsperiode (vandaar frekwensie) van die vierkantpuls (wat gelyk is aan die wisselstroompersoon) en die spanning van die toevoer te bepaal.
Stap 4: Berekening van frekwensie en spanning
Berekening van frekwensie:
Met die hulp van Arduino kan ons die tydperk T van die sein meet. Die vierkantgolfpulse van die nul-kruising detektor word na pen 2 gevoer, van daar af kan ons die tydsperiode van elke pols meet. Ons kan die interne timer van Arduino (spesifiek Timer1) gebruik om die tydsperiode tussen twee stygende rande van die vierkantpuls te bereken met behulp van onderbrekings. Die timer styg met 1 per kloksiklus (sonder prescaler = 1) en die waarde word in register TCNT1 gestoor. Daarom verhoog die 16Mhz -klok die teller met 16 elke mikrosekonde. Net so vir prescaler = 8 word die timer met elke mikrosekonde toegeneem. Vandaar die tydperk tussen twee stygende rand
T = (TCNT1 -waarde) / tydsduur vir elke telling
Waar, tyd geneem vir elke telling = voorskaler / (Arduino kloksnelheid (16MHz)
Daarom is frekwensie f = 1 / T = (Arduino -kloksnelheid (16MHz) / (Prescaler * TCNT! -Waarde)
Daarom word die tydsnelheid (Hz) gegee deur = (Arduino -kloksnelheid (16MHz)) / prescaler
en die frekwensie van die sein word gegee deur = (Arduino kloksnelheid
Dienooreenkomstig kan ons die frekwensie f uit die verhouding f = 1/T bereken.
Berekening van spanning:
Die ingeboude ADC van Arduino het 'n resolusie van 10 bisse (moontlike waardes = 2^10 = 1024), wat waardes in die reeks 0-1023 teruggee. Om die ooreenstemmende analoog spanning V te bereken, moet ons die volgende verband gebruik
V = (ADC -lees) * 5/1023
Om die voedingspanning Vs (rms) te bereken, moet ons die transformatorverhouding, weerstandsverdeler R6R7 en die piekdetektorkring in ag neem. Ons kan die verskillende faktore/verhouding eenvoudig saamstel as:
Transformatorverhouding = 12/230 = 0,052
Weerstandsverdeler = R7/(R6 + R7) = 0,23
By piek detektorkring = 1.414
Vs (rms) = V/(1.414*0.052*0.23) = (ADC -lees)*0.289
Daar moet op gelet word dat hierdie waarde ver van die werklike waarde is, hoofsaaklik as gevolg van foute in die werklike transformatorverhouding en die diode -voorwaartse spanningsval. Een manier om dit te omseil, is om die faktor te bepaal nadat die stroombaan saamgestel is. Dit is deur die toevoerspanning en die spanning oor die kapasitor C2 afsonderlik met 'n multimeter te meet en dan Vs (rms) soos volg te bereken:
Vs (rms) = ((Voedingsspanning *5)/(Spanning oor C2 *1023)) *(ADC -lesing)
in my geval is Vs (rms) = 0,33*(ADC -lees)
Stap 5: Arduino -kode
#definieer volt_in A0 // analoogspanning leespen
vlugtige uint16_t t_periode; uint16_t ADC_waarde = 0; float volt, frekwensie; leegte isr () {t_periode = TCNT1; // stoor TCNT1 -waarde in t_periode TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // lees analoog spanning} float get_freq () {uint16_t timer = t_periode; as (timer == 0) terugkeer 0; // om die verdeling deur nul te vermy, gee 16000000.0/(8UL*timer) terug; // frekwensie word gegee deur f = clk_freq/(prescaler*timeperiod)} leemte -opstelling () {TCCR1A = 0; TCCR1B = bietjie (CS11); // stel prescaler op 8 TCNT1 = 0; // reset Timer1 waarde TIMSK1 = bit (TOIE1); // aktiveer Timer1 oorloop onderbreek EIFR | = bit (INTF0); // duidelik INT0 onderbreek vlag Serial.begin (9600); } leemte -lus () {attachInterrupt (0, isr, RISING); // eksterne vertraging (INT0) vertraging (1000) moontlik maak; losmaakonderbreking (0); freq = get_freq (); volt = ADC_waarde*0,33; String buf; buf += String (frekwensie, 3); buf += F ("Hz / t"); buf += String (volt); buf += F ("Volt"); Serial.println (buf); }
Stap 6: Gevolgtrekking
U kan die kring in 'n broodbord monteer en die kode aanpas en 'n SD -kaart byvoeg om die data op te slaan, wat later ontleed kan word. Een voorbeeld is dat u die spanning en frekwensie tydens spitstye kan ontleed.
Die kring wat ek in die broodbord bymekaargemaak het, gebruik LM324 (quad opamp) in plaas van LM358 (dual opamp), aangesien ek op daardie oomblik nie die IC gehad het nie en die landwye sluiting weens COVID-19-pandemie dit vir my moeilik gemaak het om 'n nuwe IC te kry. Dit sou egter nie die werking van die stroombaan beïnvloed nie.
Lewer gerus kommentaar hieronder vir enige voorstelle en navrae.
Aanbeveel:
Hoe om die frekwensie van die CPU in Windows 10 aan te pas: 5 stappe
Hoe om die CPU -frekwensie in Windows 10 aan te pas: dit wys hoe u die CPU -frekwensie kan aanpas, sowel as om die volle snelheid van u SVE op u Windows 10 -rekenaar te vertraag/te beperk of te ontsluit
Mens-rekenaar-koppelvlak: funksioneer as 'n gripper (gemaak deur Kirigami) deur polsbeweging met behulp van EMG: 7 stappe
Mens-rekenaar-koppelvlak: Function a Gripper (gemaak deur Kirigami) deur polsbeweging met behulp van EMG: Dit was dus my eerste poging met 'n mens-rekenaar-koppelvlak. Ek het die spieraktiveringsseine van my polsbeweging vasgelê met 'n EMG-sensor, dit verwerk deur luislang en arduino en het 'n origami -gebaseerde grijper aangestuur
Meting van versnelling met behulp van H3LIS331DL en Arduino Nano: 4 stappe
Meting van versnelling met behulp van H3LIS331DL en Arduino Nano: H3LIS331DL, is 'n lae-krag hoëprestasie 3-as lineêre versnellingsmeter wat tot die "nano" -familie behoort, met 'n digitale I²C-seriële koppelvlak. H3LIS331DL het 'n gebruiker -kiesbare volle weegskaal van ± 100g/± 200g/± 400g en kan versnellings meet met
Frekwensie meter met behulp van mikrobeheerder: 8 stappe
Frekwensie meter met behulp van mikrokontroleerder: Hierdie handleiding gee eenvoudig aan hoe om die frekwensie van 'n polsbron te bereken met behulp van 'n mikrobeheerder. Hoogspanningsvlak van die polsbron is 3.3 V en laag is 0V. 1K resi
Akkurate frekwensie van 1 Hz vanaf wisselstroomnet: 9 stappe
Akkurate frekwensie van 1 Hz vanaf wisselstroomnet: die frekwensie van die lyn is, afhangende van die land 50Hz of 60Hz. Hierdie frekwensie het op kort termyn klein skommelinge, maar word daagliks vergoed deur die kragstasie, wat lei tot 'n redelike akkurate frekwensiebron vir baie tydsberekeningstoepassings