Хранение данных с Arduino без последовательной печати - Высокая частота дискретизации
Для моей работы мне нужно получать данные с высокой частотой дискретизации (>100 Кса/сек) с помощью Arduino Portenta H7, который имеет 3 X 16-битных АЦП. Portenta H7 имеет микроконтроллер STM32H747XI. Я не хочу использовать команду Serial.print, так как узнал, что выполнение этой команды занимает много времени, что делает невозможным достижение целевой частоты дискретизации. Каковы другие возможные способы хранения данных от Arduino при сохранении такой высокой частоты дискретизации? Например, сохранение данных и последующая печать их всех сразу в конце тестирования( 3-5-секундный период тестирования). например, с помощью SD-карты или через сохранение во внутренней памяти Arduino? Можете ли вы предложить методы, используемые для сбора данных с высокой частотой дискретизации от Arduino?
@Basit Ali, 👍1
Обсуждение1 ответ
Portenta имеет чип STM32H7 Cortex M7 и минимум 8M байт внешней SDRAM в дополнение к 1M на чипе.
Вам нужно захватить 2 канала x 2 байта x 100K/s x 5s = 2M байтов данных, поэтому хранение их в оперативной памяти и выплевывание позже кажется жизнеспособным и малорискованным подходом.
Медленная последовательная связь может занять несколько минут для передачи 2-метровых байтов данных, но у вас есть другие варианты, если это нежелательно.
Я не знаю, какой код экосистемы Arduino доступен. В среде IDE STM32Cube доступны примеры АЦП H7. АЦП будет тем, для чего вам нужны примеры., @Spehro Pefhany
- Выводы Portenta для АЦП
- Хранение данных в SDRAM Arduino Portenta H7
- Разрешение micros() для Portenta H7
- Постоянный выход тактовой частоты Arduino
- Расширение аналоговых входов для Arduino
- ESP8266: system_adc_read_fast() всегда возвращает 1024
- Высокоскоростной внешний АЦП
- Измерение напряжения литий-ионного элемента, используемого для питания Arduino через повышающий модуль
Насколько велика "выборка"? Сколько образцов до "конца тестирования"?, @Elliot Alderson
Итак, около 2 мегабайт. Что это за Arduino? "Arduino" - это торговая марка, а не продукт. Почему это должен быть Arduino?, @Elliot Alderson
@JanDorniak Спасибо, мой мозг полностью пропустил это мимо ушей., @Elliot Alderson
Serial.print() работает медленно, когда речь идет о реальном UART, но он должен быть довольно быстрым при запуске через прямое USB - соединение. Ваша плата явно имеет прямой USB-доступ к основному MCU, что было бы разумным способом сделать это (даже если вы сначала буферизуете ОЗУ), но не совсем ясно, является ли это каналом USB на разъеме USB-C и поддерживается последовательным классом Arduino или другим доступно только на заголовке. В конечном счете, вы могли бы сделать лучше с каким-то более традиционным потоковым решением, например, на основе Cypress FX2 USB-FIFO или тому подобного., @Chris Stratton