Isi kandungan:

Pengukuran Frekuensi Bekalan Kuasa dan Voltan Menggunakan Arduino: 6 Langkah
Pengukuran Frekuensi Bekalan Kuasa dan Voltan Menggunakan Arduino: 6 Langkah

Video: Pengukuran Frekuensi Bekalan Kuasa dan Voltan Menggunakan Arduino: 6 Langkah

Video: Pengukuran Frekuensi Bekalan Kuasa dan Voltan Menggunakan Arduino: 6 Langkah
Video: Measure battery Voltage using Arduino, Volt meter using Arduino 2024, Julai
Anonim
Pengukuran Frekuensi Bekalan Kuasa dan Voltan Menggunakan Arduino
Pengukuran Frekuensi Bekalan Kuasa dan Voltan Menggunakan Arduino

Pengenalan:

Matlamat projek ini adalah untuk mengukur frekuensi dan voltan bekalan, antara 220 hingga 240 Volt dan 50Hz di India. Saya menggunakan Arduino untuk menangkap isyarat dan mengira frekuensi dan voltan, anda mungkin menggunakan mikrokontroler atau papan lain yang anda ada. Litar memerlukan segelintir komponen dan cukup tepat untuk semua tujuan praktikal.

Langkah 1: Komponen Diperlukan

  • Arduino Uno
  • IC LM358
  • Transformer turun ke bawah (220V hingga 12V)
  • Kapasitor:

    • 0.1uF
    • 2 x 1uF
  • Perintang:

    • 3 x 1kOhm
    • 2 x 100kOhm
    • 1.5kOhm
    • 3.3kOhm
    • 6.8kOhm
  • 3 x 1N4148 diod
  • Papan Roti dan kawat Jumper (pilihan)

Langkah 2: Diagram Skematik

Gambarajah skematik
Gambarajah skematik
Gambarajah skematik
Gambarajah skematik

Dalam litar di atas, primer pengubah disambungkan ke rangkaian bekalan dan primer disambungkan ke litar pengukur kami

Langkah 3: Memahami Litar

Memahami Litar
Memahami Litar
Memahami Litar
Memahami Litar
Memahami Litar
Memahami Litar

Menurut fungsinya, litar ini dapat dibahagikan kepada empat bahagian:

J: Litar Zero Crossing Detector

Litar ini menghasilkan denyut persegi 5V setiap kali gelombang sinus berubah dari positif ke negatif. Perintang R1 yang digabungkan dengan D1 dan D2 menghadkan ayunan voltan input di persimpangan diod hingga -0.6V hingga + 5.6V (dengan anggapan voltan hadapan diod menjadi 0.6V). Selanjutnya, anda boleh meningkatkan julat voltan input litar dengan meningkatkan nilai R1.

Perintang R2 dan R3 membentuk pembahagi voltan untuk mengehadkan ayunan voltan negatif hingga -0.24Volt kerana voltan mod biasa input LM358 terhad kepada -0.3Volt.

Perintang R4, R5, kapasitor C1 dan op-amp (di sini digunakan sebagai pembanding) membentuk litar Schmitt Trigger di mana perintang R4 dan R5 menetapkan histeresis pada input + 49.5mV di atas tanah. Output Schmitt Trigger dimasukkan ke Arduino PIN2 untuk pemprosesan selanjutnya.

B: Pengasingan dan Voltan Turun

Seperti namanya bahagian ini mengasingkan dan menurunkan voltan kepada kira-kira 12Vrms. Voltan step-down selanjutnya dimasukkan ke litar instrumentasi.

C: Litar Pengesan Puncak

Litar ini menentukan voltan puncak maksimum isyarat input. Pembahagi perintang R6 dan R7 mengurangkan voltan input dengan faktor 0.23 (12Vrms dikurangkan menjadi 2.76Vrms). Diod D3 hanya menjalankan separuh kitaran positif isyarat. Voltan merentasi C2 meningkat hingga nilai puncak isyarat yang diperbaiki, yang disalurkan ke pin analog Arduino A0 untuk mengira voltan dengan lebih lanjut.

Di samping itu, anda boleh mengganti litar ini dengan litar pengesan puncak ketepatan seperti yang disebutkan di sini. Tetapi untuk tujuan demonstrasi saya, litar di atas akan mencukupi.

D: Arduino

Di bahagian ini, Arduino menangkap denyutan persegi yang dihasilkan oleh litar Schmitt Trigger dan membaca voltan analog dari litar pengesan puncak. Data diproses lebih lanjut untuk menentukan jangka masa (oleh itu frekuensi) nadi persegi (yang sama dengan orang masa bekalan ac) dan voltan bekalan.

Langkah 4: Pengiraan Frekuensi dan Voltan

Pengiraan kekerapan:

