реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> stm32f407, ADC и flash ART prefetcher, решение проблем с шумом АЦП
Шаманъ
сообщение Feb 16 2017, 09:51
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Приветствую всех!

Обнаружил такую засаду (которая оказалась частично документирована в errata на этот камушек). Началось с того, что внесение в код некоторых изменений (не связаны с работой АЦП) приводило к росту шума АЦП где-то в 6 раз 1111493779.gif . Из-за чего устройство переставало нормально работать. При этом код этот к АЦП никакого отношения не имел sm.gif, ну а закончилось, когда изменение кода в той части, которая никогда не выполняется дало тот же результат laughing.gif
При этом единственное, что изменилось в работающей части кода это некоторые части кода сдвинулись на 4 байта. После этого подозрения упали на модуль флеш памяти и ART. Отключение "префетчера" полностью решило вопрос с шумом АЦП. В принципе примерно то же описано в AN4073.

Собственно это вступление, которое может кому-то будет полезно sm.gif Теперь вопрос - в более старших моделях есть специальные биты ADCDC1/ADCxDC2 которые позволяют эту проблему пофиксить и оставить префетчер включенным, в 407х их нет. В принципе мне хватает производительности и с отключенным префетчером, но все же, так сказать на будущее - кто-то боролся с этим безобразием в 407м? Если да, то какой был результат и как он был достигнут (если не секрет)?
Go to the top of the page
 
+Quote Post
Игорь_Sh88
сообщение Apr 4 2018, 11:31
Сообщение #2





Группа: Участник
Сообщений: 5
Регистрация: 4-04-18
Пользователь №: 102 913



Аналогичная ситуация, только отключение prefetch не помогает
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 4 2018, 12:42
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Речь идёт о FLASH_ACR_PRFTEN? Я его отключил по другой причине: еррата говорит, что в ревизии А эта штука глючит, и я это наблюдал. Опять же, скорости хватает, зачем копать глубже? laughing.gif
Кстати, говорят, медианная фильтрация эффективно срезает выбросы, так что изучите возможность применения.
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 4 2018, 13:19
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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)

Go to the top of the page
 
+Quote Post
amaora
сообщение Apr 4 2018, 18:04
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



В STM32F405 замечал повышенный шум если во время преобразования идет выполнение. Обычно делаю преобразование по событию таймера когда МК находится во сне. Префетч отключать не пробовал, с выполнение из RAM не сравнивал.
Go to the top of the page
 
+Quote Post
Игорь_Sh88
сообщение Apr 11 2018, 05:51
Сообщение #6





Группа: Участник
Сообщений: 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, которые отвечают за снижение шумов вызванные работой буфера предвыборки.
Go to the top of the page
 
+Quote Post
amiller
сообщение Apr 11 2018, 10:25
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Цитата(Игорь_Sh88 @ Apr 11 2018, 09:51) *
частота дискретизации 2048000 выборок в секунду.

Вы загнали АЦП практически под теоретический предел по частоте. При максимальной тактовой 36МГц для АЦП и с минимальным временем выборки из одного канала АЦП можно выжать 2116кГц для режима 12 бит.
А если импульсы синхронизации будут идти чаще, чем длительность преобразования, возможны нехорошие последствия.
Рекомендую снизить частоту до более разумной для этого кристалла и увеличить время выборки.
Если нужна всё же нужна большая скорость к Вашим услугам double and triple mode.
Go to the top of the page
 
+Quote Post
Игорь_Sh88
сообщение Apr 11 2018, 14:11
Сообщение #8





Группа: Участник
Сообщений: 5
Регистрация: 4-04-18
Пользователь №: 102 913



Предел по частоте дискретизации равен 2400000. (36 МГц делим на 15, где 15 это сума 12 с 3) тоесть запас есть. Пробовал даже на 2.304 МГц запускать - все норм. За совет спасибо, попробую triple или double mode но не думаю, что это решит проблему с шумами на этом камне.
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Apr 11 2018, 14:24
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(scifi @ Apr 4 2018, 15:42) *
Кстати, говорят, медианная фильтрация эффективно срезает выбросы, так что изучите возможность применения.

Она используется изначально, ибо в том применении все очень плотно с шумами АЦП было.

P.S. Вот уж не думал, что через год кто-то напишет в тему sm.gif Да, девайс давно и успешно работает с отключенным префетчером.
Go to the top of the page
 
+Quote Post
amiller
сообщение Apr 12 2018, 02:12
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Игорь_Sh88
сообщение Apr 12 2018, 08:28
Сообщение #11





Группа: Участник
Сообщений: 5
Регистрация: 4-04-18
Пользователь №: 102 913



Все правильно, 17 тактов при внешней синхронизации, 15 при внутренней от таймера в моем случае.
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 12 2018, 09:08
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Игорь_Sh88 @ Apr 12 2018, 11:28) *
Все правильно, 17 тактов при внешней синхронизации, 15 при внутренней от таймера в моем случае.

Внутренний таймер в качестве триггера - это тот же внешний триггер в этом контексте. Имеется в виду внешний по отношению к АЦП.
Go to the top of the page
 
+Quote Post
golf2109
сообщение Apr 13 2018, 15:13
Сообщение #13


Участник
*

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



а для серии F7 также такое набдюдается?
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Apr 14 2018, 05:37
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(golf2109 @ Apr 13 2018, 18:13) *
а для серии F7 также такое набдюдается?

Я ж в первом сообщении про это писал: "...в более старших моделях есть специальные биты ADCDC1/ADCxDC2 которые позволяют эту проблему пофиксить и оставить префетчер включенным". Подробности смотрите в AN4073.
На практике об F7 ничего сказать не могу, т.к. задач требующих очень малые шумы АЦП на F7 не попадалось.

Сообщение отредактировал Шаманъ - Apr 14 2018, 05:38
Go to the top of the page
 
+Quote Post
Игорь_Sh88
сообщение Apr 17 2018, 06:23
Сообщение #15





Группа: Участник
Сообщений: 5
Регистрация: 4-04-18
Пользователь №: 102 913



Цитата(amiller @ Apr 12 2018, 02:12) *
Вы слишком оптимистичны в этом направлении. Когда мне нужно было обеспечить 2,5МГц дискретизацию, я перешел на double mode.


Попробовал double mode для АЦП. Частота дискретизации отдельного АЦП уменшылась соответственно вдвое и стала равной 1024000 выб/с, однако на шумы это никак не повлияло, что характер, что уровень не изменился. Отключение буфера предвыборки не сильно помогает.
. В качестве эксперимента также запускал в triple mode АЦП, по этом шумы как были так и остались, а вот чувствительность АЦП к слабым сигналам (менее 2 мВ) упала примерно в четверо, как будто АЦП стало 10 битным.
. Далее буду пробовать все сделать на STM32F7
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016