|
stm32f407, ADC и flash ART prefetcher, решение проблем с шумом АЦП |
|
|
|
Feb 16 2017, 09:51
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Приветствую всех! Обнаружил такую засаду (которая оказалась частично документирована в errata на этот камушек). Началось с того, что внесение в код некоторых изменений (не связаны с работой АЦП) приводило к росту шума АЦП где-то в 6 раз  . Из-за чего устройство переставало нормально работать. При этом код этот к АЦП никакого отношения не имел  , ну а закончилось, когда изменение кода в той части, которая никогда не выполняется дало тот же результат  При этом единственное, что изменилось в работающей части кода это некоторые части кода сдвинулись на 4 байта. После этого подозрения упали на модуль флеш памяти и ART. Отключение "префетчера" полностью решило вопрос с шумом АЦП. В принципе примерно то же описано в AN4073. Собственно это вступление, которое может кому-то будет полезно  Теперь вопрос - в более старших моделях есть специальные биты ADCDC1/ADCxDC2 которые позволяют эту проблему пофиксить и оставить префетчер включенным, в 407х их нет. В принципе мне хватает производительности и с отключенным префетчером, но все же, так сказать на будущее - кто-то боролся с этим безобразием в 407м? Если да, то какой был результат и как он был достигнут (если не секрет)?
|
|
|
|
|
Apr 4 2018, 11:31
|
Группа: Участник
Сообщений: 5
Регистрация: 4-04-18
Пользователь №: 102 913

|
Аналогичная ситуация, только отключение prefetch не помогает
|
|
|
|
|
Apr 4 2018, 13:19
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(Шаманъ @ Feb 16 2017, 12:51)  Если да, то какой был результат и как он был достигнут (если не секрет)? FLASH_ACR_PRFTEN отключал, а для отсчетов делал усреднение по схеме N-X (8-4). Звук (речь) становился гораздо лучше. Код FLASH->ACR = 0 | (0 << FLASH_ACR_PRFTEN) | (1 << FLASH_ACR_DCEN) | (1 << FLASH_ACR_ICEN) | (6 << FLASH_ACR_LATENCY); #define MIC_N (8) #define MIC_X (4)
|
|
|
|
|
Apr 11 2018, 05:51
|
Группа: Участник
Сообщений: 5
Регистрация: 4-04-18
Пользователь №: 102 913

|
Делаю DDC приёмник на STM32F407 в 100 корпусе. Аналоговой сигнал через буферный повторитель, собранный на AD823, поступает на вход 10 канала ADC1 (PC0). Запуск АЦП по таймеру, частота дискретизации 2048000 выборок в секунду. Далее, по накоплению N отсчетов АЦП, данные по каналу DMA поступают в double буфер, откуда уже в прерывании по тому же DMA происходить их снос на ноль и децимация. На выходу получаю полосу в 32 кГц в IQ отсчетах и передаю их на комп по обычному UARTу. Проблема в тому что, при выборе определенного N, появляются искажения в исходном сигнале на частотах кратных 2048000/N Гц. Питание от USB, фильтры, опора, киндеры все сделал как надо. Пробовал решать проблему отключением буфера предвыборки - не помогает, точнее помехи стают меньше но более размазаны по полосе. Сейчас планирую переделать проект под STM32F7, там есть специальные настройку наподобие битовых полей ADCDC1 и ADCxDC, которые отвечают за снижение шумов вызванные работой буфера предвыборки.
|
|
|
|
|
Apr 11 2018, 10:25
|
Частый гость
 
Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612

|
Цитата(Игорь_Sh88 @ Apr 11 2018, 09:51)  частота дискретизации 2048000 выборок в секунду. Вы загнали АЦП практически под теоретический предел по частоте. При максимальной тактовой 36МГц для АЦП и с минимальным временем выборки из одного канала АЦП можно выжать 2116кГц для режима 12 бит. А если импульсы синхронизации будут идти чаще, чем длительность преобразования, возможны нехорошие последствия. Рекомендую снизить частоту до более разумной для этого кристалла и увеличить время выборки. Если нужна всё же нужна большая скорость к Вашим услугам double and triple mode.
|
|
|
|
|
Apr 11 2018, 14:11
|
Группа: Участник
Сообщений: 5
Регистрация: 4-04-18
Пользователь №: 102 913

