Satura rādītājs:

Barošanas avota frekvences un sprieguma mērīšana, izmantojot Arduino: 6 soļi
Barošanas avota frekvences un sprieguma mērīšana, izmantojot Arduino: 6 soļi

Video: Barošanas avota frekvences un sprieguma mērīšana, izmantojot Arduino: 6 soļi

Video: Barošanas avota frekvences un sprieguma mērīšana, izmantojot Arduino: 6 soļi
Video: PZEM-004T и ESP8266 ESP-01 Wi-Fi-монитор энергопотребления | ESP-01 Домашняя автоматизация 2024, Novembris
Anonim
Barošanas avota frekvences un sprieguma mērīšana, izmantojot Arduino
Barošanas avota frekvences un sprieguma mērīšana, izmantojot Arduino

Ievads:

Šī projekta mērķis ir izmērīt barošanas frekvenci un spriegumu, kas šeit, Indijā, ir no 220 līdz 240 voltiem un 50 Hz. Es izmantoju Arduino signāla uztveršanai un frekvences un sprieguma aprēķināšanai, jūs varat izmantot jebkuru citu mikrokontrolleri vai plati. Ķēdei ir nepieciešami daži komponenti, un tā ir diezgan precīza visiem praktiskiem mērķiem.

1. darbība. Nepieciešamās sastāvdaļas

  • Arduino Uno
  • IC LM358
  • Noņemiet transformatoru (no 220V līdz 12V)
  • Kondensatori:

    • 0.1uF
    • 2 x 1uF
  • Rezistori:

    • 3 x 1 kOhm
    • 2 x 100 kOhm
    • 1,5 kOhm
    • 3,3 kOhm
    • 6,8 kOhm
  • 3 x 1N4148 diode
  • Maizes dēlis un džemperis (pēc izvēles)

2. darbība: shematiskā diagramma

Shematiska diagramma
Shematiska diagramma
Shematiska diagramma
Shematiska diagramma

Iepriekš minētajā shēmā transformatora primārais ir pievienots barošanas tīklam, un primārais ir pievienots mūsu mērīšanas ķēdei

3. darbība. Izpratne par ķēdi

Izpratne par ķēdi
Izpratne par ķēdi
Izpratne par ķēdi
Izpratne par ķēdi
Izpratne par ķēdi
Izpratne par ķēdi

Saskaņā ar funkcionalitāti šo ķēdi var sadalīt četrās daļās:

A: nulles šķērsošanas detektora ķēde

Šī ķēde ģenerē 5 V kvadrātveida impulsu ikreiz, kad sinusa viļņi pāriet no pozitīva uz negatīvu. Rezistors R1 apvienojumā ar D1 un D2 ierobežo ieejas sprieguma svārstības diodes krustojumā līdz -0,6V līdz +5,6V (pieņemot, ka diodes priekšējais spriegums ir 0,6V). Turklāt jūs varat palielināt ķēdes ieejas sprieguma diapazonu, palielinot R1 vērtību.

Rezistors R2 un R3 veido sprieguma dalītāju, lai ierobežotu negatīvo sprieguma svārstību līdz -0,24 voltiem, jo LM358 ieejas kopējā režīma spriegums ir ierobežots līdz -0,3 voltiem.

Rezistors R4, R5, kondensators C1 un op-amp (šeit tiek izmantots kā salīdzinājums) veido Schmitt Trigger ķēdi, kur rezistors R4 un R5 nosaka histerēzi pie ieejas +49,5 mV virs zemes. Schmitt Trigger izeja tiek ievadīta Arduino PIN2 tālākai apstrādei.

B: Izolācija un sprieguma samazināšana

Kā norāda nosaukums, šī daļa izolē un samazina spriegumu līdz aptuveni 12 Vrms. Pazeminātais spriegums tiek tālāk ievadīts instrumentu ķēdē.

C: maksimuma detektora ķēde

Šī shēma nosaka maksimālo ieejas signāla maksimālo spriegumu. Rezistoru dalītājs R6 un R7 samazina ieejas spriegumu par koeficientu 0,23 (12Vrms tiek samazināts līdz 2,76Vrms). Diods D3 vada tikai pozitīvo signāla pusciklu. Spriegums C2 palielinās līdz rektificētā signāla maksimālajai vērtībai, kas tiek padota uz Arduino analogo tapu A0, lai tālāk aprēķinātu spriegumu.

Turklāt jūs varat aizstāt šo ķēdi ar precīzu pīķa detektora ķēdi, kā šeit minēts. Bet maniem demonstrācijas nolūkiem iepriekš minētā shēma būs pietiekama.

D: Arduino

Šajā daļā Arduino uztver Schmitt Trigger ķēdes ģenerētos kvadrātveida impulsus un nolasa analogo spriegumu no pīķa detektora ķēdes. Datus tālāk apstrādā, lai noteiktu kvadrātveida impulsa laika periodu (tātad frekvenci) (kas ir vienāds ar maiņstrāvas padeves laiku) un barošanas spriegumu.

4. solis: frekvences un sprieguma aprēķins

Biežuma aprēķins:

