Сэмплирование стереозвука с частотой более 40 Гц с использованием Arduino
Я работаю над проектом по созданию динамика с реактивным освещением. Мне нужно иметь возможность сэмплировать стереофонический звук с приличной скоростью для песен. Функция audioRead()
может работать с 8 кГц
, и я слышал, что вы можете увеличить ее до 35 кГц
, но затем вы можете использовать только ее для моно, и вы не можете использовать Arduino ни для чего другого.
Кто-то порекомендовал мне использовать АЦП. Что это может сделать для меня?
Является ли ограничением скорость работы Arduino?
Если не ардуино, то какой другой микроконтроллер подойдет для этой цели.
@A.Shetye, 👍1
2 ответа
Лучший ответ:
Если вас интересует только интенсивность звука,
тогда может быть достаточно 8кГц. Вы также можете преобразовать сигнал в моно
с помощью пары резисторов. Если вы хотите, чтобы Arduino делал другие вещи
при снятии аналоговых показаний вам следует отказаться от analogRead()
и получить прямой доступ к АЦП. Это более сложно, чем типичный Arduino
программирование, поскольку оно включает в себя настройку АЦП на низком уровне, в «свободной среде».
рабочий режим». В этом режиме АЦП работает автономно, и
посылать вам прерывание каждый раз, когда сэмпл готов.
Я написал программу, которая делает нечто похожее: аналоговый вход на частоте 9,6 кГц (104 мкс на выборку) и периодически отправляет показания через последовательный порт: sound-meter.ino. Ты можешь возможно, адаптируют его для управления светодиодами вместо последовательного порта.
Первая часть ограничения скорости Arduino заключается в том, что АЦП работает очень медленно. Если бы у вас был более быстрый чип АЦП, вы могли бы снимать аналоговые показания быстрее, поэтому вы могли бы снимать больше в секунду. Как только вы превысите этот порог, следующее ограничение, с которым вы столкнетесь, — это скорость, с которой Arduino может взаимодействовать с этим АЦП. Поэтому убедитесь, что вы получаете что-то быстрое (например, SPI).
- Как подключить ардуино к разъему для наушников?
- Подключить Arduino к телефонной линии?
- Синтезатор Arduino Uno — выход линейного уровня (аудио) на микшер/усилитель
- Взаимодействие ADS8319 с Arduino UNO
- DFPlayer для записи на SD-карту
- Ускорение двигателя постоянного тока с помощью ШИМ
- Как найти пиковое значение аналогового сигнала?
- Генерация истинного аналогового сигнала с помощью Arduino
Спасибо. На этот раз я сделаю это, используя этот метод, но могу ли я как-нибудь сделать стерео и/или 50 кГц +? Просто любопытно., @A.Shetye
@A.Shetye: Для стерео вы можете добавить что-то вроде
ADMUX ^= _BV(MUX0);
в ISR, чтобы чередовать входы A0 и A1, но тогда частота дискретизации для каждого канала будет вдвое меньше. . Для более быстрой выборки вы можете установить прескалер на 16 и получить 76,9 кГц в моно или вдвое меньше, чем в стерео, но я не гарантирую, что Arduino будет справляться с вычислительной нагрузкой. Предделитель ниже 16, скорее всего, будет давать очень шумные показания., @Edgar Bonet