Как считывать цифровые данные и отправлять их через последовательный порт на ПК со скоростью около 2 МГц?
Я хотел бы прочитать аналоговые данные с частотой дискретизации около 2 МГц и отправить их на ПК для обработки с помощью python для цифрового осциллографа. Я использую Arduino Nano. Я нашел АЦП (AD9057, PDF), который может обрабатывать до 40 Мбит / с в 8 бит параллельно, но я все еще сталкиваюсь с некоторыми проблемами
Как я могу быстро считывать цифровые данные контакта на частоте 2-4 МГц? Я читал, что это возможно с помощью прямой манипуляции портом.
Как я могу отправить данные на компьютер с такой частотой дискретизации? Я знаю, что максимальная скорость передачи данных arduino составляет около 2.000.000 или, скажем, 2 мегабайта/с, поэтому для выборки 2 МГц я мог отправлять только один символ в микросекунду, может ли это быть быстрее?
Спасибо
@Zahi Azmi, 👍1
Обсуждение1 ответ
Лучший ответ:
Короче говоря, ты не можешь.
Чтобы иметь передачу 2 МГц, вам нужно 2*Nbit МГц последовательного тактового сигнала, чтобы отправить его на ПК, где Nbit-это количество бит на образец. Поскольку минимум равен 8, то для синхронизации или дополнительных битов последовательный тактовый сигнал должен быть не менее 16 МГц. Это системные часы nano. Так что ни за что.
Теперь перейдем к альтернативам. Первый вопрос: каков интерфейс вашего АЦП? Я нашел LTC2204. Это параллельный АЦП, поэтому вам нужно что-то, чтобы преобразовать его во что-то читаемое ПК.
Я не уверен в целесообразности этого, но нано недостаточно. Я бы использовал STM32 (потому что у меня есть их платы Nucleo, но вы можете искать другие 32-битные платы) и высокоскоростной последовательный интерфейс. Поскольку даже SPI может быть медленным, возможно, необходимо использовать ethernet. Мне не удалось найти платы с собственным интерфейсом Ethernet; в любом случае микроконтроллеры STM32F4 должны (см. Эту статью) иметь интерфейс Ethernet, и вам понадобится "только" PHY. Я думаю, что это единственный применимый способ следовать.
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Ошибка "'Serial' does not name a type"
- Что означает “LSB на градус в секунду” (LSB per degree per second)?
- Построение графика на Python с использованием Tkinter Canvas
- Команда strtok() с Serial связью
- Как отправить целое число через pyserial с Python на Arduino и получить тот же результат?
- Сделать плату Arduino одновременно и USB-накопителем, и клавиатурой?
- Ошибка 'Serial' was not declared in this scope
объявление 2. С асинхронным последовательным интерфейсом это на самом деле 2Mega бита, а не мега байт. В синхронном режиме это возможно., @KIIV
Читать [this](http://peter.lorenzen.us/3d-printer/stress-testing-5-3mbit-sec-serial-debug-stream-from-arduino) и [это](https://github.com/NicksonYap/digitalWriteFast). На самом деле вы можете просто написать ассемблерный код для чтения определенного ПОРТА (например,
PORTD
) и вставить его в регистры UART. Если этого недостаточно, приобретите более качественный и быстрый микроконтроллер (ESP8266 / ESP32). Также [это](https://www.youtube.com/watch?v=_LnZrXrdC00) может быть интересно., @Maximilian GerhardtВы хотите считывать аналоговые значения (с помощью АЦП) или цифровые данные непосредственно с помощью PIN-регистров? Это огромная разница, и написать и то, и другое-ваш вопрос., @chrisl
@MaximilianGerhardt спасибо, приятель, я прочитаю это, @Zahi Azmi
@KIIV что это значит с синхронным последовательным?, @Zahi Azmi
@chrisl я хотел бы прочитать входящий цифровой сигнал от внешнего АЦП, @Zahi Azmi
Тогда как же вы подключили внешний АЦП к Nano? Какой внешний АЦП вы используете? Пожалуйста, предоставьте ссылку на таблицу данных, @chrisl
Для чтения USART / UART http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf Глава 24. С USART вы должны отправить дополнительный тактовый сигнал, но можете достичь гораздо более высокой скорости., @Maximilian Gerhardt
@chrisl отредактировал, добавил таблицу данных, @Zahi Azmi