Ar Arduino palīdzību mēs varam izmērīt signāla laika periodu T. Kvadrātveida viļņu impulsi no nulles šķērsošanas detektora tiek ievadīti 2. tapā, no turienes mēs varam izmērīt katra impulsa laika periodu. Mēs varam izmantot Arduino iekšējo taimeri (īpaši Timer1), lai ar pārtraukumiem aprēķinātu laika periodu starp divām kvadrātveida impulsa augošajām malām. Taimeris palielinās par 1 pulksteņa ciklā (bez prescaler = 1), un vērtība tiek saglabāta reģistrā TCNT1. Tādējādi 16Mhz pulkstenis katru mikrosekundi palielina skaitītāju par 16. Līdzīgi prescaler = 8 taimeris tiek palielināts par 2 katru mikrosekundi. Līdz ar to laika posms starp divām augošajām malām

T = (TCNT1 vērtība) / laiks, kas vajadzīgs katram skaitīšanai

Kur, laiks, kas vajadzīgs katram skaitīšanai = prescaler / (Arduino pulksteņa ātrums (16 MHz)

Tādējādi frekvence f = 1 / T = (Arduino pulksteņa ātrums (16 MHz) / (prescaler * TCNT! Vērtība)

Tādējādi taimera ātrumu (Hz) norāda = (Arduino pulksteņa ātrums (16 MHz)) / prescaler

un signāla frekvenci norāda = (Arduino pulksteņa ātrums

Attiecīgi mēs varam aprēķināt frekvenci f no sakarības f = 1/T.

Sprieguma aprēķins:

Arduino borta ADC izšķirtspēja ir 10 biti (iespējamās vērtības = 2^10 = 1024), atgriežot vērtības diapazonā no 0 līdz 1023. Lai aprēķinātu atbilstošo analogo spriegumu V, mums jāizmanto šāda sakarība

V = (ADC nolasījums) * 5/1023

Lai aprēķinātu barošanas spriegumu Vs (rms), mums jāņem vērā transformatoru attiecība, rezistoru dalītājs R6R7 un pīķa detektora ķēde. Mēs varam vienkārši apkopot dažādus faktorus/attiecību kā:

Transformatora attiecība = 12/230 = 0,052

Rezistoru dalītājs = R7/(R6 + R7) = 0,23

Maksimālā detektora ķēde = 1.414

Vs (rms) = V/(1,414*0,052*0,23) = (ADC lasījums)*0,289

Jāatzīmē, ka šī vērtība ir tālu no faktiskās vērtības, galvenokārt kļūdas dēļ faktiskajā transformatora attiecībā un diodes priekšējā sprieguma kritumā. Viens veids, kā to apiet, ir noteikt koeficientu pēc ķēdes montāžas. Tas ir, mērot barošanas spriegumu un spriegumu pāri kondensatoram C2 atsevišķi ar multimetru, pēc tam aprēķinot Vs (rms) šādi:

Vs (rms) = ((barošanas spriegums *5)/(spriegums C2 *1023)) *(ADC rādījums)

manā gadījumā Vs (rms) = 0,33*(ADC lasījums)

5. darbība: Arduino kods

#define volt_in A0 // analogā sprieguma nolasīšanas tapa

gaistošs uint16_t t_periods; uint16_t ADC_value = 0; pludiņš, frekvence; void isr () {t_period = TCNT1; // saglabāt TCNT1 vērtību t_periodā TCNT1 = 0; // atiestatīt taimeri1 ADC_value = analogRead (volt_in); // lasīt analogo spriegumu} float get_freq () {uint16_t timer = t_period; ja (taimeris == 0) atgriežas 0; // lai izvairītos no dalīšanas ar nulli cits atgriežas 16000000.0/(8UL*taimeris); // frekvenci norāda f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bits (CS11); // iestatīt prescaler uz 8 TCNT1 = 0; // reset Timer1 value TIMSK1 = bit (TOIE1); // iespējot taimera1 pārplūdes pārtraukumu EIFR | = bit (INTF0); // notīrīt INT0 pārtraukšanas karodziņu Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // iespējot ārējo pārtraukumu (INT0) aizkavi (1000); detachInterrupt (0); biežums = get_freq (); volt = ADC_vērtība*0,33; Stīgu buf; buf += virkne (biežums, 3); buf += F ("Hz / t"); buf += Stīga (volt); buf += F ("volti"); Serial.println (buf); }

6. darbība. Secinājums

Secinājums
Secinājums
Secinājums
Secinājums

Jūs varat salikt ķēdi maizes plāksnē un pielāgot kodu un pievienot SD karti, lai saglabātu datus, kurus vēlāk var analizēt. Viens no šādiem piemēriem ir tas, ka jūs varat analizēt spriegumu un frekvenci pīķa stundās.

Shēmā, ko samontēju maizes dēļā, tika izmantots LM324 (četrkāršs opamp), nevis LM358 (dubults opamp), jo man tobrīd nebija šī IC un slēgšana visā valstī COVID-19 pandēmijas dēļ man apgrūtināja jauna IC iegūšanu.. Tomēr tas neietekmēs ķēdes darbību.

Jūtieties brīvi komentēt zemāk visus ieteikumus un jautājumus.

Ieteicams: