Cuprins:
- Pasul 1: Componente necesare
- Pasul 2: Diagrama schematică
- Pasul 3: Înțelegerea circuitului
- Pasul 4: Calculul frecvenței și tensiunii
- Pasul 5: Cod Arduino
- Pasul 6: Concluzie
Video: Măsurarea frecvenței și tensiunii de alimentare cu ajutorul Arduino: 6 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:41
Introducere:
Scopul acestui proiect este de a măsura frecvența și tensiunea de alimentare, care este cuprinsă între 220 și 240 de volți și 50 Hz aici, în India. Am folosit un Arduino pentru captarea semnalului și calcularea frecvenței și tensiunii, puteți utiliza orice alt microcontroler sau placă pe care o aveți. Circuitul necesită o mână de componente și este destul de precis pentru toate scopurile practice.
Pasul 1: Componente necesare
- Arduino Uno
- IC LM358
- Transformator descendent (220V la 12V)
-
Condensatoare:
- 0,1 uF
- 2 x 1uF
-
Rezistențe:
- 3 x 1kOhm
- 2 x 100kOhm
- 1,5kOhm
- 3,3kOhm
- 6,8 kOhm
- 3 x diodă 1N4148
- Pâine și sârmă jumper (opțional)
Pasul 2: Diagrama schematică
În circuitul de mai sus, transformatorul primar este conectat la rețeaua de alimentare, iar primarul este conectat la circuitul nostru de măsurare
Pasul 3: Înțelegerea circuitului
Conform funcționalității, acest circuit poate fi împărțit în patru părți:
A: Circuitul detectorului de trecere zero
Acest circuit generează un impuls pătrat de 5V ori de câte ori unde sinusoidale trece de la pozitiv la negativ. Rezistorul R1 combinat cu D1 și D2 limitează oscilația tensiunii de intrare la joncțiunea diodei la -0,6V la + 5,6V (presupunând că tensiunea directă a diodei este 0,6V). În plus, puteți crește gama de tensiune de intrare a circuitului prin creșterea valorii R1.
Rezistorul R2 și R3 formează un divizor de tensiune pentru a limita oscilația tensiunii negative la -0,24 Volți, deoarece tensiunea de intrare în modul comun al LM358 este limitată la -0,3 Volți.
Rezistorul R4, R5, condensatorul C1 și op-amp (utilizat aici ca comparator) formează circuitul Schmitt Trigger unde rezistorul R4 și R5 setează histerezisul la intrare + 49,5mV deasupra solului. Ieșirea Schmitt Trigger este alimentată către Arduino PIN2 pentru procesare ulterioară.
B: Izolare și tensiune descrescătoare
După cum sugerează și numele, această parte izolează și reduce tensiunea la aproximativ 12Vrms. Tensiunea redusă este alimentată în continuare în circuitul de instrumentare.
C: Circuitul detectorului de vârf
Acest circuit determină tensiunea maximă de vârf a semnalului de intrare. Divizorul de rezistențe R6 și R7 reduce tensiunea de intrare cu un factor de 0,23 (12Vrms este redus la 2,76Vrms). Dioda D3 conduce doar semiciclul pozitiv al semnalului. Tensiunea pe C2 crește până la valoarea de vârf a semnalului rectificat, care este alimentat pinului analogic Arduino A0 pentru a calcula în continuare tensiunea.
În plus, puteți înlocui acest circuit cu un circuit de precizie cu detector de vârf, cum ar fi acestea menționate aici. Dar pentru scopurile mele demonstrative, circuitul de mai sus va fi suficient.
D: Arduino
În această parte, Arduino captează impulsurile pătrate generate de circuitul Schmitt Trigger și citește tensiunea analogică din circuitul detectorului de vârf. Datele sunt prelucrate în continuare pentru a determina perioada de timp (deci frecvența) impulsului pătrat (care este egal cu persoana din timpul de alimentare cu curent alternativ) și tensiunea de alimentare.
Pasul 4: Calculul frecvenței și tensiunii
Calculul frecvenței:
Cu ajutorul Arduino, putem măsura perioada de timp T a semnalului. Impulsurile de undă pătrată de la detectorul de trecere zero sunt alimentate la pinul 2, de acolo putem măsura perioada de timp a fiecărui impuls. Putem utiliza temporizatorul intern al Arduino (în special Timer1) pentru a calcula perioada de timp dintre două margini ascendente ale impulsului pătrat cu ajutorul întreruperilor. Temporizatorul crește cu 1 per ciclu de ceas (fără prescaler = 1) și valoarea este stocată în registrul TCNT1. Prin urmare, ceasul de 16 MHz crește contorul cu 16 la fiecare microsecundă. În mod similar pentru prescaler = 8, cronometrul se mărește cu 2 la fiecare microsecundă. De aici și perioada de timp dintre două margini ascendente
T = (valoare TCNT1) / timpul necesar pentru fiecare numărare
Unde, timpul necesar pentru fiecare număr = prescaler / (viteza ceasului Arduino (16 MHz)
Prin urmare, frecvența f = 1 / T = (Viteza ceasului Arduino (16 MHz) / (Prescaler * valoarea TCNT!)
Prin urmare, viteza temporizatorului (Hz) este dată de = (Viteza ceasului Arduino (16 MHz)) / prescaler
iar frecvența semnalului este dată de = (viteza de ceas Arduino
În mod corespunzător, putem calcula frecvența f din relația f = 1 / T.
Calculul tensiunii:
ADC-ul integrat al Arduino are o rezoluție de 10 biți (valori posibile = 2 ^ 10 = 1024), returnând valori în intervalul 0-1023. Pentru a calcula tensiunea analogică V corespunzătoare trebuie să folosim următoarea relație
V = (citire ADC) * 5/1023
Pentru a calcula tensiunea de alimentare Vs (rms) trebuie să luăm în considerare raportul transformatorului, divizorul rezistorului R6R7 și circuitul detectorului de vârf. Putem pur și simplu să alcătuim diferiți factori / raport ca:
Raportul transformatorului = 12/230 = 0,052
Divizorul rezistorului = R7 / (R6 + R7) = 0,23
La circuitul detectorului de vârf = 1.414
Vs (rms) = V / (1,414 * 0,052 * 0,23) = (citire ADC) * 0,289
Trebuie remarcat faptul că această valoare este departe de valoarea reală, în principal din cauza erorii în raportul real al transformatorului și a căderii de tensiune a diodei. O modalitate de a ocoli acest lucru este de a determina factorul după asamblarea circuitului. Asta prin măsurarea tensiunii de alimentare și a tensiunii pe condensatorul C2 separat cu un multimetru, apoi calculând Vs (rms) după cum urmează:
Vs (rms) = ((Tensiunea de alimentare * 5) / (Tensiunea la C2 * 1023)) * (citirea ADC)
în cazul meu, Vs (rms) = 0,33 * (citire ADC)
Pasul 5: Cod Arduino
#define volt_in A0 // pin analogic de citire a tensiunii
volatil uint16_t t_period; uint16_t ADC_value = 0; float volt, frecvență; void isr () {t_period = TCNT1; // stocați valoarea TCNT1 în t_perioada TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // citit tensiune analogică} float get_freq () {uint16_t timer = t_period; if (timer == 0) returnează 0; // pentru a evita împărțirea cu zero altceva returnează 16000000.0 / (8UL * timer); // frecvența este dată de f = clk_freq / (prescaler * timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // setați prescalerul la 8 TCNT1 = 0; // resetează valoarea Timer1 TIMSK1 = bit (TOIE1); // activa Timer1 overflow interrupt EIFR | = bit (INTF0); // ștergeți semnalul de întrerupere INT0 Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // activați întreruperea externă (INT0) întârziere (1000); detachInterrupt (0); freq = get_freq (); volt = ADC_value * 0,33; String buf; buf + = String (frecv, 3); buf + = F ("Hz / t"); buf + = String (volt); buf + = F ("Volți"); Serial.println (buf); }
Pasul 6: Concluzie
Puteți asambla circuitul într-o placă de calcul și puteți modifica codul și puteți adăuga un card SD pentru a stoca datele, care pot fi ulterior analizate. Un astfel de exemplu este că puteți analiza tensiunea și frecvența la orele de vârf.
Circuitul pe care l-am asamblat în panou a folosit LM324 (quad opamp) în loc de LM358 (dual opamp) deoarece nu aveam acel IC în acel moment și blocarea la nivel național din cauza pandemiei COVID-19 mi-a făcut dificil să obțin un nou IC. Cu toate acestea, nu ar afecta funcționarea circuitului.
Nu ezitați să comentați mai jos pentru orice sugestii și întrebări.
Recomandat:
Măsurarea tensiunii DC folosind Arduino: 5 pași
Măsurarea tensiunii DC folosind Arduino: În acest proiect vă voi arăta cum să măsurați tensiunea DC până la 50v utilizând arduino și afișarea pe modulul de afișare OLED are nevoie de arduino Afișaj UNOol 10k ohm rezistor 1k ohm rezistor
Măsurarea tensiunii AC True-RMS: 14 pași
Măsurarea tensiunii AC True-RMS: Astăzi vom folosi STM32 Maple Mini pentru a face o citire AC. În exemplul nostru, vom obține valoarea RMS a rețelei electrice. Acest lucru este foarte util pentru cei care doresc să monitorizeze rețeaua electrică pentru internetul obiectelor. Vom crea apoi o aplicație
Măsurarea tensiunii folosind Arduino: 5 pași
Măsurarea tensiunii folosind Arduino: Măsurarea tensiunii este destul de ușoară folosind orice microcontroler în comparație cu măsurarea curentului. Măsurarea tensiunilor devine necesară dacă lucrați cu baterii sau doriți să realizați propria sursă de alimentare reglabilă. Deși această metodă se aplică
Măsurarea tensiunii DC cu Arduino și Node-RED: 8 pași (cu imagini)
Măsurarea tensiunii de curent continuu cu Arduino și Node-RED: Există o mulțime de tutoriale de măsurare a tensiunii de curent continuu cu Arduino, în acest caz am găsit un tutorial pe care îl consider cea mai bună metodă funcțională pentru a măsura DC fără a necesita valori de intrare de rezistență, necesită doar o anumită rezistență și un multimetru
Schimbarea tensiunii de ieșire a unei surse de alimentare ieftine: 3 pași
Schimbarea tensiunii de ieșire a unei surse de alimentare ieftine: Acest instructaj arată cum să schimbați piesele din interiorul unei surse de alimentare mici pentru a stabili tensiunea de ieșire în funcție de nevoile dvs. Pentru proiectul DIY am avut nevoie de o tensiune stabilizată de exact 7V dc și aproximativ 100 mA. Privind în jurul colecției mele de piese, am găsit o s