Я начинаю немного запутываться по поводу частоты дискретизации, скорости передачи данных и т. Д. У меня есть этот код Arduino:
#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;
}
}
}
}
}
Поскольку нет прерывания задержки, какова частота дискретизации / частота? Это основано на скорости АЦП Arduino? Когда я увеличиваю скорость передачи данных, я увеличиваю частоту дискретизации или просто скорость, с которой я посылаю данные через последовательный порт?
источник
Я также хотел получить высокую частоту дискретизации для проекта. Оказывается, биты ADPS2, ADPS1, ADPS0 регистра ADCSRA могут быть сконфигурированы для получения частоты дискретизации 76923 с / с или 76,8 кс / с. Но, помните, что я запускаю АЦП моего Arduino в режиме свободного запуска, следующие строки работали для меня.
На этой частоте обычные 10-битные результаты не надежны. Это означает, что увеличение частоты дискретизации приведет к снижению точности результатов. Поэтому я использую только старшие 8 бит, потому что на этом прескалярном старшие 8 бит надежны. Вы можете перейти более подробно на этой странице, этот чувак качается! он сделал осциллограф с высокой частотой дискретизации, используя UNO http://www.instructables.com/id/Girino-Fast-Arduino-Oscilloscope/
источник
В каждом цикле вы печатаете 8 символов по последовательной линии связи 9600 бит / с. Каждый символ занимает 10 бит (1 старт, 8 бит для символа, 1 стоп). Это означает, что вы можете пройти только этот цикл ~ 120 раз / сек.
analogRead()
Функция может попробовать примерно в 9600 раз / сек в теории, реально она составляет около 8600 раз / сек.Вы ограничены последовательной связью.
источник
Отправляя 11 бит по последовательному каналу со скоростью 9600 бод, но для выборки я сохраняю их в массиве с минимальной задержкой, а затем, как только это будет сделано, я отправляю его через последовательный порт для чтения скриптом Python. Я делаю это для БПФ с использованием matplotlib. Я слушаю сигнал 0-5В, затем, не используя функцию delay (), сохраняю значения analogRead () в этом массиве. Через доли секунды чтение завершается, затем начинается дамп последовательных данных. Когда я откалибровал входную частоту с помощью тона () от другого подключенного Arduino, я понял, что мне пришлось разделить индекс на 8915, чтобы получить точность с точностью до 0,1 Гц. Поскольку для получения правильных интервалов индекса нужно было бы разделить его на частоту дискретизации, я предполагаю, что частота дискретизации Arduino (по крайней мере, моя с моим кодом) составляет 8915 Гц.
источник
Обращаясь к части о разнице между частотой дискретизации и скоростью передачи, они представляют собой разные измерения.
Частота дискретизации - это частота, с которой устройство (arduino) может воссоздавать цифровое представление входящих аналоговых значений.
Скорость передачи - это скорость, с которой информация передается по каналу связи. Он описывает скорость связи между микроконтроллером и внешним миром (компьютером).
Я бы порекомендовал эту ссылку electronics_stack_exchange. /electronics/135056/sampling-rate-data-rate-and-bandwidth
источник
8915 Гц - это очень близко к 125000/14 ~ = 8928,6. По моему первоначальному предположению, между соседними преобразованиями требуется ровно один разрыв: один тактовый сигнал АЦП для выборки и 13 тактовых импульсов АЦП для самого преобразования. Небольшая ошибка может быть следствием неидеального тактового источника Arduino. Я пока не уверен. Эта тема актуальна для меня сейчас, так как выборочные данные должны питать цифровой фильтр.
источник
analogRead()
используя узкий цикл, по сравнению с очень стабильными 9615,4 Гц в режиме свободного хода.