Как проверить, правильно ли выполняет выборку АЦП 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);
}
}
1 ответ
В этом случае скорость передачи данных будет настоящим узким местом. Вам необходимо отправить от 110 до 230 бит за одно чтение (1 стартовый бит, 8 бит данных, 1 стоповый бит)*(3*2 пробела + 4–16 цифровых символов + 1 перевод строки).
Это означает, что в лучшем случае (все числа меньше 10) 349 показаний в секунду. А в худшем случае — 166 показаний в секунду (все показания больше 999).
Таким образом, вероятность того, что выборка будет выполнена правильно, составляет около 10%.
Вы можете проверить, будет ли следующий раз (с вводящим в заблуждение именем lastReading
) меньше текущего времени. Это означает, что вы уже слишком медленны.
- Высокоскоростной внешний АЦП
- HX711 - Несогласованные показания
- Неточное считывание напряжения с аналогового вывода Arduino
- Ardunio Mega/ATmega2560: использование порта F или K как для аналоговых входов, так и для цифровых выходов.
- Чтение сигнала 4-20 мА на ардуино
- Arduino, python, pyfirmata, стандарт компании
- Проблема при попытке ограничить скорость двигателя определенным числом оборотов в минуту с помощью модуля триггерного переключателя MOSFET
- Сколько АЦП ADS1115 можно подключить к одному Arduino Mega 2560