Zaczynam się trochę mylić co do częstotliwości próbkowania i prędkości transmisji itp. Mam ten kod 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;
}
}
}
}
}
Ponieważ nie ma przerwania opóźnienia, jaka jest częstotliwość próbkowania / częstotliwość? Czy jest oparty na prędkości Arduino ADC? Czy po zwiększeniu prędkości transmisji zwiększam częstotliwość próbkowania, czy tylko szybkość, z jaką wysyłam dane przez port szeregowy?
źródło
Chciałem też uzyskać wysoką częstotliwość próbkowania dla projektu. okazuje się, że bity ADPS2, ADPS1, ADPS0 rejestru ADCSRA można skonfigurować tak, aby uzyskać częstotliwość próbkowania 76923 s / s lub 76,8 ks / s. Ale uwaga, że uruchamiam ADC mojego arduino w trybie swobodnym, następujące linie działały dla mnie.
Przy tej częstotliwości zwykłe wyniki 10-bitowe nie są wiarygodne. Oznacza to, że zwiększenie częstotliwości próbkowania obniży dokładność wyników. Używam tylko górnych 8 bitów, ponieważ przy tym prescalar górne 8 bitów jest niezawodne. Możesz przejść do bardziej szczegółowych informacji na tej stronie, ten koleś kołysze! wykonał oscyloskop o wysokiej częstotliwości próbkowania za pomocą UNO http://www.instructables.com/id/Girino-Fast-Arduino-Oscilloscope/
źródło
W każdej pętli drukujesz 8 znaków przez łącze szeregowe 9600bps. Każdy znak wymaga 10 bitów (1 początek, 8 bitów dla znaku, 1 stop). Oznacza to, że możesz przejść przez tę pętlę tylko ~ 120 razy / sek.
analogRead()
Funkcja próbki około 9600 razy / sek teoretycznie realistyczny jest około 8600 razy / sek.Jesteś ograniczony przez komunikację szeregową.
źródło
Wysyłam 11 bitów przez port szeregowy z szybkością 9600, ale dla próbkowania przechowuję go w tablicy z możliwie najmniejszym opóźnieniem, a następnie, gdy to zrobione, wysyłam przez port szeregowy do odczytu przez skrypt python. Robię to dla FFT przy użyciu matplotlib. Słucham sygnału 0-5 V, a następnie bez użycia funkcji delay () przechowuję wartości analogRead () w tej tablicy. W ułamku sekundy odczyt jest zakończony, a następnie rozpoczyna się zrzut danych szeregowych. Kiedy skalibrowałem częstotliwość wejściową za pomocą tonu () z innego podłączonego Arduino, zdałem sobie sprawę, że muszę podzielić indeks przez 8915, aby uzyskać dokładność z dokładnością do 1 Hz. Ponieważ należałoby podzielić przez częstotliwość próbkowania, aby uzyskać odpowiednie interwały indeksu, domyślam się, że częstotliwość próbkowania Arduino (przynajmniej moja z moim kodem) wynosi 8915 Hz.
źródło
Odnosząc się do części dotyczącej różnicy między częstotliwością próbkowania a szybkością transmisji, są to różne pomiary.
Częstotliwość próbkowania to częstotliwość, z jaką urządzenie (arduino) może odtworzyć cyfrową reprezentację przychodzących wartości analogowych.
Szybkość transmisji to szybkość, z jaką informacje są przesyłane w kanale komunikacyjnym. Opisuje szybkość komunikacji między mikrokontrolerem a światem zewnętrznym (komputerem).
Poleciłbym ten link electronic_stack_exchange. /electronics/135056/sampling-rate-data-rate-and-bandwidth
źródło
8915Hz - jest to bardzo blisko 125000/14 ~ = 8928.6 Moje początkowe przypuszczenie, że dokładnie jedna przerwa jest wymagana między sąsiednimi konwersjami Jeden zegar ADC do próbkowania i 13 zegarów ADC do samej konwersji. Mały błąd może wynikać z niedoskonałego źródła zegara Arduino. Nie jestem jeszcze pewien. Ten temat jest teraz dla mnie aktualny, ponieważ próbkowane dane muszą zasilać filtr cyfrowy.
źródło
analogRead()
w ciasnej pętli, w porównaniu do bardzo spójnego 9615.4 Hz w trybie swobodnym.