Dengan bantuan Arduino, kita dapat mengukur jangka masa T isyarat. Denyut gelombang persegi dari pengesan melintasi sifar dimasukkan ke pin 2, dari sana kita dapat mengukur jangka masa setiap nadi. Kita boleh menggunakan pemasa dalaman Arduino (khususnya Timer1) untuk mengira jangka masa antara dua tepi Nadi persegi yang meningkat dengan bantuan gangguan. Pemasa bertambah sebanyak 1 per kitaran jam (tanpa prescaler = 1) dan nilainya disimpan dalam daftar TCNT1. Oleh itu jam 16Mhz menambah kaunter dengan 16 setiap mikrodetik. Begitu juga untuk prescaler = 8 pemasa bertambah 2 kali setiap mikrodetik. Oleh itu tempoh masa antara dua kelebihan meningkat

T = (nilai TCNT1) / masa yang diambil untuk setiap kiraan

Di mana, masa yang diambil untuk setiap kiraan = prescaler / (kelajuan jam Arduino (16MHz)

Oleh itu, frekuensi f = 1 / T = (Kelajuan jam Arduino (16MHz) / (nilai Prescaler * TCNT!)

Oleh itu kelajuan pemasa (Hz) diberikan oleh = (kelajuan jam Arduino (16MHz)) / preskaler

dan frekuensi isyarat diberikan oleh = (kelajuan jam Arduino

Sejajar dengan itu, kita dapat mengira frekuensi f dari hubungan f = 1 / T.

Pengiraan voltan:

ADC onboard Arduino mempunyai resolusi 10 bit (nilai yang mungkin = 2 ^ 10 = 1024), mengembalikan nilai dalam julat 0-1023. Untuk mengira voltan analog V yang sepadan, kita harus menggunakan hubungan berikut

V = (Bacaan ADC) * 5/1023

Untuk mengira voltan bekalan Vs (rms) kita mesti mengambil kira Transformer Ratio, Resistor pembahagi R6R7 dan litar pengesan puncak. Kita hanya dapat mengumpulkan pelbagai faktor / nisbah seperti:

Nisbah transformer = 12/230 = 0.052

Pembahagi perintang = R7 / (R6 + R7) = 0.23

Pada litar pengesan puncak = 1.414

Vs (rms) = V / (1.414 * 0.052 * 0.23) = (Bacaan ADC) * 0.289

Harus diingat bahawa nilai ini jauh dari nilai sebenarnya, terutamanya disebabkan oleh kesalahan dalam nisbah transformer sebenar dan penurunan voltan hadapan diod. Salah satu cara untuk mengelakkan ini adalah dengan menentukan faktor setelah memasang litar. Iaitu dengan mengukur voltan bekalan dan voltan merentasi kapasitor C2 secara berasingan dengan multimeter, kemudian mengira Vs (rms) seperti berikut:

Vs (rms) = ((Voltan Bekalan * 5) / (Voltan merentasi C2 * 1023)) * (Bacaan ADC)

dalam kes saya, Vs (rms) = 0.33 * (Bacaan ADC)

Langkah 5: Kod Arduino

#tentukan volt_in A0 // pin bacaan voltan analog

uint16_t t_period tidak menentu; uint16_t ADC_value = 0; float volt, freq; void isr () {t_period = TCNT1; // simpan nilai TCNT1 dalam t_period TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // baca voltan analog} float get_freq () {uint16_t timer = t_period; jika (pemasa == 0) pulangkan 0; // untuk mengelakkan pembahagian dengan sifar lain kembali 16000000.0 / (8UL * pemasa); // frekuensi diberikan oleh f = clk_freq / (prescaler * timeperiod)} persediaan tidak sah () {TCCR1A = 0; TCCR1B = bit (CS11); // tetapkan prescaler ke 8 TCNT1 = 0; // tetapkan semula nilai Timer1 TIMSK1 = bit (TOIE1); // aktifkan Timer1 overflow mengganggu EIFR | = bit (INTF0); // jelas batal gangguan INT0 Serial.begin (9600); } gelung void () {attachInterrupt (0, isr, RISING); // aktifkan kelewatan gangguan luaran (INT0) (1000); detachInterrupt (0); freq = get_freq (); volt = ADC_value * 0.33; String buf; buf + = Rentetan (freq, 3); buf + = F ("Hz / t"); buf + = Rentetan (volt); buf + = F ("Volt"); Serial.println (buf); }

Langkah 6: Kesimpulannya

Kesimpulannya
Kesimpulannya
Kesimpulannya
Kesimpulannya

Anda boleh memasang litar di papan roti dan mengubah kodnya dan menambahkan Kad SD untuk menyimpan data, yang kemudian dapat dianalisis. Salah satu contohnya ialah, anda dapat menganalisis voltan dan frekuensi pada waktu puncak.

Litar yang saya pasangkan di papan roti menggunakan LM324 (quad opamp) dan bukan LM358 (dual opamp) kerana saya tidak mempunyai IC pada masa itu dan penguncian di seluruh negara kerana pandemi COVID-19 menyukarkan saya untuk mendapatkan IC baru. Walaupun begitu, ia tidak akan mempengaruhi kerja litar.

Jangan ragu untuk memberi komen di bawah untuk sebarang cadangan dan pertanyaan.

Disyorkan: