Membaca tegangan yang bervariasi ke Arduino

8

Menggunakan Arduino Nano dan transformator arus (CT), saya mencoba merasakan arus yang mengalir melalui garis 120 V 60 Hz.

Sirkuit

CT output 0-1 Vsesuai dengan spesifikasinya. Output ini bias AREF/2= 2,5 V.

Masukkan deskripsi gambar di sini

analogRead Nilai-nilai

Sumbu x mewakili nomor indeks sampel ADC, sedangkan sumbu y mewakili nilai ADC (0-1024). Kecepatan pengambilan sampel sekitar 9 kHz. Perbedaan puncak-ke-puncak adalah sekitar 1026 sampel.

Masukkan deskripsi gambar di sini

Apakah bentuk gelombang ini seperti yang Anda harapkan dari CT? Mengapa ada daerah di mana nilainya datar, dan bukannya terus berubah?

Lebih jauh, jika kita melihat bagian kurva dari plot, mengapa Arduino membaca nilai di atas 512dan di bawah secara 512bergantian? Bunyinya nilai di atas 512, kemudian nilai di bawah 512, lalu nilai di atas 512dan seterusnya.

Waktu yang dibutuhkan untuk analogReaddiukur menjadi 110 mikrodetik untuk pengaturan saya dan ada 1026 sampel di antara puncak-puncak gelombang. Itu berarti akan ada sekitar 9 puncak dalam 1 detik, meskipun saya akan mengharapkan 60 puncak karena kami merasakan garis 60 Hz. Apa yang Anda dapatkan dari ini? Ada kapasitor, C1di sirkuit, apakah ada hubungannya dengan ini?

Apakah nilai analogRead ini cocok untuk digunakan untuk menghitung tegangan RMS, dan karenanya arus RMS yang melewati kawat dirasakan? Tujuan akhir dari ini adalah untuk menghitung penggunaan daya setelah menentukan arus RMS yang mengalir melalui kawat.

Sketsa digunakan untuk mendapatkan nilai untuk plot

void setup() {
    Serial.begin(9600);
}

void loop() {
   double sensorValue = analogRead(1);
   Serial.println(sensorValue)
}

analogReadPoin data aktual di wilayah benjolan

487
534
487
535
488
537
484
536
487
538
486
536
484
540
484
539
485
540
483
540
484
541
481
539
481
540
484
540
480
543
484
539
481
540
484
541
486
542
485
538
485
538
488
535
489
534
491
530
491
529
493
531
492
526
498
526
499
524
499
520
503
518
502
518
507

Plot nilai analogRead

Nilai analogRead sekarang disimpan dalam buffer sebelum dikirim melalui Serial. Sekarang ada 55 titik data ADC yang membentuk 1 periode. Mempertimbangkan waktu analogRead adalah 110 µs, setiap siklus membutuhkan 6.05 ms, memberikan kita frekuensi 165 Hz! Apa yang salah?

Masukkan deskripsi gambar di sini

void loop() {
    double sensorValue = analogRead(1);
    char buf[32];

    dtostrf(sensorValue, 8, 2, buf);
    value = buf;

    if (stop == 0) {
        if (i < 10000) {
            message += ',';
            message += value;
            i++;
        }
        else {
            stop = 1;
            Serial.println(message);
        }
    }
}
Nyxynyx
sumber
Bisakah Anda memposting kode Anda? Ini sama sekali tidak beres. Ketika Anda mengatakan "Dengan asumsi bahwa 100ms berlalu", mengapa kita menganggap itu?
Cybergibbons
@Cybergibbons Diposting kode yang digunakan untuk menghasilkan nilai untuk plot. Maaf, saya baru saja mengukur waktu yang dibutuhkan untuk analogRead()dan menemukan itu menjadi 110 mikrodetik. Memperbarui pertanyaan.
Nyxynyx
Berapa beban yang Anda gunakan untuk listrik. Idealnya Anda menginginkan sesuatu yang cukup stabil seperti bola lampu pijar. Jika Anda memiliki sesuatu yang kompleks seperti catu daya switchmode laptop yang mungkin memiliki beban yang bervariasi, Anda mungkin mengharapkan hasil yang kompleks.
Salix alba
1
Sebagian besar waktu dalam loop akan dihabiskan mengirim serial pada 9600bps. Anda hanya akan menggeser 960 karakter / s yaitu setiap pembacaan membutuhkan 4ms.
Cybergibbons
@Salixalba Beban adalah komputer desktop dengan catu daya switching. Saya akan mencoba mengukur beban yang berbeda, seperti pemanas.
Nyxynyx

Jawaban:

5

Mengenai pengukuran Anda, saya benar-benar akan mengabaikan set pertama dengan Serial.println () di loop. Saya akan berharap waktu ini tidak dapat diandalkan.

Set data kedua yang Anda tangkap dalam buffer terlihat benar, tetapi Estimasi Frekuensi Anda mungkin salah. Saya akan membalikkan Output Digital pada setiap iterasi loop. Anda dapat mengukur frekuensi dengan Multimeter dan laju sampel ADC Anda akan menjadi dua kali lipat nilainya.

Untuk catu daya PC atau laptop, itu adalah bentuk gelombang yang cukup umum saat ini.

Tanpa Koreksi Faktor Daya yang efektif, sinyal saat ini yang ditunjukkan di bawah ini akan sangat tipikal (sumber: http://www.nlvocables.com/blog/?p=300 )

http://www.nlvocables.com/blog/?p=300

Anda perlu menghitung nilai RMS dan akan lebih baik jika menyaring sinyal.

Berikut adalah instruksional yang saya tulis tentang cara membuat dan mengkodekan Monitor Listrik berbasis Arduino Yun dengan Cloud Support / Temboo dan Google Drive. Seharusnya bisa membantu Anda.

akellyirl
sumber
Terima kasih! CT yang Anda gunakan menghasilkan -1V ke 1V. Untuk memanfaatkan ADC 10 bit, apakah Anda akan memperbesar output SCT sebesar 2,5 menggunakan opamp? Atau atur AREF Anda ke 2V dan bias sinyal CT Anda dengan 1V
Nyxynyx
Tidak, saya tidak memperkuatnya atau mengubah Aref.
akellyirl
Bagaimana Anda bisa mendapatkan plot grafik ini? Dengan perangkat lunak apa?
Zgrknr
0

jika Anda mengukur beban resistif saya akan mengatakan bahwa resistor beban yang Anda pilih salah, ada beberapa CT murah di ebay (SCT-013-xxx) yang memiliki versi dengan dan tanpa resistor beban, ini bekerja dengan baik untuk harganya tetapi Anda harus membaca lembar data. SCT-013-000 membutuhkan resistor 20R untuk mendapatkan 1V dengan beban 100A, jika resistor ini salah Anda bisa mendapatkan bentuk gelombang yang sangat terdistorsi saat mengukur arus yang lebih tinggi (mirip dengan yang Anda berikan), Anda akan mengharapkan sinyal untuk mendistorsi lebih banyak nilai tahanan beban tetapi ini tidak terjadi pada CT.

Ian
sumber