Высокоскоростной внешний АЦП
Я хотел бы обнаруживать сигналы в наносекундном масштабе. Для этого требуется АЦП с частотой не менее 500 МС / с.
Мой вопрос в том, можно ли использовать внешний АЦП с частотой 500 МС / с с Arduino Mega 16 МГц? Если нет, существует ли какое-либо дополнительное оборудование, такое как буфер FIFO, для решения этой проблемы?
Пожалуйста, помогите, спасибо!
@double_espresso, 👍0
Обсуждение2 ответа
Лучший ответ:
Из ссылки Arduino на analogRead: "Для считывания аналогового входа требуется около 100 микросекунд (0,0001 с), поэтому максимальная скорость считывания составляет около 10 000 раз в секунду".
500 мс / с - это ужасно высокая скорость-мой первый инстинкт, возможно, вам нужно пересмотреть то, что вам нужно, и почему.
Действительно, есть чипы, которые сделают это за вас. Это все еще невозможно с помощью Arduino, так как Arduino даже не может так быстро получать данные, не говоря уже о том, чтобы обрабатывать их. Предполагая 8-битную выборку, это создаст поток данных со скоростью 4 гигабита в секунду - я сомневаюсь, что какой - либо диск может записывать так быстро (SATA3 составляет 4,8 Гбит/с, что на 20% больше, я подозреваю, что 20% будут съедены накладными расходами-вы не можете просто отправлять необработанные данные на диск, вы также должны указать, куда их поместить. Это просто объясняет передачу данных в схему привода, а не их фактическое хранение).
Возможно, то, что вы ищете, - это осциллограф. Осциллограф снимает показания с высокой скоростью и отображает их. Осциллографы часто используются для тестирования схем (например, для просмотра того, что выдает/считывает Arduino, когда он программируется). Просматривая веб-сайты National Instruments, я смог найти их самый дешевый, который делает > 500 мбит / с, стоит около 8000 долларов (приблизительный показатель). Вы все равно не сможете сохранить это на диск или обработать каким - либо значимым образом в реальном времени-такая плата, как правило, будет захватывать данные (на основе триггера, пробуйте, пока память не заполнится, затем медленно перемещайте данные на ПК для обработки.
Мне нужно измерить время прохождения туда и обратно определенной электромагнитной волны, которая движется со скоростью света. Но я заменил Arduino и использую высокоскоростной осциллограф (с частотой 5 ГЦ/с) для своего приложения. В любом случае, спасибо за предложение!, @double_espresso
Нет, конечно, невозможно выполнить прямую выборку со скоростью 500 Мс / с на Arduino с помощью внешнего АЦП. Простая математика:
- Arduino может выполнять 16 миллионов инструкций (в лучшем случае) в секунду
- АЦП выполняет 500 миллионов выборок в секунду.
- 500 / 16 = 31.25
Поэтому АЦП будет генерировать 31,25 сэмпла для каждого такта Arduino, поэтому, если вы не сможете встроить компрессор времени (возможно, с конденсатором потока тоже), он просто не сможет этого сделать.
Так что вместо этого вам придется мыслить творчески. Возможное решение будет включать:
- Высокоскоростная flash или конвейерный АЦП, в идеале с параллельным выходом.
- Большой кусок памяти, выполняющий роль буфера.
- Высокоскоростной источник тактовой частоты для установки времени (500 МГц?).
- Склейте логику и счетчики, чтобы взять один образец, сохранить его в буфере и увеличить адрес буфера.
- Больше логики и интерфейсов, позволяющих Arduino получать доступ к буферной памяти и управлять работой системы выборки.
Для меня это звучит как работа для ПЛИС, и при частоте 500 МГц это довольно быстрая ПЛИС. Вам следует изучить некоторые платы разработки FPGA от Xilinx и Altera.
Извините за поздний ответ, но я понял, что Arduino не подходит для моего приложения. Мне нужно измерить время прохождения туда и обратно определенной электромагнитной волны, которая движется со скоростью света. Поэтому я уже заменил Arduino и использую высокоскоростной осциллограф (с частотой 5 ГЦ/с) для своего приложения. Спасибо вам за предложение!, @double_espresso
- HX711 - Несогласованные показания
- Неточное считывание напряжения с аналогового вывода Arduino
- Ardunio Mega/ATmega2560: использование порта F или K как для аналоговых входов, так и для цифровых выходов.
- Чтение сигнала 4-20 мА на ардуино
- Arduino, python, pyfirmata, стандарт компании
- Проблема при попытке ограничить скорость двигателя определенным числом оборотов в минуту с помощью модуля триггерного переключателя MOSFET
- Сколько АЦП ADS1115 можно подключить к одному Arduino Mega 2560
- Расчет АЦП-преобразователя Arduino
Не уверен, чего вы хотите достичь, но вы можете использовать компаратор внутри ATmega328. Например, для определения того, когда напряжение превышает определенный порог. PS 16 МГц будет означать один тактовый цикл каждые 62,5 нс, так что вы уже находитесь в масштабе десятков наносекунд., @Gerben
Почему ты хочешь это сделать? Даже если бы вы могли делать 500 миллионов выборок в секунду, куда бы они делись? У вас есть только 2048 байт оперативной памяти на Uno., @Nick Gammon