Сэмплирование стереозвука с частотой более 40 Гц с использованием Arduino

Я работаю над проектом по созданию динамика с реактивным освещением. Мне нужно иметь возможность сэмплировать стереофонический звук с приличной скоростью для песен. Функция audioRead() может работать с 8 кГц, и я слышал, что вы можете увеличить ее до 35 кГц, но затем вы можете использовать только ее для моно, и вы не можете использовать Arduino ни для чего другого.

  • Кто-то порекомендовал мне использовать АЦП. Что это может сделать для меня?

  • Является ли ограничением скорость работы Arduino?

  • Если не ардуино, то какой другой микроконтроллер подойдет для этой цели.

, 👍1


2 ответа


Лучший ответ:

3

Если вас интересует только интенсивность звука, тогда может быть достаточно 8кГц. Вы также можете преобразовать сигнал в моно с помощью пары резисторов. Если вы хотите, чтобы Arduino делал другие вещи при снятии аналоговых показаний вам следует отказаться от analogRead() и получить прямой доступ к АЦП. Это более сложно, чем типичный Arduino программирование, поскольку оно включает в себя настройку АЦП на низком уровне, в «свободной среде». рабочий режим». В этом режиме АЦП работает автономно, и посылать вам прерывание каждый раз, когда сэмпл готов.

Я написал программу, которая делает нечто похожее: аналоговый вход на частоте 9,6 кГц (104 мкс на выборку) и периодически отправляет показания через последовательный порт: sound-meter.ino. Ты можешь возможно, адаптируют его для управления светодиодами вместо последовательного порта.

,

Спасибо. На этот раз я сделаю это, используя этот метод, но могу ли я как-нибудь сделать стерео и/или 50 кГц +? Просто любопытно., @A.Shetye

@A.Shetye: Для стерео вы можете добавить что-то вроде ADMUX ^= _BV(MUX0); в ISR, чтобы чередовать входы A0 и A1, но тогда частота дискретизации для каждого канала будет вдвое меньше. . Для более быстрой выборки вы можете установить прескалер на 16 и получить 76,9 кГц в моно или вдвое меньше, чем в стерео, но я не гарантирую, что Arduino будет справляться с вычислительной нагрузкой. Предделитель ниже 16, скорее всего, будет давать очень шумные показания., @Edgar Bonet


1

Первая часть ограничения скорости Arduino заключается в том, что АЦП работает очень медленно. Если бы у вас был более быстрый чип АЦП, вы могли бы снимать аналоговые показания быстрее, поэтому вы могли бы снимать больше в секунду. Как только вы превысите этот порог, следующее ограничение, с которым вы столкнетесь, — это скорость, с которой Arduino может взаимодействовать с этим АЦП. Поэтому убедитесь, что вы получаете что-то быстрое (например, SPI).

,