Daftar Isi:

Pengukuran Frekuensi dan Tegangan Power Supply Menggunakan Arduino: 6 Langkah
Pengukuran Frekuensi dan Tegangan Power Supply Menggunakan Arduino: 6 Langkah

Video: Pengukuran Frekuensi dan Tegangan Power Supply Menggunakan Arduino: 6 Langkah

Video: Pengukuran Frekuensi dan Tegangan Power Supply Menggunakan Arduino: 6 Langkah
Video: VOLT METER AMPERE DARI ARDUINO 2024, Juli
Anonim
Pengukuran Frekuensi dan Tegangan Catu Daya Menggunakan Arduino
Pengukuran Frekuensi dan Tegangan Catu Daya Menggunakan Arduino

Pengantar:

Tujuan dari proyek ini adalah untuk mengukur frekuensi dan tegangan suplai, yaitu antara 220 hingga 240 Volt dan 50Hz di India. Saya menggunakan Arduino untuk menangkap sinyal dan menghitung frekuensi dan tegangan, Anda dapat menggunakan mikrokontroler atau papan lain yang Anda miliki. Sirkuit membutuhkan beberapa komponen dan cukup akurat untuk semua tujuan praktis.

Langkah 1: Komponen Diperlukan

  • Arduino Uno
  • IC LM358
  • Trafo step down (220V ke 12V)
  • Kapasitor:

    • 0.1uF
    • 2 x 1uF
  • Resistor:

    • 3 x 1kOhm
    • 2 x 100kOhm
    • 1.5kOhm
    • 3.3kOhm
    • 6.8kOhm
  • 3x1N4148 dioda
  • Papan Roti dan kabel Jumper (opsional)

Langkah 2: Diagram Skema

Diagram skematik
Diagram skematik
Diagram skematik
Diagram skematik

Pada rangkaian di atas, primer transformator terhubung ke suplai utama dan primer terhubung ke rangkaian pengukuran kami

Langkah 3: Memahami Sirkuit

Memahami Sirkuit
Memahami Sirkuit
Memahami Sirkuit
Memahami Sirkuit
Memahami Sirkuit
Memahami Sirkuit

Menurut fungsinya, rangkaian ini dapat dibagi menjadi empat bagian:

A: Sirkuit Zero Crossing Detector

Sirkuit ini menghasilkan pulsa persegi 5V setiap kali gelombang sinus berubah dari positif ke negatif. Resistor R1 yang dikombinasikan dengan D1 dan D2 membatasi ayunan tegangan input pada sambungan dioda menjadi -0,6V hingga +5,6V (dengan asumsi tegangan maju dioda menjadi 0,6V). Selanjutnya, Anda dapat meningkatkan rentang tegangan input rangkaian dengan meningkatkan nilai R1.

Resistor R2 dan R3 membentuk pembagi tegangan untuk membatasi ayunan tegangan negatif hingga -0,24Volts karena tegangan mode-umum input LM358 dibatasi hingga -0,3Volts.

Resistor R4, R5, kapasitor C1 dan op-amp (di sini digunakan sebagai pembanding) membentuk rangkaian Pemicu Schmitt di mana resistor R4 dan R5 mengatur histeresis pada input +49.5mV di atas tanah. Output dari Schmitt Trigger diumpankan ke PIN2 Arduino untuk diproses lebih lanjut.

B: Isolasi dan Tegangan Turun

Seperti namanya, bagian ini mengisolasi dan menurunkan tegangan hingga sekitar 12Vrms. Tegangan step-down selanjutnya diumpankan ke sirkuit instrumentasi.

C: Sirkuit Detektor Puncak

Rangkaian ini menentukan tegangan puncak maksimum dari sinyal input. Pembagi resistor R6 dan R7 mengurangi tegangan input dengan faktor 0,23 (12Vrms dikurangi menjadi 2,76Vrms). Dioda D3 hanya melakukan setengah siklus positif dari sinyal. Tegangan melintasi C2 meningkat hingga nilai puncak dari sinyal yang diperbaiki, yang diumpankan ke pin analog Arduino A0 untuk menghitung tegangan lebih lanjut.

Selain itu, Anda dapat mengganti rangkaian ini dengan rangkaian detektor puncak presisi seperti yang disebutkan di sini. Tetapi untuk tujuan demonstrasi saya, rangkaian di atas sudah cukup.

D: Arduino

Pada bagian ini, Arduino menangkap pulsa persegi yang dihasilkan oleh rangkaian Schmitt Trigger dan membaca tegangan analog dari rangkaian detektor puncak. Data diproses lebih lanjut untuk menentukan periode waktu (karenanya frekuensi) dari pulsa persegi (yang sama dengan waktu suplai ac orang) dan tegangan suplai.

Langkah 4: Perhitungan Frekuensi dan Tegangan

Perhitungan frekuensi:

