Ini posting pertama saya. Saya seorang pria perangkat lunak yang mencoba melakukan perangkat keras jadi lembut :)
Sirkuit
Saya merancang sirkuit kecil (lihat gambar, dan maaf untuk skematis berantakan) yang sederhana dan sederhana adalah sekelompok driver MOSFET dan gerbang yang dirancang untuk mengalihkan beban resistif (bantalan pemanas dalam kasus ini) dari mikrokontroler. Elemen pemanas seringkali memiliki resistansi yang sangat rendah, dan untuk menjaga daya pada level yang diinginkan, MOSFET diaktifkan menggunakan PWM.
Pengukuran
Selain aspek fungsional murni, ada fokus pendidikan juga. Saya ingin mendapatkan umpan balik tentang konsumsi saat ini. Dan pendekatan naif saya adalah dengan hanya membuang beberapa IC sensor shunt saat ini. Ketika menggunakan multimeter untuk mengukur tegangan output dari sensor, saya benar-benar mendapatkan sesuatu yang terlihat seperti arus rata-rata (dengan switching PWM) karena "lambatnya" ammeter. Tetapi ketika menghubungkan output yang sama ke ADC atmega328p, saya mendapatkan beberapa bacaan buruk - kecepatan di sini menempatkan pembacaan di mana saja pada gelombang persegi PWM.
Jadi, pertanyaan saya adalah bagaimana cara mengukur arus (rata-rata) saat beralih dengan PWM?
Sepertinya desainnya OK, tapi saya mungkin telah melewatkan sesuatu baik dalam desain dan bagaimana ADC UC harus digunakan dalam konteks ini.
Jawaban:
Terkadang apa yang terlihat sederhana tidak sesederhana itu. Anda memiliki pengukuran yang cukup rumit untuk dilakukan, tetapi Anda menginginkan hasil yang sederhana. Apa yang ingin Anda ukur tidak konstan, ini bervariasi dalam waktu. Bergantung pada tingkat kebutuhan Anda, Anda dapat menghitung satu atau banyak properti dari konsumsi saat ini. Properti ini akan membantu Anda memantau sistem dengan lebih baik. Saya mengusulkan Anda 3 solusi berbeda, dalam kompleksitas yang menanjak.
Solusi 1: Rata-rata
Anda ingin mendapatkan hasil satu nilai -> dapatkan rata-rata dalam waktu. Seperti yang sudah diusulkan oleh @akellyirl, gunakan filter low-pass. Hitung
float y = alpha*input + (1-alpha)*y
untuk setiap sampel, di manaalpha
faktor penghalusannya. Lihat Wikipedia untuk detailnya.Solusi 2: Max + Rata-Rata
Anda menarik dalam mendapatkan rata-rata, dan nilai maksimal. Pemantauan nilai maks bisa menarik untuk dimensi komponen misalnya.
Solusi 3: Deviasi standar + Max + Rata-rata
Mengapa?
Lihat grafik di bawah ini. Ada 3 sinyal dengan bentuk berbeda. Sebuah segitiga , sebuah sinus , dan lonjakan sinyal. Mereka semua periodik dengan periode yang sama , amplitudo yang sama , rata-rata yang sama , dan min dan maks yang sama . Tapi, mereka memiliki bentuk yang berbeda, dan memang mereka memiliki cerita yang sama sekali berbeda ...
Salah satu perbedaannya adalah standar deviasi. Itu sebabnya saya menyarankan Anda untuk memperluas pengukuran Anda, dan termasuk deviasi standar. Masalahnya adalah bahwa cara standar untuk menghitungnya adalah mengkonsumsi CPU. Semoga ada satu solusi.
Bagaimana?
Gunakan metode histogram . Buat histogram dari semua pengukuran, dan ekstrak secara efisien statistik (min, maks, rata-rata, deviasi standar) dari dataset. Histogram mengelompokkan nilai-nilai yang memiliki nilai yang sama, atau rentang nilai yang sama. Keuntungannya adalah untuk menghindari penyimpanan semua sampel (menambah waktu dalam hitungan), dan memiliki perhitungan cepat pada sejumlah data yang terbatas.
Sebelum mulai mendapatkan pengukuran, buat array untuk menyimpan histogram. Ini adalah array integer 1 dimensi, dengan ukuran 32 misalnya:
int histo[32];
Tergantung pada kisaran ammeter, adaptasikan fungsi di bawah ini. Misalnya, jika kisaran 256mA itu berarti bahwa bin 0 dari histogram akan bertambah dengan nilai antara 0 dan 8 mA, bin 1 dengan nilai antara 8 dan 16 mA dll ... Jadi, Anda akan memerlukan integer untuk mewakili nomor bin histogram:
short int index;
Setiap kali Anda mendapatkan sampel, cari indeks tempat sampah yang sesuai:
index = (short int) floor(yi);
Dan menambahkan nampan ini:
histo[index] += 1;
Untuk menghitung rata-rata, jalankan loop ini:
Untuk menghitung standar deviasi, jalankan loop ini:
Strategi metode histogram adalah untuk membuat operasi lambat pada beberapa jumlah sampah, bukan semua sampel sinyal yang diperoleh. Semakin lama ukuran sampel, semakin baik. Jika Anda ingin lebih detail, baca halaman menarik ini The Histogram, Pmf dan Pdf .
sumber
Anda memahami masalahnya dengan benar: Anda perlu mendapatkan "rata-rata" dari PWM, sama seperti meter yang Anda gunakan untuk pengukuran.
Anda dapat menggunakan filter RC pada sinyal A1,2,3 yang konstanta waktunya setidaknya sepuluh kali periode PWM Anda. Itu berarti jika periode PWM Anda adalah 10 mikrodetik maka konstanta waktu RC harus 100 mikrodetik. Misalnya 10kOhms x 10nF = 100us
Solusi yang lebih baik adalah menyaring sinyal secara digital di mikrokontroler seperti ini:
Ubah nilai "0,99" untuk mengubah konstanta waktu dari filter digital ini.
sumber