Filter tunggal tunggal yang sederhana, low pass, rekursif IIR cepat dan mudah diterapkan, mis. Dimana x, y adalah sinyal accelerometer XY mentah (tidak difilter), xf, yf adalah sinyal keluaran yang disaring, dan k menentukan konstanta waktu dari filter (biasanya bernilai antara 0,9 dan 0,9999) di mana k yang lebih besar berarti konstanta waktu yang lebih lama ). Anda dapat menentukan secara empiris, atau jika Anda mengetahui frekuensi cut-off yang Anda inginkan, Fc. Maka Anda bisa menggunakan rumus: di mana Fs adalah sample rate. Perhatikan bahwa xf, yf adalah nilai sinyal keluaran sebelumnya pada RHS, dan nilai keluaran baru pada LHS dari ungkapan di atas. Perhatikan juga bahwa kita mengasumsikan di sini bahwa Anda akan mengambil sampel sinyal accelerometer pada interval waktu reguler, mis. Setiap 10 ms Konstanta waktu akan menjadi fungsi kedua k dan interval sampling ini. Filter Rata-rata Contoh ini menunjukkan alur kerja yang disarankan untuk menghasilkan kode C dari fungsi MATLAB menggunakan perintah codegen. Ini adalah langkah-langkahnya: 1. Tambahkan perintah codegen ke fungsi MATLAB untuk menunjukkan bahwa itu dimaksudkan untuk pembuatan kode. Petunjuk ini juga memungkinkan penganalisis kode MATLAB untuk mengidentifikasi peringatan dan kesalahan yang spesifik untuk MATLAB untuk pembuatan kode. 2. Menghasilkan fungsi MEX untuk memeriksa apakah kode MATLAB cocok untuk pembuatan kode. Jika terjadi kesalahan, Anda harus memperbaikinya sebelum menghasilkan kode C. 3. Uji fungsi MEX di MATLAB untuk memastikan bahwa fungsinya setara dengan kode MATLAB asli dan tidak ada kesalahan run-time. 4. Buat kode C. 5. Periksa kode C. Prasyarat Tidak ada prasyarat untuk contoh ini. Buat Folder Baru dan Salin File yang Relevan Kode berikut akan membuat folder di folder kerja Anda saat ini (pwd). Folder baru hanya berisi file yang relevan untuk contoh ini. Jika Anda tidak ingin mempengaruhi folder saat ini (atau jika Anda tidak dapat membuat file dalam folder ini), Anda harus mengubah folder kerja Anda. Jalankan Command: Buat Folder Baru dan Salin File yang Relevan Tentang Fungsi Rata-ratafilter Fungsi averagingfilter. m berfungsi sebagai filter rata-rata pada sinyal input yang diperlukan sebagai vektor masukan nilai dan menghitung rata-rata untuk setiap nilai pada vektor. Vektor output adalah ukuran dan bentuk yang sama dengan vektor masukan. Petunjuk kompilasi codegen menunjukkan bahwa kode MATLAB ditujukan untuk pembuatan kode. Buat beberapa Data Sampel Hasilkan gelombang sinus yang bising dan plot hasilnya. Menghasilkan Fungsi MEX untuk Pengujian Menghasilkan fungsi MEX dengan menggunakan perintah codegen. Perintah codegen memeriksa bahwa fungsi MATLAB cocok untuk pembuatan kode dan menghasilkan fungsi MEX yang dapat Anda uji di MATLAB sebelum menghasilkan kode C. Karena C menggunakan pengetikan statis, codegen harus menentukan sifat semua variabel dalam file MATLAB pada waktu kompilasi. Di sini, opsi baris perintah-tersebut memasok masukan contoh sehingga codegen dapat menyimpulkan jenis baru berdasarkan jenis input. Dengan menggunakan sinyal sampel yang dibuat di atas sebagai contoh masukan memastikan bahwa fungsi MEX dapat menggunakan input yang sama. Secara default, codegen menghasilkan fungsi MEX bernama averagingfiltermex di folder saat ini. Ini memungkinkan Anda untuk menguji kode MATLAB dan fungsi MEX dan membandingkan hasilnya. Uji Fungsi MEX di MATLAB Jalankan fungsi MEX di MATLAB Menghasilkan Kode C Memeriksa Kode Generasi Perintah codegen dengan opsi - config coder. config (lib) menghasilkan kode C yang dikemas sebagai perpustakaan C mandiri. Kode C yang dihasilkan ada di folder codegenlibaveragingfilter. File-filenya adalah: Periksa Kode C untuk fungsi rata-ratafilter. c Pilih Negara AndaAccelerometers Accelerometers mengukur akselerasi. Itu akselerasi akibat gerakan dan juga akselerasi akibat gravitasi. Accelerometer sering digunakan untuk menghitung sudut kemiringan. Mereka hanya bisa melakukan ini dengan andal saat mereka statis dan tidak bergerak. Untuk mendapatkan sudut kemiringan yang akurat, mereka sering digabungkan dengan satu atau lebih gyro dan kombinasi data digunakan untuk menghitung sudutnya. Akselerometer digital akan memberi Anda informasi menggunakan protokol serial seperti I2C. SPI atau USART, sementara accelerometers analog akan menampilkan level tegangan dalam kisaran yang telah ditentukan sehingga Anda harus mengkonversi ke nilai digital menggunakan modul ADC (analog to digital converter). Dalam tutorial ini kita akan menjelaskan secara singkat fungsionalitas accelerometers, bagaimana penggunaannya untuk mengukur sudut kemiringan dan akhirnya memberikan beberapa contoh kode. Juga lihat tutorial tentang menggabungkan data accelerometer dan gyro untuk memberi sudut kemiringan yang lebih baik untuk sistem yang dinamis. Apa akselerometer Accelerometer mengukur akselerasi. Untuk benda statis yaitu akselerasi akibat gravitasi (1g). Perhatikan juga, bahwa output dari accelerometers tidak linier tapi merupakan sinewave, jadi Anda tidak dapat mengambil output langsung sebagai representasi proporsional dari sudut kemiringan berdasarkan gravitasi. Biasanya voltase x dan y accelerometer akan menjadi setengah dari tegangan suplai saat mengukur nol g (yaitu perangkat tegak lurus terhadap gravitasi - horizontal). Miringkan satu arah dan voltase akan bertambah, miringkan ke arah lain dan akan turun. Dengan akselerometer sumbu tiga sumbu z akan berukuran 1g dengan perangkat horizontal. Output dari accelerometer adalah sinewave percepatan yang diukur. Accelerometer lebih sensitif terhadap perubahan kecil pada kemiringan saat mereka tegak lurus terhadap gravitasi. Yaitu. Bila horizontal, perubahan kecil pada kemiringan memberikan pembacaan yang bermanfaat. Melewati sekitar 45 derajat kemiringan mereka menjadi semakin kurang sensitif. Untuk alasan ini adalah umum untuk menggunakan lebih dari satu nilai sumbu saat menentukan sudut kemiringan seperti yang akan terlihat di bawah ini. Mengukur Sudut Kemiringan dengan Satu Sumbu Jika Anda ingin mengukur kemiringan pada sumbu x dan y dengan akselerometer 2 sumbu maka Anda cukup menggunakan sin-1 (a) di mana a adalah keluaran dari satu sumbu akselerometer. Ingatlah bahwa di luar 45 dan -45 derajat keakuratan akan mengurangi sudut pengukur sudut menggunakan dua poros Penurunan resolusi dan ketepatan di luar 45 derajat kemiringan dapat diperbaiki dengan menggunakan 2 sumbu untuk mengukur kemiringan Komponen gravitasi yang bekerja pada sumbu x adalah Fungsi sinus sementara yang bekerja pada sumbu y adalah kosinus. Bila sensitivitas sumbu x mulai menurun setelah 45 derajat kemiringan, sensitivitas sumbu y meningkat. Seperti dapat dilihat pada grafik di bawah ini, bagian tebal dari masing-masing garis menunjukkan area yang paling sensitif. Jadi dengan menggabungkan nilai x dan y, akurasi yang jauh lebih baik dapat diperoleh Mengukur Sudut Tilt menggunakan Tiga Sumbu Untuk pengukuran kemiringan yang akurat pada bidang x dan y, kita memerlukan akselerometer sumbu 3. Kita bisa menggunakan rumus di atas untuk menghitung sudut dengan menggunakan x dan z untuk sumbu x dan menggunakan y dan z untuk sumbu y. Namun kita bisa memperbaiki keadaan lebih jauh dengan menggunakan ketiga keluaran tersebut untuk menghitung setiap sudutnya. Hal ini dilakukan dengan menggunakan rumus berikut. Mari kita turun ke beberapa Coding Mudah-mudahan, kita sekarang cukup jelas tentang prinsip-prinsipnya, namun mari kita lihat bagaimana hal ini dilakukan dalam praktik. Kami akan menggunakan akselerometer 3 sumbu dan mengerjakan sudut untuk roll (x) dan pitch (y). Kita akan mengasumsikan bahwa tergantung pada jenis accelerometer yang digunakan, Anda telah membaca nilai untuk x, y dan z dan Anda juga memiliki nilai awal untuk x, y dan z ketika akselerometer stasioner dan level. Void calcxyangles (void) Menggunakan xy dan z dari accelerometer, hitung x dan y angles float xval, yval, zval, hasil unsigned short long x2, y2, z2 24 bit Mari kita dapatkan deviasi dari baseline xval (float) accelvaluex - (float ) Accelcenterx yval (float) accelvaluey - (float) accelcentery zval (float) accelvaluez - (float) accelcenterz Buat kuadrat x2 (unsigned short long) (xvalxval) y2 (unsigned short long) (yvalyval) z2 (unsigned short long) (Zvalzval) X Axis resultqrt (y2z2) resultxvalresult accelanglex atan (hasil) Hasil Sumbu Y (x2z2) resultyvalresult accelangley atan (hasil) Ok, thats it. Hanya beberapa catatan tentang accelerometers pada umumnya. Mereka sangat sensitif dan karena itu cukup rentan terhadap getaran. Jika Anda menggunakan satu di sistem dengan motor atau sumber getaran lainnya, saya sangat menyarankan beberapa bentuk redaman busa. Juga, ambil beberapa bacaan dari accelerometer dan rata-rata mereka untuk menyaring suara apapun.
No comments:
Post a Comment