Dengan bantuan Arduino, kita dapat mengukur periode waktu T dari sinyal. Pulsa gelombang persegi dari detektor zero-crossing diumpankan ke pin 2, dari sana kita dapat mengukur periode waktu setiap pulsa. Kita dapat menggunakan timer internal Arduino (khususnya Timer1) untuk menghitung periode waktu antara dua tepi Rising dari pulsa persegi dengan bantuan interupsi. Timer bertambah 1 per siklus clock (tanpa prescaler = 1) dan nilainya disimpan dalam register TCNT1. Oleh karena itu jam 16Mhz menambah penghitung sebesar 16 setiap mikrodetik. Demikian pula untuk prescaler = 8, timer bertambah 2 setiap mikrodetik. Oleh karena itu periode waktu antara dua sisi naik

T = (nilai TCNT1) / waktu yang dibutuhkan untuk setiap hitungan

Dimana, waktu yang dibutuhkan untuk setiap hitungan = prescaler / (kecepatan clock Arduino (16MHz)

Oleh karena itu, frekuensi f = 1/T = (Kecepatan clock Arduino (16MHz) / (Prescaler * nilai TCNT!)

Oleh karena itu kecepatan timer (Hz) diberikan oleh = (kecepatan clock Arduino (16MHz)) / prescaler

dan frekuensi sinyal diberikan oleh = (kecepatan clock Arduino

Sejalan dengan itu, kita dapat menghitung frekuensi f dari relasi f = 1/T.

Perhitungan tegangan:

ADC Arduino onboard memiliki resolusi 10 bit (nilai yang mungkin = 2^10 = 1024), mengembalikan nilai dalam kisaran 0-1023. Untuk menghitung tegangan analog yang sesuai V kita harus menggunakan hubungan berikut:

V = (Bacaan ADC) * 5/1023

Untuk menghitung tegangan suplai Vs(rms) kita harus memperhitungkan Rasio Transformator, pembagi Resistor R6R7 dan rangkaian detektor puncak. Kita dapat dengan mudah menggabungkan berbagai faktor/rasio sebagai:

Rasio transformator = 12/230 = 0,052

Pembagi resistor = R7/(R6 + R7) = 0,23

Pada rangkaian detektor puncak = 1,414

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

Perlu dicatat bahwa nilai ini jauh dari nilai sebenarnya, terutama karena kesalahan rasio transformator aktual dan penurunan tegangan maju dioda. Salah satu cara untuk menghindari ini adalah dengan menentukan faktor setelah merakit rangkaian. Yaitu dengan mengukur tegangan suplai dan tegangan melintasi kapasitor C2 secara terpisah dengan multimeter, kemudian menghitung Vs(rms) sebagai berikut:

Vs(rms) = ((Tegangan Pasokan * 5)/(Tegangan di C2 *1023))*(Pembacaan ADC)

dalam kasus saya, Vs(rms) = 0,33*(Membaca ADC)

Langkah 5: Kode Arduino

#define volt_in A0 //pin pembacaan voltase analog

volatil uint16_t t_period; uint16_t ADC_nilai = 0; float volt, frekuensi; void isr() { t_period = TCNT1; //menyimpan nilai TCNT1 dalam t_period TCNT1 = 0; //reset Timer1 ADC_value = analogRead(volt_in); //baca tegangan analog } float get_freq() { uint16_t timer = t_period; if(timer==0) kembalikan 0; // untuk menghindari pembagian dengan nol, return 16000000.0/(8UL*timer); // frekuensi diberikan oleh f = clk_freq/(prescaler*timeperiod)} void setup() { TCCR1A = 0; TCCR1B = bit(CS11); //set prescaler ke 8 TCNT1 = 0; //reset nilai Timer1 TIMSK1 = bit(TOIE1); //aktifkan timer1 overflow interupsi EIFR |= bit(INTF0); // hapus flag interupsi INT0 Serial.begin(9600); } void loop() { attachInterrupt(0, isr, NAIK); //mengaktifkan penundaan interupsi eksternal (INT0)(1000); detachInterrupt(0); frekuensi = get_freq(); volt = nilai_ADC*0,33; penggemar tali; buf += String(frekuensi, 3); buf += F("Hz\t"); buf += String(volt); buf += F("Volt"); Serial.println(buf); }

Langkah 6: Kesimpulan

Kesimpulan
Kesimpulan
Kesimpulan
Kesimpulan

Anda dapat merakit sirkuit di papan tempat memotong roti dan mengubah kode dan menambahkan Kartu SD untuk menyimpan data, yang nantinya dapat dianalisis. Salah satu contohnya adalah, Anda dapat menganalisis tegangan dan frekuensi pada jam sibuk.

Rangkaian yang saya rakit di papan tempat memotong roti menggunakan LM324(quad opamp) bukan LM358(dual opamp) karena saya tidak memiliki IC itu pada saat itu dan penguncian nasional karena pandemi COVID-19 membuat saya sulit untuk mendapatkan IC baru. Namun demikian, itu tidak akan mempengaruhi kerja sirkuit.

Jangan ragu untuk berkomentar di bawah untuk saran dan pertanyaan apa pun.

Direkomendasikan: