Mysteo 0 5 февраля, 2020 Опубликовано 5 февраля, 2020 · Жалоба On 2/4/2020 at 1:05 PM, zoolu said: Попробуйте Clock Polarity поменять на Low И communication Standard на MSB . У меня в настройках проекта такие параметры были. Завтра STM32F4Discovery из дома на работу принесу подробнее еще разберу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zoolu 0 6 февраля, 2020 Опубликовано 6 февраля, 2020 · Жалоба Я окончательно запутался.... Тактирую микрофон частотой 1Мгц. Забираю с него данные по 16 бит. Получается 1 полуслово я получаю с частотой 64кГц. При децимейшн факторе 64 мне в фильтр нужно скормить 32 полуслова. Соответственно я их приму с частотой 2кГц. Где обещанная частота дискретизации 16кГц? Что я делаю не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 6 февраля, 2020 Опубликовано 6 февраля, 2020 · Жалоба При децимейшн факторе 64 вам нужно скормить 4 полуслова, а не 32. DECIMATION_FACTOR_64 - это 64 бита, одно полуслово это 16 бит. Соответственно 4 полуслова. Начните сначала с самого простого, в настройках PDM фильтра поставьте outputSamplesNumber = 1; Заведиде DMA : HAL_I2S_Receive_DMA(&hi2s2, PDM_BUFFER, 8); В обработчике по заполнению половины буфера и полного буфера скармливайте PDM фильтру соответственно первые 4 полуслова, и последние 4 полуслова. Все должно работать. В моем проекте фильтр настроен на 256 выходных значений. Decimation Factor 64 . 1 / (64 * 256 / 1025000) = 62.5 Гц. Каждые 62.5 Гц у меня заполняется по половине буфера. Осциллограф тоже самое подтверждает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zoolu 0 6 февраля, 2020 Опубликовано 6 февраля, 2020 · Жалоба Ох ёмоё!!! Спасибо огромное! Перепутать байты и биты..... Все заработало просто отлично! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 6 февраля, 2020 Опубликовано 6 февраля, 2020 · Жалоба Ура )) А что за проект делаете если не секрет. И шимом я как понимаю вы звук с микрофона куда то выводите? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zoolu 0 6 февраля, 2020 Опубликовано 6 февраля, 2020 · Жалоба Микрофон-манипулятор для громкоговорящей установки. Следующий этап развития- прикручивание библиотеки AEC))) А ШИМ да, через RC цепочку и на УНЧ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 6 февраля, 2020 Опубликовано 6 февраля, 2020 · Жалоба А я не стал с AEC разбираться , хотя нужно тоже осваивать. Через ШИМ + RC цепочка звук лучше чем через 12 битный ЦАП получается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zoolu 0 7 февраля, 2020 Опубликовано 7 февраля, 2020 · Жалоба Да нет, я бы не сказал. Чтобы вывести частоту ШИМ далеко за звуковую, приходится снижать его разрядность. Я в итоге имею при частоте МК 84Мгц 10-ти битный ШИМ с частотой 82кГц. И 10-битный ШИМ лучше чем 8-битный ЦАП))) Если есть возможность использовать 12-бит ЦАП, то это самый лучший вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 13 февраля, 2020 Опубликовано 13 февраля, 2020 · Жалоба zoolu а можете показать код каким образом вы звук выводите ? У меня при передаче через ЦАП частые щелчки, скорее всего дело в рассинхронизации скорости работы SAI и таймера работы с ЦАП Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sharask 0 26 мая, 2020 Опубликовано 26 мая, 2020 · Жалоба Добрый день, можете поделиться проектом с этим микрофоном? Я борюсь вторую неделю подряд, никак не работает. Слышен треск, но .... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BorisBritwa 0 24 августа, 2020 Опубликовано 24 августа, 2020 · Жалоба Я разобрался с этим вопросом. проект https://drive.google.com/file/d/1QUBxso2SIrSIxNUaaQ84a-vVT9O6Jsrv/view?usp=sharing Теория здесь https://youtu.be/g8fs3wJxCtY Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv40in 0 30 июля, 2021 Опубликовано 30 июля, 2021 (изменено) · Жалоба On 8/24/2020 at 8:29 AM, BorisBritwa said: Я разобрался с этим вопросом. проект https://drive.google.com/file/d/1QUBxso2SIrSIxNUaaQ84a-vVT9O6Jsrv/view?usp=sharing Теория здесь https://youtu.be/g8fs3wJxCtY хмм.. а как запустить , чтобы хоть как-то заработало? ( у меня stm32cubeide, stm32f407**disc) Изменено 30 июля, 2021 пользователем vv40in Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GMVM 0 2 сентября, 2021 Опубликовано 2 сентября, 2021 · Жалоба Здравствуйте! Ковыряюсь с микрофоном на discovery-F4. Не могу никак понять как эта штука работает. Вот стандартная настройка: /* PDM2PCM init function */ void MX_PDM2PCM_Init(void) { /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /** */ PDM1_filter_handler.bit_order = PDM_FILTER_BIT_ORDER_LSB; PDM1_filter_handler.endianness = PDM_FILTER_ENDIANNESS_BE; PDM1_filter_handler.high_pass_tap = 2104533974; PDM1_filter_handler.in_ptr_channels = 1; PDM1_filter_handler.out_ptr_channels = 1; PDM_Filter_Init(&PDM1_filter_handler); PDM1_filter_config.decimation_factor = PDM_FILTER_DEC_FACTOR_64; PDM1_filter_config.output_samples_number = 16; PDM1_filter_config.mic_gain = 0; PDM_Filter_setConfig(&PDM1_filter_handler, &PDM1_filter_config); /* USER CODE BEGIN 3 */ /* USER CODE END 3 */ } static uint8_t I2S2_Init(uint32_t AudioFreq) { /* Initialize the hAudioInI2s Instance parameter */ hAudioInI2s.Instance = I2S2; /* Disable I2S block */ __HAL_I2S_DISABLE(&hAudioInI2s); /* I2S2 peripheral configuration */ hAudioInI2s.Init.AudioFreq = I2S_AUDIOFREQ_16K; hAudioInI2s.Init.ClockSource = I2S_CLOCK_PLL; hAudioInI2s.Init.CPOL = I2S_CPOL_LOW; hAudioInI2s.Init.DataFormat = I2S_DATAFORMAT_16B_EXTENDED; hAudioInI2s.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; hAudioInI2s.Init.Mode = I2S_MODE_MASTER_RX; hAudioInI2s.Init.Standard = I2S_STANDARD_MSB; /* Initialize the I2S peripheral with the structure above */ if (HAL_I2S_Init(&hAudioInI2s) != HAL_OK) { return AUDIO_ERROR; } else { return AUDIO_OK; } } Затем запускаем прием по DMA в цикле. 1. На микрофон идет 1,024 Мгц () (2 канала X 16кГц X 32бит). L/R подтянут к земле, значит работает левый канал. Но i2s работает с 2мя каналами, т.е в PDM потоке, который будет DMA писать в буфер будет 2 канала, причем в правом будет какой-то шум, т.к второго микрофона нет? 2. bit_order это порядок бит в PDM потоке. endianness - порядок байт в PCM? 3. Как работают in_ptr_channels, out_ptr_channels? Почему, если во входном потоке у нас по идее 2 канала, везде пишут 1 канал? В общем пока фундаментальное непонимание работы. На практике пока что принимаю один шум. Кто разобрался, ответьте, пожалуйста, на вопросы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Elektrokot 0 12 февраля, 2022 Опубликовано 12 февраля, 2022 · Жалоба У вас получилось? Такие же вопросы имею про 2 канала. 02.09.2021 в 15:27, GMVM сказал: Здравствуйте! Ковыряюсь с микрофоном на discovery-F4. Не могу никак понять как эта штука работает. Вот стандартная настройка: /* PDM2PCM init function */ void MX_PDM2PCM_Init(void) { /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /** */ PDM1_filter_handler.bit_order = PDM_FILTER_BIT_ORDER_LSB; PDM1_filter_handler.endianness = PDM_FILTER_ENDIANNESS_BE; PDM1_filter_handler.high_pass_tap = 2104533974; PDM1_filter_handler.in_ptr_channels = 1; PDM1_filter_handler.out_ptr_channels = 1; PDM_Filter_Init(&PDM1_filter_handler); PDM1_filter_config.decimation_factor = PDM_FILTER_DEC_FACTOR_64; PDM1_filter_config.output_samples_number = 16; PDM1_filter_config.mic_gain = 0; PDM_Filter_setConfig(&PDM1_filter_handler, &PDM1_filter_config); /* USER CODE BEGIN 3 */ /* USER CODE END 3 */ } static uint8_t I2S2_Init(uint32_t AudioFreq) { /* Initialize the hAudioInI2s Instance parameter */ hAudioInI2s.Instance = I2S2; /* Disable I2S block */ __HAL_I2S_DISABLE(&hAudioInI2s); /* I2S2 peripheral configuration */ hAudioInI2s.Init.AudioFreq = I2S_AUDIOFREQ_16K; hAudioInI2s.Init.ClockSource = I2S_CLOCK_PLL; hAudioInI2s.Init.CPOL = I2S_CPOL_LOW; hAudioInI2s.Init.DataFormat = I2S_DATAFORMAT_16B_EXTENDED; hAudioInI2s.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; hAudioInI2s.Init.Mode = I2S_MODE_MASTER_RX; hAudioInI2s.Init.Standard = I2S_STANDARD_MSB; /* Initialize the I2S peripheral with the structure above */ if (HAL_I2S_Init(&hAudioInI2s) != HAL_OK) { return AUDIO_ERROR; } else { return AUDIO_OK; } } Затем запускаем прием по DMA в цикле. 1. На микрофон идет 1,024 Мгц () (2 канала X 16кГц X 32бит). L/R подтянут к земле, значит работает левый канал. Но i2s работает с 2мя каналами, т.е в PDM потоке, который будет DMA писать в буфер будет 2 канала, причем в правом будет какой-то шум, т.к второго микрофона нет? 2. bit_order это порядок бит в PDM потоке. endianness - порядок байт в PCM? 3. Как работают in_ptr_channels, out_ptr_channels? Почему, если во входном потоке у нас по идее 2 канала, везде пишут 1 канал? В общем пока фундаментальное непонимание работы. На практике пока что принимаю один шум. Кто разобрался, ответьте, пожалуйста, на вопросы. У вас получилось? Такие же вопросы имею про 2 канала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться