Как проверить, правильно ли выполняет выборку АЦП Arduino-Mega?

У меня есть код, который дискретизирует заданные входные сигналы с частотой дискретизации 256 Гц. Я построил график БПФ и смог увидеть пики на ожидаемых частотах. Но мне хотелось бы знать, правильно ли осуществляет выборку мой АЦП или нет? Есть ли способ сделать это?`

    void setup() 
{ Serial.begin(38400); 
} 

const unsigned long READ_PERIOD = 3906;  // 3906 мс: 256 Гц
void loop() {
    static unsigned long lastRead;
    if (micros() - lastRead >= READ_PERIOD) {
        lastRead += READ_PERIOD;
        int val_a0 = analogRead(A0);
        int val_a1 = analogRead(A3);
        int val_a2 = analogRead(A5);
        int val_a3 = analogRead(A7);
       Serial.print(val_a0);
       Serial.print("  ");
       Serial.print(val_a1);
       Serial.print("  ");
      Serial.print(val_a2);
      Serial.print("  ");
        Serial.println(val_a3);
    }
}

, 👍0


1 ответ


2

В этом случае скорость передачи данных будет настоящим узким местом. Вам необходимо отправить от 110 до 230 бит за одно чтение (1 стартовый бит, 8 бит данных, 1 стоповый бит)*(3*2 пробела + 4–16 цифровых символов + 1 перевод строки).

Это означает, что в лучшем случае (все числа меньше 10) 349 показаний в секунду. А в худшем случае — 166 показаний в секунду (все показания больше 999).

Таким образом, вероятность того, что выборка будет выполнена правильно, составляет около 10%.

Вы можете проверить, будет ли следующий раз (с вводящим в заблуждение именем lastReading) меньше текущего времени. Это означает, что вы уже слишком медленны.

,