|
Предел по частоте дискретизации равен 2400000. (36 МГц делим на 15, где 15 это сума 12 с 3) тоесть запас есть. Пробовал даже на 2.304 МГц запускать - все норм. За совет спасибо, попробую triple или double mode но не думаю, что это решит проблему с шумами на этом камне.
|
|
|
|
|
Apr 11 2018, 14:24
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(scifi @ Apr 4 2018, 15:42)  Кстати, говорят, медианная фильтрация эффективно срезает выбросы, так что изучите возможность применения. Она используется изначально, ибо в том применении все очень плотно с шумами АЦП было. P.S. Вот уж не думал, что через год кто-то напишет в тему  Да, девайс давно и успешно работает с отключенным префетчером.
|
|
|
|
|
Apr 12 2018, 02:12
|
Частый гость
 
Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612

|
Цитата(Игорь_Sh88 @ Apr 11 2018, 17:11)  Предел по частоте дискретизации равен 2400000. (36 МГц делим на 15, где 15 это сума 12 с 3) тоесть запас есть. Пробовал даже на 2.304 МГц запускать - все норм. За совет спасибо, попробую triple или double mode но не думаю, что это решит проблему с шумами на этом камне. Странно, а даташит на этот камень отводит при внешней синхронизации 17 тактов на одно преобразование, а не 15 тактов. Причём со сноской: Guaranteed by characterization results, not tested in production. По моему Вы слишком оптимистичны в этом направлении. Когда мне нужно было обеспечить 2,5МГц дискретизацию, я перешел на double mode.
|
|
|
|
|
Apr 12 2018, 08:28
|
Группа: Участник
Сообщений: 5
Регистрация: 4-04-18
Пользователь №: 102 913

|
Все правильно, 17 тактов при внешней синхронизации, 15 при внутренней от таймера в моем случае.
|
|
|
|
|
Apr 13 2018, 15:13
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 15-04-10
Из: Kiev
Пользователь №: 56 654

|
а для серии F7 также такое набдюдается?
|
|
|
|
|
Apr 14 2018, 05:37
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(golf2109 @ Apr 13 2018, 18:13)  а для серии F7 также такое набдюдается? Я ж в первом сообщении про это писал: "...в более старших моделях есть специальные биты ADCDC1/ADCxDC2 которые позволяют эту проблему пофиксить и оставить префетчер включенным". Подробности смотрите в AN4073. На практике об F7 ничего сказать не могу, т.к. задач требующих очень малые шумы АЦП на F7 не попадалось.
Сообщение отредактировал Шаманъ - Apr 14 2018, 05:38
|
|
|
|
|
Apr 17 2018, 06:23
|
Группа: Участник
Сообщений: 5
Регистрация: 4-04-18
Пользователь №: 102 913

|
Цитата(amiller @ Apr 12 2018, 02:12)  Вы слишком оптимистичны в этом направлении. Когда мне нужно было обеспечить 2,5МГц дискретизацию, я перешел на double mode. Попробовал double mode для АЦП. Частота дискретизации отдельного АЦП уменшылась соответственно вдвое и стала равной 1024000 выб/с, однако на шумы это никак не повлияло, что характер, что уровень не изменился. Отключение буфера предвыборки не сильно помогает. . В качестве эксперимента также запускал в triple mode АЦП, по этом шумы как были так и остались, а вот чувствительность АЦП к слабым сигналам (менее 2 мВ) упала примерно в четверо, как будто АЦП стало 10 битным. . Далее буду пробовать все сделать на STM32F7
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|