Saya mulai agak bingung tentang laju sampling dan baudrate dll. Saya punya kode Arduino ini:
#include <eHealth.h>
extern volatile unsigned long timer0_overflow_count;
float fanalog0;
int analog0;
unsigned long time;
byte serialByte;
void setup() {
Serial.begin(9600);
}
void loop() {
while (Serial.available()>0){
serialByte=Serial.read();
if (serialByte=='S'){
while(1){
fanalog0=eHealth.getECG();
// Use the timer0 => 1 tick every 4 us
time=(timer0_overflow_count << 8) + TCNT0;
// Microseconds conversion.
time=(time*4);
//Print in a file for simulation
//Serial.print(time);
//Serial.print(" ");
Serial.print(fanalog0,5);
Serial.print("\n");
if (Serial.available()>0){
serialByte=Serial.read();
if (serialByte=='F') break;
}
}
}
}
}
Karena tidak ada penundaan interupsi, berapakah laju sampling / frekuensi? Apakah ini berdasarkan kecepatan ADC Arduino? Ketika saya meningkatkan baudrate apakah saya meningkatkan frekuensi pengambilan sampel atau hanya tingkat di mana saya mengirim data melalui port serial?
sumber
Saya juga ingin mendapatkan sampling rate tinggi, untuk sebuah proyek. ternyata bit ADPS2, ADPS1, ADPS0 dari register ADCSRA dapat dikonfigurasi untuk mendapatkan laju sampling 76923 s / dtk atau 76,8 ks / dtk. Tetapi, berhati-hatilah bahwa saya menjalankan ADC arduino saya dalam mode berlari bebas, baris-baris berikut bekerja untuk saya.
Pada frekuensi ini, hasil 10-bit yang biasa tidak dapat diandalkan. Ini berarti bahwa meningkatkan laju sampel akan mengurangi ketepatan hasil. Jadi saya hanya menggunakan bit atas 8 karena pada prescalar ini bit atas 8 dapat diandalkan. Anda dapat melihat lebih detail di halaman ini, dude rocks! ia membuat sampel oscilloscpe tingkat tinggi menggunakan UNO http://www.instructables.com/id/Girino-Fast-Arduino-Oscilloscope/
sumber
Setiap loop Anda mencetak 8 karakter melalui tautan serial 9600bps. Setiap karakter membutuhkan 10 bit (1 start, 8 bit untuk karakter, 1 stop). Itu berarti Anda hanya bisa melewati loop ini ~ 120 kali / detik.
The
analogRead()
Fungsi dapat mencicipi sekitar 9600 kali / detik dalam teori, realistis itu adalah tentang 8600 kali / detik.Anda dibatasi oleh komunikasi serial.
sumber
Mengirim 11 bit melalui serial dengan baud 9600, tetapi untuk pengambilan sampel, saya menyimpannya dalam array dengan penundaan sesedikit mungkin, kemudian setelah selesai, saya mengirimkannya melalui port serial untuk dibaca oleh skrip python. Saya melakukan ini untuk FFT menggunakan matplotlib. Saya mendengarkan sinyal 0-5V, lalu tanpa menggunakan fungsi delay (), saya menyimpan nilai analogRead () ke dalam array itu. Dalam sepersekian detik pembacaan selesai, maka dump data serial dimulai. Ketika saya mengkalibrasi frekuensi input menggunakan nada () dari Arduino lain yang terhubung, saya menyadari bahwa saya harus membagi indeks dengan 8915 untuk mendapatkan akurasi dalam 0,1 Hz. Karena kita harus membagi dengan frekuensi sampling untuk mendapatkan interval indeks yang tepat, tebakan saya adalah frekuensi sampling Arduino (setidaknya milik saya dengan kode saya) adalah 8915Hz.
sumber
Mengacu pada bagian tentang perbedaan antara laju sampel dan laju baud, mereka adalah pengukuran yang berbeda.
Sample Rate adalah frekuensi di mana perangkat (arduino) dapat membuat ulang representasi digital dari nilai analog yang masuk.
Baud Rate adalah tingkat di mana informasi ditransfer dalam saluran komunikasi. Ini menggambarkan tingkat komunikasi antara mikrokontroler dan dunia luar (komputer).
Saya akan merekomendasikan tautan electronics_stack_exchange ini. /electronics/135056/sampling-rate-data-rate-and-bandwidth
sumber
8915Hz - sangat dekat dengan 125000/14 ~ = 8928.6 Tebakan awal saya bahwa tepat satu celah diperlukan antara konversi yang berdekatan Satu jam ADC untuk pengambilan sampel dan 13 jam ADC untuk konversi itu sendiri. Kesalahan kecil bisa jadi akibat dari sumber clock Arduino yang tidak sempurna. Saya belum yakin. Topik ini aktual bagi saya sekarang karena data sampel harus mengumpankan filter digital.
sumber
analogRead()
dalam loop ketat, vs 9615,4 Hz yang sangat konsisten dalam mode bebas-lari.