Какой микроконтроллер, совместимый с Arduino, для 2 непрерывных аналоговых аудиозаписей и 2 снимков цифровых выводов каждую секунду?
Извините, если заголовок не очень хорошо сформулирован. Я новичок в электронике и пытаюсь узнать больше о встроенных системах. У меня есть небольшой проект, который требует записи аналогового аудиовхода с 8-битной частотой 40 кГц и сохранения его каждую секунду на SD-карту.
Хотя я знаю, что могу сделать это с набором микросхем ATmega328P, я не уверен, что вычислительной мощности ATmega328P будет достаточно для дальнейшего расширения проекта.
В идеале я хотел бы иметь возможность одновременно записывать два источника звука на частоте около 40 кГц — 16 или 24 бита было бы идеально, а также записывать два сенсорных сигнала каждую секунду.
Это устройство должно работать от батареи разумного размера не менее двух часов, а в идеале - до восьми часов.
Мне нравится идея работать на чипсете AT91SAM3X8E, но я боюсь, что это может быть излишеством для такого небольшого проекта, и нынешняя серия Cortext-M3 может быть слишком большой для этого проекта.
Поэтому мой вопрос заключается в том, подходят ли ATmega328P или ATmega2560 для таких требований — с точки зрения вычислительной мощности, или мне нужно перейти на что-то вроде AT91SAM3X8E?
@Mahdi, 👍0
1 ответ
Лучший ответ:
Поэтому у меня вопрос: подойдет ли ATmega328P или ATmega2560 для таких требований
Нет. Ни в малейшей степени.
Ваше основное требование по сэмплированию звука, в основном, с качеством CD (или лучше) требует использования надлежащего чипа кодека, а для управления им требуется микроконтроллер с I2S. Ни в одном из 8-битных чипов AVR такого нет.
Кроме того, вам понадобится МНОГО памяти. Гораздо больше, чем у 8-битного Arduino. Для двух каналов 16-битного звука с частотой 44 100 Гц (качество CD) требуется 176 400 байт в секунду.
Вам понадобится вдвое больше.
Для непрерывной записи и сохранения данных вам потребуется DMA для выполнения записи. DMA считывает входящие данные от I2S и сохраняет их в одном буфере. Когда этот буфер заполнен, вы генерируете прерывание и переключаетесь на второй буфер. Затем вы можете сохранить первый буфер на SD - при условии, что это можно сделать менее чем за секунду. Обратите внимание, что SD-карты, управляемые SPI, как это обычно бывает на микроконтроллерах, обычно работают довольно медленно.
Итак, учитывая все это:
Мне нравится идея работать на чипсете AT91SAM3X8E, но я боюсь, что это может оказаться излишним для такого небольшого проекта
Перебор? Нет. Не подходит, так как не соответствует задаче. Да, у него есть I2S. Да, у него есть ДМА. Но у него недостаточно памяти. Только для звука вам потребуется 350 килобайт (у SAM3X8E до 100 килобайт), не говоря уже о памяти, необходимой для буферов SD-карты.
Итак, вам нужен микроконтроллер с полной поддержкой I2S, прямым доступом к памяти и объемом памяти около полумегабайта. И они не такие маленькие и дешевые, как 8-битные AVR Arduino.
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- Программирование Arduino на Паскале?
- Какая ардуино подойдет с купюроприемником
- Операторы If и while не работают
- Проблема повторения
- Нужна помощь с моими кодами? для моего проекта: Наполнение и укупорка с помощью Arduino uno
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
Отлично, большое спасибо! Как вы думаете, есть ли способ записывать сэмплы во время прерывания - скажем, каждые 20 мкс, во временное быстрое, но маленькое ОЗУ, а затем записывать это на SD-карту каждую секунду. Таким образом, самому микроконтроллеру не потребуется встроенная дополнительная память., @Mahdi
Кроме того, вся идея буферизации данных заключается в том, чтобы не держать SD-карту постоянно включенной, просто для снижения энергопотребления. Если мы пока проигнорируем это, как вы думаете, mega328 может записывать данные в реальном времени на (высококачественную, быструю) SD-карту без каких-либо задержек?, @Mahdi
Что касается временного кеша, может, какая-нибудь быстрая EEPROM подойдет?, @Mahdi
Нет и нет. Вам *нужен* более мощный MCU., @Majenko
"записывать данные в реальном времени на (высококачественную, быструю) SD-карту без каких-либо задержек?" Возможная скорость SD-карты не важна, если вы используете SPI. Для достижения высоких скоростей передачи данных необходимо использовать параллельный интерфейс передачи данных. И даже с этим наиболее похожим микроконтроллером (при условии, что он у вас есть, что в целом соответствует задаче) будет узким местом. Так что возможная скорость SD-карты не имеет большого значения., @chrisl